ManuC Blog

Monitoreo con Influxb, Telegraf y Grafana usando Docker

· Manuel C.

Hay varios sistemas de monitoreo, que va desde pago hasta open source. En este post se mostrará una opción que combina varias opciones open source.

El alcance de lo presentando cubre lo basico para el monitoreo de servidores, queda a opción del lector seguir descubriendo más opciones de monitoreo, por ejemplo seguimiento de logs de aplicaciones como Apache o Nginx, incluso más.

Usaremos 3 componentes clave como se describe:

  1. Base de datos de series de tiempo: Usaremos InfluxDB como almacen de datos.
  2. Agente para recopilar métricas: Usaremos Telegraf para recopilar métricas, como cpu, memoria, disco, etc.
  3. Dashboard para mostrar métricas: Usaremos Grafana para generar dashboard que mostrará los datos recopilados y podemos incluso generar alertas.

Por motivos practicos, los 3 componentes estarán desplegados en el mismo servidor. Para el servidor virtual usaremos Debian GNU/Linux.

Nota: Si no tiene instalado Docker, puede seguir los pasos descritos en la web oficial de Docker.

Instalación de InfluxDB

Desplegaremos InfluxDB versión 1.8.10 usando Docker.

Crearemo el contenedor llamado influxdb. Se expone el puerto 8086 para operar con el API de influxdb. Finalmente montamos una ruta para la persistencia de los datos.

docker run --name influxdb -dit \
--restart always \
-p 8086:8086 \
-v "$PWD"/influxdb/data:/var/lib/influxdb \
influxdb:1.8.10-alpine

Instalación de Telegraf

Desplegaremos Telegraf última versión. Al momento de escribir este post la versión actual es 1.28.5.

En este caso vamos a instalar en el servidor virtual basé, esta forma de instalación es para demostrar que puede instalar el agente de Telegraf en más servidores según lo desee.

Debemos agregar el repositorio de InfluxData a Debian y luego instalar telegraf usando apt-get install

# influxdata-archive_compat.key GPG fingerprint:
#     9D53 9D90 D332 8DC7 D6C8 D3B9 D8FF 8E1F 7DF8 B07E
wget -q https://repos.influxdata.com/influxdata-archive_compat.key
echo '393e8779c89ac8d958f81f942f9ad7fb82a25e133faddaf92e15b16e6ac9ce4c influxdata-archive_compat.key' | sha256sum -c && cat influxdata-archive_compat.key | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/influxdata-archive_compat.gpg > /dev/null
echo 'deb [signed-by=/etc/apt/trusted.gpg.d/influxdata-archive_compat.gpg] https://repos.influxdata.com/debian stable main' | sudo tee /etc/apt/sources.list.d/influxdata.list

sudo apt-get update

sudo apt-get install telegraf

Pasamos a configurar Telegraf para que envie las métricas a InfluxDB.

Primero debemos configurar Telegraf, para ello editar el archivo /etc/telegraf/telegraf.conf como se muestra:

Importante: La sección [[outputs.influxdb]] es donde definimos como nos conectamos a InfluxDB.

# File telegraf.conf
[global_tags]

[agent]
  interval = "60s"
  round_interval = true
  metric_batch_size = 1000
  metric_buffer_limit = 10000
  collection_jitter = "0s"
  flush_interval = "10s"
  flush_jitter = "0s"
  precision = "0s"
  ## Override default hostname, if empty use os.Hostname()
  hostname = ""
  omit_hostname = false
  
[[outputs.influxdb]]
  urls = ["http://localhost:8086"]
  database = "telegraf"
  skip_database_creation = false
  timeout = "5s"
  ## HTTP Basic Auth
  #username = ""
  #password = ""
  user_agent = "telegraf"
  insecure_skip_verify = true
  
[[inputs.cpu]]
  percpu = true
  totalcpu = true
  collect_cpu_time = false
  report_active = false
  core_tags = false

[[inputs.disk]]
  ignore_fs = ["tmpfs", "devtmpfs", "devfs", "iso9660", "overlay", "aufs", "squashfs"]
  
[[inputs.diskio]]

[[inputs.kernel]]

[[inputs.mem]]

[[inputs.processes]]

[[inputs.swap]]

[[inputs.system]]

[[inputs.net]]

Segundo ejecutar un test para validar la configuración:

telegraf --test

Se muestra parte de la salida

> swap,host=test free=1022357504i,total=1022357504i,used=0i,used_percent=0 1700366476000000000
> swap,host=test in=0i,out=0i 1700366476000000000
> net,host=test,interface=enp0s3 bytes_recv=121522360i,bytes_sent=876088i,drop_in=0i,drop_out=0i,err_in=0i,err_out=0i,packets_recv=85298i,packets_sent=10451i 1700366476000000000

Finalmente iniciar Telegraf:

sudo systemctl enable telegraf
sudo systemctl start telegraf
sudo systemctl status telegraf

Instalación de Grafana

Desplegaremos Grafana versión 6.7.6. Seleccionamos está versión en especifico porque en las alertas se incluye el gráfico, en versiones posteriores no está habilitado por defecto.

En este caso vamos a copiar el archivo de configuración de grafana, tener presente en ejecutar sólo una vez:

mkdir -p "$PWD"/grafana
docker run --name grafana-tmp -d grafana/grafana:6.7.6
docker cp grafana-tmp:/etc/grafana/grafana.ini grafana/grafana.ini
docker rm -f grafana-tmp

Iniciamos el contenedor llamado grafana. Se expone el puerto 3000 para el acceso por web a Grafana. Montamos dos rutas para la persistencia de datos. Adicionalmente establecemos dos variables de entorno para definir el acceso con el usuario admin.

docker run --name grafana -dit \
--restart always \
-u $(id -u):$(id -g) \
-p 3000:3000 \
-v "$PWD"/grafana/data:/var/lib/grafana \
-v "$PWD"/grafana/grafana.ini:/etc/grafana/grafana.ini:ro \
-e GF_SECURITY_ADMIN_USER=admin \
-e GF_SECURITY_ADMIN_PASSWORD=SuperSecret \
grafana/grafana:6.7.6

Una vez iniciado el contenedor en su navegador ingresar a http://localhost:3000 con el usuario y clave configurado:

Grafana login

Crear su pirimer dashboard con Grafana

Luego de iniciar sesión en Grafana, podemos crear nuestro primer dashboard.

Hacer clic en “Add data source” para conectar con la fuente de datos InfluxDB que creamos al inicio:

Grafana Add data source

En el panel de “Add data source” selecciona la opción “InfluxDB”:

Grafana selecionar InfluxDB

En el panel de configuración de InfluxDB llenar los siguientes campos:

  • URL: Ingresar http://<IP-MV>:8086, recordar reemplazar la IP-MV por la IP de su host virtual.
  • Database: Ingresar telegraf.

Grafana configurar InfluxDB

Finalmente hacer clic en el boton “save & Test”. Si muestra un mensaje de “Data source is working” terminó de configurar la conexión.

Ahora toca crear el Dashboard, para lo cual en el menú de la izquierda hacer clic en la opción “Create” > “Dashboard”

Grafana crear dashboard

En el panel de “New dashboard”, selecciona “Add Query”:

Grafana seleccionar Add Query

En este punto podemos configurar que datos queremos mostrar en el dashboard a crear.

Para este ejemplo vamos a mostrar la cantidad de memoria usada en porcentaje, para ello configurar como se muestra:

Grafana configurar Memoria usada en porcentaje

Vamos configurar la unidad de medida a mostrar en el panel, para ello hacer clic en la parte izquierda en “Visualization” y en la sección “Left Y” seleccionar en “Unit” la opción “percent (0-100)”

Grafana configurar unidad de medida para memoria usada

Continuamos y vamos a establecer un nombre al panel creado. Hacer clic en la parte izquierda en “General” y en la sección “Title” poner “Memory used percent”

Grafana configurar nombre del panel

Finalemente tenemos que guardar el dashboard que acabemos de crear y configurar.

En la parte superior, seleccionar “Save Dashboard”:

Grafana save dashboard

Como es la primera vez que guardamos, tenemos que ingresar el nombre del dashboard, Para este caso usaremos “Performance server” y hacemos clic en “Save”:

Grafana nombrar dashboard

!Felicidadaes¡ Podemos ver nuestro primer dashboard que está mostrando información sobre la memoria usad en el servidor:

Grafana primer dashboard