Usar OpenTSDB para supervisar los datos de series temporales

En este instructivo, se describe cómo recopilar, registrar y supervisar datos de serie temporal en Google Cloud Platform (GCP) con OpenTSDB que se ejecuta en Google Kubernetes Engine (GKE) y Cloud Bigtable.

Los datos de serie temporal son un activo muy valioso que puedes usar para varias aplicaciones, que incluyen tendencias, supervisión y aprendizaje automático. Puedes generar datos de serie temporal a partir de la infraestructura del servidor, el código de la aplicación y otras fuentes. OpenTSDB puede recopilar y retener grandes cantidades de datos de serie temporal con un alto nivel de detalle.

En este instructivo, se detalla cómo crear una capa de recopilación de datos escalable mediante GKE y trabajar con los datos recopilados con Cloud Bigtable. En el siguiente diagrama, se muestra la arquitectura de alto nivel de la solución:

Diagrama de arquitectura de alto nivel de la solución de este instructivo para usar TSDB en GCP.

Objetivos

  • Crear una nueva instancia de Cloud Bigtable.
  • Crear un nuevo clúster de GKE.
  • Implementar OpenTSDB en tu clúster de GKE.
  • Enviar métricas de serie temporal a OpenTSDB.
  • Visualizar métricas con OpenTSDB y Grafana.

Costos

En este instructivo, se usan los siguientes componentes facturables de GCP:

  • Compute Engine
  • GKE
  • Cloud Bigtable
  • Cloud Storage

Usa la calculadora de precios para generar una estimación de los costos según el uso previsto.

Los usuarios nuevos de GCP pueden optar por una prueba gratuita.

Antes de comenzar

  1. Sign in to your Google Account.

    If you don't already have one, sign up for a new account.

  2. Select or create a Google Cloud Platform project.

    Go to the Manage resources page

  3. Comprueba que la facturación esté habilitada en tu proyecto.

    Descubre cómo puedes habilitar la facturación

  4. Habilita las Cloud Bigtable, Cloud Bigtable Admin, Compute Engine y Google Kubernetes Engine API necesarias.

    Habilita las API

Toma nota del ID del proyecto para usarlo en un paso posterior.

Prepara tu entorno

Usarás Cloud Shell para ingresar comandos en este instructivo. Cloud Shell te da acceso a la línea de comandos en GCP Console, incluido el SDK de Cloud y otras herramientas que necesitas para el desarrollo de GCP. Cloud Shell aparece como una ventana en la parte inferior de GCP Console. Es posible que la inicialización tarde unos minutos, pero la ventana aparecerá de inmediato.

  1. Activa Cloud Shell.

    ACTIVAR Cloud Shell

  2. Establece la zona predeterminada de Compute Engine como la zona donde crearás tu clúster de Cloud Bigtable, por ejemplo, us-central1-f.

    gcloud config set compute/zone us-central1-f
    
  3. Clona el repositorio de Git que contiene el código de muestra.

    git clone https://github.com/GoogleCloudPlatform/opentsdb-bigtable.git
    
  4. Dirígete al directorio del código de muestra:

    cd opentsdb-bigtable
    

Crea una instancia de Cloud Bigtable

En este instructivo, se usa Cloud Bigtable para almacenar los datos de serie temporal que recopilas. Debes crear una instancia de Cloud Bigtable para que haga ese trabajo.

Cloud Bigtable es un almacenamiento de columna amplia/clave que es de particular utilidad con datos de serie temporal, como se explica en Diseño de esquemas en Cloud Bigtable para datos de serie temporal. Cloud Bigtable es compatible con la API de HBase, lo que te facilita usar software diseñado para trabajar con Apache HBase, como OpenTSDB. Puedes obtener más información sobre el esquema HBase que usa OpenTSDB en la documentación de OpenTSDB.

Un componente clave de OpenTSDB es el cliente AsyncHBase, que permite que realice una escritura masiva en HBase de una manera totalmente asíncrona, sin bloqueo y segura para los hilos. Cuando usas OpenTSDB con Cloud Bigtable, AsyncHBase se implementa como el cliente AsyncBigtable.

La capacidad de escalar con facilidad para satisfacer tus necesidades es una característica clave de Cloud Bigtable. En este instructivo, se usa un clúster de desarrollo de un solo nodo, ya que es económico y suficiente para la tarea. Comienza tus proyectos en un clúster de desarrollo y pasa a un clúster de producción más grande cuando estés listo para trabajar con datos de producción. La documentación de Cloud Bigtable incluye un análisis detallado sobre el rendimiento y el escalamiento a fin de ayudarte a elegir un tamaño de clúster para tu trabajo.

Sigue estos pasos para crear tu instancia de Cloud Bigtable:

  1. Dirígete a la página Crear instancia en GCP Console.

    IR A LA PÁGINA CREAR INSTANCIA

  2. Ingresa un nombre para tu instancia en el cuadro Nombre de instancia. Puedes usar OpenTSDB instance o el nombre que prefieras. La página establece el ID de la instancia y el ID del clúster de forma automática cuando ingresas el nombre de la instancia.

  3. Establece el Tipo de instancia como Desarrollo.

  4. En Zona, selecciona us-central1-f o la zona desde la que ejecutarás OpenTSDB.

  5. Haz clic en Crear para crear la instancia.

Anota los valores del ID de instancia y la Zona. Los usarás en un paso posterior.

Crea un clúster de GKE

GKE proporciona un entorno Kubernetes administrado. Después de crear un clúster de GKE, puedes implementar en él los pods de Kubernetes. En este instructivo, se usan pods de GKE y Kubernetes para ejecutar OpenTSDB.

OpenTSDB separa el almacenamiento de su capa de aplicación, lo cual le permite implementarse de forma simultánea en múltiples instancias. Si se ejecuta en paralelo, puede controlar una gran cantidad de datos de serie temporal. Colocar OpenTSDB en un contenedor Docker permite una fácil implementación a gran escala con GKE.

Crea un clúster de Kubernetes mediante la ejecución del siguiente comando. Esta operación puede tardar unos minutos:

gcloud container clusters create opentsdb-cluster --scopes \
"https://www.googleapis.com/auth/bigtable.admin",\
"https://www.googleapis.com/auth/bigtable.data"

Agregar los dos alcances adicionales a tu clúster de GKE permite que el contenedor OpenTSDB interactúe con Cloud Bigtable. Puedes extraer imágenes desde Google Container Registry sin agregar un alcance para Cloud Storage, ya que el clúster puede leer desde Cloud Storage de forma predeterminada. Puede que necesites alcances adicionales en otras implementaciones.

En el resto de este instructivo, se usa un contenedor prediseñado, gcr.io/cloud-solutions-images/opentsdb-bigtable:v1, ubicado en Container Registry. Las secuencias de comandos Dockerfile y ENTRYPOINT que se usan para compilar el contenedor se encuentran en la carpeta build del repositorio del instructivo.

Crea un ConfigMap con detalles de configuración

Kubernetes proporciona un mecanismo llamado ConfigMap para separar los detalles de configuración de la imagen del contenedor a fin de que las apps sean más portátiles. La configuración de OpenTSDB se especifica en opentsdb.conf. Se incluye un ConfigMap que contiene opentsdb.conf en el código de muestra. Debes editarlo para que muestre los detalles de tu instancia.

Crea el ConfigMap

Edita la configuración de OpenTSDB para que use el nombre del proyecto, el identificador de instancia y la zona que usaste cuando creaste tu instancia.

  1. Para abrir el editor de código integrado en Cloud Shell, haz clic en el ícono de lápiz en la barra de herramientas que se encuentra en la parte superior de la ventana de Cloud Shell.

  2. Selecciona opentsdb-config.yaml en opentsdb/configmaps para abrirlo en el editor.

  3. Reemplaza el texto del marcador de posición con el nombre del proyecto, el identificador de instancia y la zona que estableciste en el instructivo.

  4. Desde el mensaje de Cloud Shell, crea un ConfigMap a partir de la opentsdb-config.yaml actualizada:

    kubectl create -f configmaps/opentsdb-config.yaml
    

Crea tablas de OpenTSDB en Cloud Bigtable

Antes de poder realizar operaciones de lectura o escritura de datos con OpenTSDB, debes crear las tablas necesarias en Cloud Bigtable para almacenarlos. Sigue estos pasos para crear un trabajo de Kubernetes que cree las tablas.

  1. Inicia el trabajo:

    kubectl create -f jobs/opentsdb-init.yaml
    
  2. El trabajo puede tardar uno o más minutos en completarse. Verifica que el trabajo se haya completado con éxito mediante la ejecución periódica de este comando:

    kubectl describe jobs
    

    El resultado debería indicar que un trabajo tuvo éxito bajo el encabezado Pods Statuses.

  3. Obtén los registros de trabajo de creación de tablas mediante la ejecución de los siguientes comandos:

    pods=$(kubectl get pods  --show-all --selector=job-name=opentsdb-init \
    --output=jsonpath={.items..metadata.name})
    
    kubectl logs $pods
    

