TICK: Stack de monitorización y alertado de métricas en Docker

Buenas, hoy vengo a hablaros de otro de los stacks de monitorización y graficación que están de moda. Hace algún tiempo hablamos de TIG y hoy hablaremos sobre TICK. A priori parece lo mismo pero tiene 2 cambios significativos. Que como frontal de gráficas en vez de utilizar Grafana, se utilizará Chronograf y para la gestión de alertas se utilizará Kapacitor. La ventaja de utilizar este stack, es que todos los servicios se integran perfectamente entre ellos. Y utilizando cada uno por separado es mas costoso. La desventaja principal, es que Grafana es mas potente que Chronograf.

Introducción

Este stack, lo vamos a montar utilizando docker, docker-compose y traefik. Y haremos que la autenticación vaya contra google y las alertas se manden a Telegram

¿Que es cada cosa?

Telegraf

Es un conjunto de plugins que envían las métricas a la base de datos InfluxDB. También soporta scripts propios. Es capaz de monitorizar Docker, servicios, hosts…

Influxdb

Base de datos escalable para metricas, time-series, y eventos en tiempo real

Kapacitor

Herramienta para procesar, monitorizar y alertar eventos en tiempo real

Chronograf

Herramienta para visualizar y graficar los datos obtenidos de InfluxDB

Primeros pasos

Para que todo sea mas fácil, vamos a utilizar el repo de git que he creado

git clone https://github.com/ichasco/tick.git
cd tick

Una vez aquí, podemos empezar a desplegar todo.

Telegraf

Primero, generar la configuración de Telegraf

docker run --rm telegraf telegraf config > ./confs/telegraf/telegraf.conf

Una vez generada, hay que editarla y apuntarla al Influxdb que desplegaremos mas adelante

[[outputs.influxdb]]
urls = ["http://influxdb:8086"]
database = "telegraf" 
retention_policy = ""
write_consistency = "any"
timeout = "5s"
username = "telegraf"
password = "password"

En la carpeta confs/telegraf/telegraf.d/  están todos los plugins que se van a cargar. Estos se pueden configurar o de no ser necesarios, borrarlos.

Environments

Antes de desplegar el stack, hay que configurar las credenciales y los parámetros que vamos a utilizar. Para esto, hay que generar el archivo .env

cp .env.example .env

Y completarlo con los datos necesarios.

# INFLUXDB
INFLUXDB_DB=telegraf
INFLUXDB_USR=telegraf
INFLUXDB_PASS=password

# CHRONOGRAF
CHRONOGRAF_URL=chronograf.example.com

# GOOGLE AUTHENTICATION
GOOGLE_CLIENT_ID=342685910348-roqtaodmso3b65g2tcvfv4mun709i28.apps.googleusercontent.com
GOOGLE_CLIENT_SECRET=yHdlfrwsdQA1JRY0co0vLCVLhMtc4k_aIKjGd342zrMJ_8rhDFA7TGsfHqg6a-Kz
TOKEN_SECRET=AIzaSyASEF532EtzQ1ZQWrcGbZROLcMj-gD56DLEI

Para la parte de la autenticación contra Google, dejo la web para configurarlo. Hay que hacer lo siguiente:

  • Verificar el dominio que se va a utilizar en la pestaña de: Verificación de dominio
  • En la pestaña de Claves
    • Clave de API. Que será el TOKEN_SECRET
    • ID de Cliente Oauth. Que nos proporcionará el GOOGLE_CLIENT_ID y el GOOGLE_CLIENT_SECRET.
      • También hay que permitir la URL: https://chronograf.example.com/oauth/google/callback
  • Configurar la pestaña Pantalla de consentimiento OAuth como se quiera

Despliegue

Para levantar el stack, solo hay que hacerlo desde Docker-compose

docker-compose up -d

Una vez levantado, hay que acceder a la web que hemos definido. En este caso https://chronograf.example.com

Y posteriormente, pedirá la verificación de Google. Una vez verificado, empezará la configuración de la primera organización.

Configuración

La configuración es muy sencilla.


Configurar Influxdb en base a los parámetros definidos en el Docker-compose


Una de las ventajas de Chronograf, es que gracias a Telegraf, detecta que métricas le están llegando y se pueden cargar paneles predefinidos con bastante información

Para configurar Kapacitor, igual que Influx, poner los parámetros que se han definido en el Docker-compose. En este caso, no tiene ni usuario ni contraseña.

Y con esto ya estaría configurado todo.

Una vez configurado todo, ya empezaremos a ver los datos que nos llegan desde el host que hemos configurado

Y los dashboards que hayamos elegido con sus correspondientes metricas en ellos.

Alertas

Telegram

Para las alertas, vamos a empezar configurando el bot de telegram para que nos envíe los mensajes.

  • Abrir telegram y escribir @BotFather en contactos
  • A continuación escribir /newbot y nos pedirá el nombre del bot
  • Luego nos pedirá el username del bot. Este tiene que acabar siembre en _bot
  • Una vez hecho esto, nos dará un Token. Esto es importante, hay que guardarlo
  • Para terminar, hay que iniciar una conversación con el bot que hemos creado escribiendo: @nombrebot_bot y desde la consola lanzar el siguiente comando: curl https://api.telegram.org/bot<API_TOKEN>/getUpdates
    De lo que nos devuelva, nos tenemos que quedar con el id

Kapacitor

Una vez hecho esto, ya tenemos todo lo necesario para configurar el bot. Ahora hay que ir a Configuration y editar Kapacitor

Ahora completar los campos con los datos obtenidos

Generar alertas

Para generar alertas, hay que ir a: Alerting –> Manage tasks y Build Alert Rule.
Generar alertas es muy sencillo, solo hay que mirar que nos interesa y marcarlo


En este caso nos avisará cuando supere el umbral del 80%


Y por último seleccionar el medio de alerta, en este caso Telegram y el mensaje que queremos que saque.

Y con esto acabamos este post. En un futuro iré añadiendo mas. 🙂

Leave a Reply

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *