Í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
Cambia los valores como la zona horario, contraseña, usuario, nonbre de las base de datos, puertos, etc, según tus preferencias
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… 🐧