Cuando obtengas los registros, examina la parte inferior de la respuesta, que debería indicar cada tabla que se creó. Este trabajo ejecuta varios comandos de creación de tablas, cada uno con la forma de create 'TABLE_NAME'. Busca una línea similar a 0 row(s) in 0.0000 seconds, en donde la duración real del comando se encuentra en lugar de 0.0000.

La respuesta debería incluir una sección similar a la siguiente:

create 'tsdb-uid',
  {NAME => 'id', COMPRESSION => 'NONE', BLOOMFILTER => 'ROW'},
  {NAME => 'name', COMPRESSION => 'NONE', BLOOMFILTER => 'ROW'}
0 row(s) in 1.3680 seconds

Hbase::Table - tsdb-uid

create 'tsdb',
  {NAME => 't', VERSIONS => 1, COMPRESSION => 'NONE', BLOOMFILTER => 'ROW'}
0 row(s) in 0.6570 seconds

Hbase::Table - tsdb

create 'tsdb-tree',
  {NAME => 't', VERSIONS => 1, COMPRESSION => 'NONE', BLOOMFILTER => 'ROW'}
0 row(s) in 0.2670 seconds

Hbase::Table - tsdb-tree

create 'tsdb-meta',
  {NAME => 'name', COMPRESSION => 'NONE', BLOOMFILTER => 'ROW'}
0 row(s) in 0.5850 seconds

Hbase::Table - tsdb-meta

Solo necesitas ejecutar este trabajo una vez. Muestra un mensaje de error si las tablas ya existen. Puedes continuar con el instructivo mediante las tablas existentes, si están presentes.

Modelo de datos

Las tablas que acabas de crear almacenarán datos de OpenTSDB. En un paso posterior, realizarás operaciones de escritura de datos de serie temporal en estas tablas. Los datos de serie temporal se organizan y almacenan de la siguiente manera:

Campo Obligatorio Descripción Ejemplo
metric Obligatorio Elemento que se mide: la clave predeterminada sys.cpu.user
timestamp Obligatorio Tiempo del ciclo de los eventos de la medición 1497561091
value Obligatorio Valor de la medición 89.3
tags Se requiere al menos una etiqueta Califica la medición con fines de consulta.

hostname=www

cpu=0

env=prod

Implementa OpenTSDB

En el resto de este instructivo, se proporcionan instrucciones para hacer que la situación de muestra funcione. En el siguiente diagrama, se muestra la arquitectura que debes usar:

Diagrama de la arquitectura usada en este instructivo para escribir, leer y visualizar datos de serie temporal.

En este instructivo, se usan dos implementaciones Kubernetes. Una de ellas envía métricas a OpenTSDB y la otra realiza operaciones de lectura desde este. El uso de dos implementaciones evita que las operaciones de lectura y escritura de larga ejecución se bloqueen entre sí. Los pods en cada implementación usan el mismo contenedor. OpenTSDB proporciona un daemon llamado tsd que se ejecuta en cada contenedor.

Un solo proceso tsd puede manejar una alta capacidad de procesamiento de eventos cada segundo. Para distribuir la carga, cada implementación de este instructivo crea 3 réplicas de los pods de lectura y escritura.

Crea una implementación para la escritura de métricas

La información de configuración para la implementación del escritor se encuentra en opentsdb-write.yaml en la carpeta deployments del repositorio del instructivo. Usa el siguiente comando para crearlo:

kubectl create -f deployments/opentsdb-write.yaml

Crea una implementación para la lectura de métricas

La información de configuración para la implementación del lector se encuentra en opentsdb-read.yaml en la carpeta deployments del repositorio del instructivo. Usa el siguiente comando para crearlo:

kubectl create -f deployments/opentsdb-read.yaml

En una implementación de producción, puedes aumentar la cantidad de pods tsd que se ejecutan de forma manual o mediante el ajuste de escala automático en Kubernetes. De manera similar, puedes aumentar la cantidad de instancias en tu clúster de GKE de forma manual o mediante el escalador automático del clúster.

Crea servicios de OpenTSDB

Para proporcionar una conexión de red coherente a las implementaciones, debes crear dos servicios Kubernetes. Uno escribe métricas en OpenTSDB y otro las lee.

