Blog personal donde guardo mis notas sobre tecnología

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

Carlos M.

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… 🐧