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

3 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:


# 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%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: