Docker: TICK (Telegraf+InfluxDB+Chronograf+Kapacitor)

4 minutos de lectura

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:

 1
 2# ENV CONFIG
 3
 4TIMEZONE=Europe/Madrid
 5
 6##
 7## OS Version
 8##
 9
10##
11## Chronograf
12##
13
14INFLUXDB_URL=http://influxdb:8086
15KAPACITOR_URL=http://kapacitor:9092
16
17##
18## Kapacitor
19##
20
21KAPACITOR_HOSTNAME=kapacitor
22KAPACITOR_INFLUXDB_0_URLS_0=http://influxdb:8086
23KAPACITOR_LOGGING_LEVEL=INFO
24KAPACITOR_REPORTING_ENABLED=false
25
26##
27## InfluxDB
28##
29
30INFLUXDB_USERNAME=admin
31INFLUXDB_PASSWORD=xxxxxxxxxxxxxxxxxx
32INFLUXDB_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:

1
2docker pull telegraf
3docker run --rm telegraf telegraf config > ./config/telegraf.conf

Editamos el fichero telegraf.conf

 1
 2# Global Agent Configuration
 3[agent]
 4  hostname = "raspberry" ## hostname server
 5  flush_interval = "15s"
 6  interval = "15s"
 7
 8# Input Plugins
 9[[inputs.cpu]]
10  percpu = true
11  totalcpu = true
12  collect_cpu_time = false
13  report_active = false
14[[inputs.disk]]
15  ignore_fs = ["tmpfs", "devtmpfs", "devfs"]
16[[inputs.io]]
17[[inputs.mem]]
18[[inputs.net]]
19  interfaces = ["eth*", "enp0s[0-1]"]
20[[inputs.system]]
21[[inputs.swap]]
22[[inputs.netstat]]
23[[inputs.processes]]
24[[inputs.kernel]]
25[[inputs.docker]]
26  endpoint = "unix:///var/run/docker.sock"
27  gather_services = false
28  container_names = []
29  container_name_include = []
30  container_name_exclude = []
31  timeout = "5s"
32  perdevice = true
33  total = false
34  docker_label_include = []
35  docker_label_exclude = []
36
37# Output Plugin InfluxDB
38[[outputs.influxdb]]
39  database = "telegraf_db"
40  urls = [ "http://IP:8086" ]
41  username = "admin"
42  password = "xxxxxxxxxxxx"

Recuerda poner los tus valores

Despliegue

Para desplegar el stack vamos a utilizar docker-compose.yml, el fichero utilizado es el siguiente:

 1
 2---
 3version: "3.1"
 4
 5networks:
 6  net:
 7    driver: bridge
 8
 9services:
10  kapacitor:
11    image: kapacitor
12    container_name: kapacitor
13    hostname: kapacitor
14    restart: always
15    expose:
16      - '9092'
17    volumes:
18      - ./config/kapacitor.conf:/etc/kapacitor/kapacitor.conf:rw
19      - ./data/kapacitor/:/var/lib/kapacitor:rw
20    environment:
21      - 'TZ=${TIMEZONE}'
22      - KAPACITOR_HOSTNAME=${KAPACITOR_HOSTNAME}
23      - KAPACITOR_INFLUXDB_0_URLS_0=${KAPACITOR_INFLUXDB_0_URLS_0}
24    depends_on:
25      - influxdb
26    networks:
27      - net
28    labels:
29      - "docker.group=tick"
30
31chronograf:
32    image: chronograf
33    container_name: chronograf
34    hostname: chronograf
35    restart: always
36    ports:
37      - '8888:8888'
38    volumes:
39      - ./data/chronograf/:/var/lib/chronograf:rw
40    environment:
41      - 'TZ=${TIMEZONE}'
42      - INFLUXDB_URL=${INFLUXDB_URL}
43      - KAPACITOR_URL=${KAPACITOR_URL}
44    depends_on:
45      - influxdb
46      - kapacitor
47    networks:
48      - net
49    labels:
50      - "docker.group=tick"
51
52  influxdb:
53    image: influxdb
54    container_name: influxdb
55    hostname: influxdb
56    restart: always
57    volumes:
58      - ./config/influxdb.conf:/etc/influxdb/influxdb.conf:ro
59      - ./data/influxdb:/var/lib/influxdb:rw
60      - ./usr/local/share/collectd/types.db:/usr/local/share/collectd/types.db:ro
61
62    environment:
63      - 'TZ=${TIMEZONE}'
64      - INFLUXDB_DB=${INFLUXDB_DATABASE}
65      - INFLUXDB_ADMIN_USER=${INFLUXDB_USERNAME}
66      - INFLUXDB_ADMIN_PASSWORD=${INFLUXDB_PASSWORD}
67    ports:
68      - "8086:8086"
69    depends_on:
70      - telegraf
71    networks:
72      - net
73    labels:
74      - "docker.group=tick"
75
76  telegraf:
77    image: telegraf
78    container_name: telegraf
79    hostname: telegraf
80    restart: always
81    command: telegraf --config /etc/telegraf/telegraf.conf --config-directory /etc/telegraf/telegraf.d
82    volumes:
83      - ./config/telegraf.conf:/etc/telegraf/telegraf.conf:ro
84      - ./config/telegraf.d:/etc/telegraf/telegraf.d:ro
85      - /var/run/docker.sock:/var/run/docker.sock
86
87    environment:
88      - 'TZ=${TIMEZONE}'
89    expose:
90      - '8094'
91    networks:
92      - net
93    labels:
94      - "docker.group=tick"

Y para desplegarlo, ejecuta:

1docker-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%5Fdashboards

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… :penguin: