Docker: TICK (Telegraf+InfluxDB+Chronograf+Kapacitor)
2020-03-12
Índice
Hace tiempo que escribí un articulo sobre como desplegar TIG (Telegraf + Influxdb + Grafana), ahora utilizo TICK (Telegraf + Influxdb + Chronograf + Kapacitor), en vez de Grafana, utilizo Chronograf y para la gestión de avisos Kapacitor.
En este articulo voy a explicar como hacer el despliegue de TICK mediante docker-compose.
Que es TICK
Por si no leíste el anterior articulo te vuelvo a explicar que hace cada elemento del stack
Telegraf
Es un agente que se encarga de recolectar las diferentes mótricas y enviarlas a la base de datos Influxdb. Mediante su fichero de configuración puede configurar que mótricas recoger o bien utilizar plugins.
Influxdb
Es la base de datos donde almacenaremos las mótricas
Kapacitor
La utilizaremos para enviar los avisos de los eventos que así configuraremos, puedes utilizar diferentes medios para ello, correo electrónico, Telegram, etc.
Chronograf
Para visualizar gráficamente los datos almacenados en Influxdb
Entono
Lo primero es preparar un fichero con las variables de entorno y credenciales que va utilizar para configurar el stack, crea el fichero~.env~ y pega en su interior en siguiente código:
# ENV CONFIG
TIMEZONE=Europe/Madrid
##
## OS Version
##
##
## Chronograf
##
INFLUXDB_URL=http://influxdb:8086
KAPACITOR_URL=http://kapacitor:9092
##
## Kapacitor
##
KAPACITOR_HOSTNAME=kapacitor
KAPACITOR_INFLUXDB_0_URLS_0=http://influxdb:8086
KAPACITOR_LOGGING_LEVEL=INFO
KAPACITOR_REPORTING_ENABLED=false
##
## InfluxDB
##
INFLUXDB_USERNAME=admin
INFLUXDB_PASSWORD=xxxxxxxxxxxxxxxxxx
INFLUXDB_DATABASE=telegraf_db
Telegraf
Ahora vamos a generar un fichero de configuración para Telegraf, deberemos editarlo para que configurar la conexos con la base de datos y habilitar los plugins que necesitemos para la recolección de mótricas, para ello ejecuta:
docker pull telegraf
docker run --rm telegraf telegraf config > ./config/telegraf.conf
Editamos el fichero telegraf.conf
# Global Agent Configuration
[agent]
hostname = "raspberry" ## hostname server
flush_interval = "15s"
interval = "15s"
# Input Plugins
[[inputs.cpu]]
percpu = true
totalcpu = true
collect_cpu_time = false
report_active = false
[[inputs.disk]]
ignore_fs = ["tmpfs", "devtmpfs", "devfs"]
[[inputs.io]]
[[inputs.mem]]
[[inputs.net]]
interfaces = ["eth*", "enp0s[0-1]"]
[[inputs.system]]
[[inputs.swap]]
[[inputs.netstat]]
[[inputs.processes]]
[[inputs.kernel]]
[[inputs.docker]]
endpoint = "unix:///var/run/docker.sock"
gather_services = false
container_names = []
container_name_include = []
container_name_exclude = []
timeout = "5s"
perdevice = true
total = false
docker_label_include = []
docker_label_exclude = []
# Output Plugin InfluxDB
[[outputs.influxdb]]
database = "telegraf_db"
urls = [ "http://IP:8086" ]
username = "admin"
password = "xxxxxxxxxxxx"
Recuerda poner los tus valores
Despliegue
Para desplegar el stack vamos a utilizar docker-compose.yml, el fichero utilizado es el siguiente:
---
version: "3.1"
networks:
net:
driver: bridge
services:
kapacitor:
image: kapacitor
container_name: kapacitor
hostname: kapacitor
restart: always
expose:
- '9092'
volumes:
- ./config/kapacitor.conf:/etc/kapacitor/kapacitor.conf:rw
- ./data/kapacitor/:/var/lib/kapacitor:rw
environment:
- 'TZ=${TIMEZONE}'
- KAPACITOR_HOSTNAME=${KAPACITOR_HOSTNAME}
- KAPACITOR_INFLUXDB_0_URLS_0=${KAPACITOR_INFLUXDB_0_URLS_0}
depends_on:
- influxdb
networks:
- net
labels:
- "docker.group=tick"
chronograf:
image: chronograf
container_name: chronograf
hostname: chronograf
restart: always
ports:
- '8888:8888'
volumes:
- ./data/chronograf/:/var/lib/chronograf:rw
environment:
- 'TZ=${TIMEZONE}'
- INFLUXDB_URL=${INFLUXDB_URL}
- KAPACITOR_URL=${KAPACITOR_URL}
depends_on:
- influxdb
- kapacitor
networks:
- net
labels:
- "docker.group=tick"
influxdb:
image: influxdb
container_name: influxdb
hostname: influxdb
restart: always
volumes:
- ./config/influxdb.conf:/etc/influxdb/influxdb.conf:ro
- ./data/influxdb:/var/lib/influxdb:rw
- ./usr/local/share/collectd/types.db:/usr/local/share/collectd/types.db:ro
environment:
- 'TZ=${TIMEZONE}'
- INFLUXDB_DB=${INFLUXDB_DATABASE}
- INFLUXDB_ADMIN_USER=${INFLUXDB_USERNAME}
- INFLUXDB_ADMIN_PASSWORD=${INFLUXDB_PASSWORD}
ports:
- "8086:8086"
depends_on:
- telegraf
networks:
- net
labels:
- "docker.group=tick"
telegraf:
image: telegraf
container_name: telegraf
hostname: telegraf
restart: always
command: telegraf --config /etc/telegraf/telegraf.conf --config-directory /etc/telegraf/telegraf.d
volumes:
- ./config/telegraf.conf:/etc/telegraf/telegraf.conf:ro
- ./config/telegraf.d:/etc/telegraf/telegraf.d:ro
- /var/run/docker.sock:/var/run/docker.sock
environment:
- 'TZ=${TIMEZONE}'
expose:
- '8094'
networks:
- net
labels:
- "docker.group=tick"
Y para desplegarlo, ejecuta:
docker-compose up -d
Ahora deberías tener tu stack listo para empezar a trabajar con ól
Bola extra
Como regalo te dejo un repositorio con dashboards para Chronograf tan solo has de importarlos
https://github.com/robcowart/influx_dashboards
En un próximo articulo veremos utilizar como Kapacitor para generar avisos de eventos y enviarlos mediante Telegram.
Espero que te haya gustado, pasa un buen día… 🐧