Monitoreo con Influxb, Telegraf y Grafana usando Docker
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:
- Base de datos de series de tiempo: Usaremos InfluxDB como almacen de datos.
- Agente para recopilar métricas: Usaremos Telegraf para recopilar métricas, como cpu, memoria, disco, etc.
- 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:
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:
En el panel de “Add data source” selecciona la opción “InfluxDB”:
En el panel de configuración de InfluxDB llenar los siguientes campos:
- URL: Ingresar
http://<IP-MV>:8086
, recordar reemplazar laIP-MV
por la IP de su host virtual. - Database: Ingresar
telegraf
.
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”
En el panel de “New dashboard”, selecciona “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:
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)”
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”
Finalemente tenemos que guardar el dashboard que acabemos de crear y configurar.
En la parte superior, seleccionar “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”:
!Felicidadaes¡ Podemos ver nuestro primer dashboard que está mostrando información sobre la memoria usad en el servidor: