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. 🙂