Crea el servicio para la escritura de métricas

La información de configuración del servicio de escritura de métricas se encuentra en opentsdb-write.yaml en la carpeta de services del repositorio del instructivo. Usa el siguiente comando para crear el servicio:

kubectl create -f services/opentsdb-write.yaml

Este servicio se crea dentro de tu clúster de GKE y otros servicios que se ejecutan en tu clúster pueden acceder a él. En la siguiente sección de este instructivo, escribirás métricas en este servicio.

Crea el servicio para la lectura de métricas

La información de configuración del servicio de lectura de métricas se encuentra en opentsdb-read.yaml en la carpeta services del repositorio del instructivo. Usa el siguiente comando para crear el servicio:

kubectl create -f services/opentsdb-read.yaml

Realiza la escritura de datos de serie temporal en OpenTSDB

Hay varios mecanismos para la escritura de datos en OpenTSDB. Después de definir los extremos del servicio, puedes dirigir los procesos para que comiencen a escribir datos en ellos. En este instructivo, se usa Heapster para realizar una demostración de la escritura de datos. Tu implementación de Heapster recopila datos sobre GKE y publica las métricas del clúster de GKE en el que se ejecuta OpenTSDB.

Usa el siguiente comando para implementar Heapster en tu clúster:

kubectl create -f deployments/heapster.yaml

Examina datos de serie temporal con OpenTSDB

Puedes consultar las métricas de serie temporal con el extremo del servicio opentsdb-read que implementaste antes con el instructivo. Puedes usar los datos de varias maneras. Una opción común es visualizarlo. OpenTSDB incluye una interfaz básica para visualizar las métricas que recopila. En este instructivo, se usa Grafana, una alternativa popular para visualizar métricas que proporciona funciones adicionales.

Configura Grafana

Si deseas ejecutar Grafana en tu clúster, debes realizar un proceso similar al que usaste para configurar OpenTSDB. Además de crear un ConfigMap y una implementación, debes configurar la redirección de puertos de modo que puedas acceder a Grafana mientras tu clúster de GKE está en ejecución.

Sigue estos pasos para configurar Grafana

  1. Crea el ConfigMap de Grafana con la información de configuración en grafana.yaml en la carpeta configmaps del repositorio del instructivo.

    kubectl create -f configmaps/grafana.yaml
    
  2. Crea la implementación de Grafana con la información de configuración en grafana.yaml en la carpeta deployments del repositorio del instructivo.

    kubectl create -f deployments/grafana.yaml
    
  3. Obtén el nombre del pod de Grafana en el clúster y úsalo para configurar la redirección de puertos.

    grafana=$(kubectl get pods --show-all --selector=app=grafana \
      --output=jsonpath={.items..metadata.name})
    
    kubectl port-forward $grafana 8080:3000
    
  4. Verifica que la redirección fue exitosa. El resultado debería ser similar al siguiente:

    Forwarding from 127.0.0.1:8080 -> 3000
    Forwarding from [::1]:8080 -> 3000
    

Conéctate a la interfaz web de Grafana

En Cloud Shell, haz clic en vista previa en la Web y luego selecciona Vista previa en el puerto 8080.

Se abrirá una nueva pestaña del navegador y se conectará a la interfaz web de Grafana. Después de unos instantes, el navegador mostrará grafos como los siguientes:

Ejemplo de visualización de Grafana

Esta implementación de Grafana se personalizó para este instructivo. Los archivos configmaps/grafana.yaml y deployments/grafana.yaml configuran a Grafana para que se conecte al servicio opentsdb-read, permiten la autenticación anónima y muestran algunas métricas de clúster básicas. Una implementación de Grafana en producción implementa los mecanismos de autenticación adecuados y usa grafos de serie temporal más completos.

Limpieza

Sigue estos pasos para evitar que se apliquen cargos a tu cuenta de Google Cloud Platform por los recursos que usaste en este instructivo:

  1. Borra el clúster de GKE para finalizar todos los artefactos creados con anterioridad con el comando kubectl create:

    gcloud container clusters delete opentsdb-cluster
    

    A fin de borrar el clúster de GKE, escribe Y o presiona Intro para confirmar.

  2. A fin de borrar el clúster de Cloud Bigtable, haz clic en Productos y servicios en Google Cloud Platform Console. Haz clic en Bigtable, selecciona el clúster que creaste con anterioridad y haz clic en Borrar.

Pasos siguientes

¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...