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.
También hice un artículo sobre cómo monitorear Docker usando también InfluxDB, Grafana y Telegraf.
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:
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:
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.
Si te surge alguna duda o consulta, no dudes en dejar un comentario aquí abajo.