InfluxDBWeek: Cómo desplegar InfluxDB, Chronograf, Kapacitor y Telegraf en Docker + Bonus Track.

Bienvenidos a esta semana dedicada a InfluxDB. Hoy veremos como desplegar en Docker InfluxDB, Chronograf, Kapacitor y Telegraf en Docker.

Hace un par de semanas que vengo cebado con todo lo que es Observability, buscando formas de explotar información, porque estoy convencido de que la información nos permiten tomar decisiones y muchas veces, buenas.

Hace unas semanas hice una introducción donde hable sobre cómo explotar métricas de Traefik con InfluxDB y Grafana.

Cómo explotar las métricas de Traefik 2.2 con InfluxDB y Grafana
En este artículo, te voy a mostrar cómo configurar Traefik e InfluxDB para explotar métricas desde Grafana.

También hice un artículo sobre cómo monitorear Docker usando también InfluxDB, Grafana y Telegraf.

Monitoreando Docker con Telegraf, InfluxDB y Grafana
En este artículo, te voy a mostrar cómo monitorear Docker, usando Telegraf, InfluxDB y Grafana.

En este artículo, les mostraré cómo desplegar el stack TICK (Telegraf, InfluxDB, Chronograf, Kapacitor) con una sencilla receta de Docker Compose.

Antes de meterse a desplegar, te quiero mostrar el siguiente gráfico donde se explica qué es lo que hace cada uno de los componentes:

Arquitectura de la Suite TICK

Empecemos

docker-compose.yml

version: "3.3"

services:
  influxdb:
    container_name: influxdb
    image: influxdb:latest
    volumes:
      - ./influxdb:/var/lib/influxdb
    ports:
      - 8086:8086
    networks:
      - "monitoring"

  chronograf:
    container_name: chronograf
    image: chronograf:latest
    ports:
      - 8888:8888
    volumes:
      - "./chronograf:/var/lib/chronograf"
    networks:
      - "monitoring"

  telegraf:
    container_name: telegraf
    image: telegraf:latest
    volumes:
      - "./telegraf.conf:/etc/telegraf/telegraf.conf:ro"
      - "/var/run/docker.sock:/var/run/docker.sock"
    networks:
      - "monitoring"

  kapacitor:
    container_name: kapacitor
    image: kapacitor:latest
    environment:
      - KAPACITOR_INFLUXDB_0_URLS_0=http://influxdb:8086
      - KAPACITOR_HOSTNAME=kapacitor
      - KAPACITOR_LOGGING_LEVEL=INFO
      - KAPACITOR_REPORTING_ENABLED=false
    volumes:
      - "./kapacitor:/var/lib/kapacitor"
    ports:
      - 9092:9092
    networks:
      - "monitoring"


volumes:
  chronograf:
  influxdb:


networks:
  monitoring:

Lo que vemos acá arriba es la configuración que vamos a desplegar. En este caso, veremos el InfluxDB, que es donde vamos a tener almacenado todo lo que el Telegraf le "inyecte", Chronograf, que es el portal desde donde vamos a consumir lo que tenga esa base.

También vemos que expongo los puertos, en este caso de cada contenedor, excepto el del Telegraf. A proposito de este último, también monto un volumen apuntado a su archivo de configuración, que es el necesario para definir los "inputs". También veremos volúmenes relacionados a InfluxDB, que es imprescindible para que la información sea persistente, lo mismo con la configuración de Chronograf, lo mismo para Kapacitor.

UP

Una vez que tenemos definida nuestra configuración, vamos a ejecutar:

docker-compose up -d
Creating telegraf   ... done
Creating kapacitor  ... done
Creating influxdb   ... done
Creating chronograf ... done

Una vez creados, verificamos que estén corriendo los contenedores, para eso ejecutamos:

docker ps

La terminal, nos debería devolver algo como esto:

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                          NAMES
2fa48cec540e        chronograf:latest   "/entrypoint.sh chro…"   19 seconds ago      Up 17 seconds       0.0.0.0:8888->8888/tcp         chronograf
9af17e77670b        influxdb:latest     "/entrypoint.sh infl…"   19 seconds ago      Up 17 seconds       0.0.0.0:8086->8086/tcp         influxdb
f03d26a1a1a8        kapacitor:latest    "/entrypoint.sh kapa…"   19 seconds ago      Up 18 seconds       0.0.0.0:9092->9092/tcp         kapacitor
e360ed4ccef2        telegraf:latest     "/entrypoint.sh tele…"   19 seconds ago      Up 18 seconds       8092/udp, 8125/udp, 8094/tcp   telegraf

Configuración Chronograf

Una vez que estamos arriba, entramos al Chronograf para comenzar a configurarlo:

En mi caso y para este artículo, no puse ningún reverse proxy adelante, así que entro directamente tipeando localhost:8888 que es el puerto expuesto del contenedor Chronograf.

Si accedemos, vamos a ver la siguiente pantalla:

La misma es la bienvenida, donde solo debemos hacer un clic en "Get Started", luego, nos llevará a la siguiente, donde debemos especificar nuestro InfluxDB.

Fijense que ya seteo la base de datos "telegraf" especifico el host donde está el InfluxDB y el nombre de la conexión. Luego, podemos poner más fuentes de información, tantas como queramos. Le damos "Update Connection" y pasa a la siguiente pantalla:

Si ya tenemos, desde Telegraf, mandando información al InfluxDB o queremos configurar un dashboard para luego comenzar a consumirla, podemos seleccionarlo desde acá. Hay varias opciones que vienen por defecto, acá esta la lista:

Using pre-created dashboards in Chronograf | InfluxData Documentation
Preconfigured dashboards can quickly be used to display metrics for popular applications, including Apache, Consul, Docker, Elasticsearch, InfluxDB, Mesos, MySQL, NGINX, PostgreSQL, RabbitMQ, Redis, and more.

El siguiente paso es la especificación de la conexión a Kapacitor. Esta herramienta, nos va a permitir manejar las alertas, tiene muchos "handlers" posibles y usamos Chronograf para administrarlo también.

Si esta todo bien, veremos la siguiente pantalla, en donde nos indica que la configuración ha sido completada.

La siguiente pantalla a dónde nos lleva es a ver todas las conexiones que tenemos y en donde, si necesitamos, agregamos otras.

Ahora bien, veamos de monitorear algo para probar que tal anda, así que vamos a darle paso al Bonus Track.

Bonus Track

Nuestro ambiente TICK esta en pleno funcionamiento, vamos a monitorear algunos certificados SSL.

Primero, vamos a configurar Telegraf, que es el cliente (Agente) que nos va a ayudar con la recolección. Esta configuración involucra especificar nuestro InfluxDB y la base de datos a la cual le vamos a "inyectar" la información.

Una vez hecho esto, vamos a monitorear algunos certificados SSL

Debemos buscar lo siguiente y descomentarlo:

[[inputs.x509_cert]]

Lo mismo para esta línea, pero aquí, lo cambiaríamos por los dominios que queremos revisar:

sources= ["https://www.example.org:443", "/etc/tls/certs/www.example.org"]

En mi caso, los dejo así:

sources = ["tcp://cduser.com:443", "tcp://stats.cduser.com:443", "tcp://google.com:443", "tcp://tienda.antel.com.uy:443"]

Guardamos y reiniciamos el contenedor de Telegraf.

Ahora, volvemos al Chronograf y vamos a la parte que dice "explore" y en la caja que nos invita a poner una query, ponemos lo siguiente:

SELECT (expiry / 60 / 60 / 24) as "expiry" FROM "telegraf"."autogen"."x509_cert" WHERE "common_name"='cduser.com'

Para tu caso, el "common name" de tu certificado.

En mi caso, lo veo de esta forma, que son los días para que el certificado de este blog se venza:

Ahora bien, si se acuerdan más arriba, puse, no solo mi blog, puse el certificado de Google y la Tienda de Antel (Telco Estatal Uruguaya) y en mi caso, quedá así:

Como pueden ver es un dashboard muy sencillo que trae la información de cada certificado configurado.

Luego, se pueden configurar sobre eso, colores para cuando llega a determinado nivel. Por ejemplo, este dashboard, pasa a rojo cuando quedan menos de 10 días para vencerse. Lo mismo con las alertas que lo veremos en otro artículo.

Para ir cerrando

Espero que este artículo te haya servido, aquí abajo dejo el enlace a la receta en el Gitlab, así como también, el nuevo proyecto que abrí para hostear los dashboards que voy creando.

telegraf-influxdb-chronograf-kapacitor · master · Ignacio Van Droogenbroeck / Docker Recipes
Acá hay recetas que uso para mi y que comparto en el blog
Chronograf_1.x_Certificados_x509 · master · Ignacio Van Droogenbroeck / Chronograf e InfluxDB Dashboards
En este proyecto encontrarás dashboards que he fabricado de Chronograf e InfluxDB v2.

Si te surge alguna duda o consulta, no dudes en dejar un comentario aquí abajo.