Monitorización con Grafana y Prometheus
Este curso trata sobre como monitorizar aplicaciones, servicios o procesos utilizando Grafana y Prometheus además presentaremos y probaremos...
Aprende a monitorizar instancias, máquinas virtuales con sistemas operativos GNU/Linux y Windows, hasta de contenedores Docker o Podman con InfluxDB, Telegraf y Grafana.
Más y más empresas se suman a tener un mayor control de su infraestructura, ya sea en la nube o en sus instalaciones, comprendiendo que, entre las mejores herramientas para manejo de datos de series temporales, agentes para recopilar métricas y monitorizar por medio de un análisis de datos de alta calidad es clave para manejar mejor los costes y mitigar incidencias dentro de la organización. ¡Es altamente recomendable que aprendas este Stack!
Repasamos rápidamente sus conceptos, sin embargo, dejando referencia a teoría en abundancia en esta misma plataforma, donde te puedes nutrir más de los mismos.
· Grafana: Es una solución de código abierto que sirve para ejecutar análisis de datos, extraer métricas que dan sentido ante enormes cantidades de datos y monitorear aplicaciones y recursos hardware con la ayuda de atractivos paneles de control personalizables. Aquí tienes un artículo para conocer más acerca de Grafana y primeros pasos.
· Telegraf: Es un agente de servidor basado en complementos para recopilar e informar métricas. Este servicio recopila datos como el uso de disco, carga del sistema, uso de la memoria RAM, carga de la CPU, entre otros recursos. También tenemos un artículo que te permitirá conocer mejor Telegraf y primeros pasos.
· InfluxDB: Es una base de datos de series temporales diseñada para el almacenamiento rápido y de alta disponibilidad y la recuperación de datos de series temporales. Previamente ya publicamos un post en el que puedes aprender más acerca de InfluxDB y primeros pasos.
La red está cundida de información sobre cómo instalar este Stack de forma procedural por medio de scripts en bash como de hacerlo manualmente en la línea de comandos del sistema operativo, en este caso, iremos un poco más allá, algo que te acerque a una vía profesional que te retribuirá mayor conocimiento y dominio sobre estos temas, por lo cual, se utilizará Docker o Podman para lanzar estos servicios.
Además de esto, tienes acceso a un repositorio en GitHub donde podrás descargar el código fuente y levantar los servicios con un par de instrucciones de comandos. Por supuesto, si aún no dominas el tema de contenedores, te recomiendo el Curso de Docker.
· Descargar repositorio
> https://github.com/jersonmartinez/docker-compose-influxdb-telegraf-grafana.git
· Instalando servicios
Acceder al repositorio en local y lanzar la siguiente instrucción Docker Compose
.
> docker-compose up -d
Creating network "docker-compose-influxdb-telegraf-grafana_default" with the default driver
Creating influxdb ... done
Creating grafana ... done
Creating telegraf ... done
Creating telegraf_second ... done
Para verificar que estos contenedores se han lanzado correctamente, verificamos sus procesos:
> docker-compose ps
Name Command State Ports
--------------------------------------------------------------------------------------------------------
grafana /run.sh Up 0.0.0.0:3000->3000/tcp
influxdb /entrypoint.sh influxd Up 0.0.0.0:8086->8086/tcp
telegraf /entrypoint.sh telegraf Up 8092/udp, 8094/tcp, 0.0.0.0:8125->8125/tcp, 8125/udp
telegraf_second /entrypoint.sh telegraf Up 8092/udp, 8094/tcp, 8125/udp, 0.0.0.0:8126->8126/tcp
Ya por levantado el sistema distribuido, el frontal es http://127.0.0.1:3000/ o bien, la dirección IP local que tiene asignada más el puerto 3000.
Se adjunta el script en formato YML
para ejecutar con Docker Compose.
Tiene 4 services
:
Los contenedores telegraf
y telegraf_second
son lo que se estarán monitorizando en el ámbito de contenedores.
version: '3.6'
services:
telegraf:
image: telegraf
container_name: telegraf
restart: always
volumes:
- ./telegraf/telegraf.conf:/etc/telegraf/telegraf.conf:ro
depends_on:
- influxdb
links:
- influxdb
ports:
- '8125:8125'
telegraf_second:
image: telegraf
container_name: telegraf_second
restart: always
volumes:
- ./telegraf/telegraf_second.conf:/etc/telegraf/telegraf.conf:ro
depends_on:
- influxdb
links:
- influxdb
ports:
- '8126:8126'
influxdb:
image: influxdb:1.8-alpine
container_name: influxdb
restart: always
environment:
- INFLUXDB_DB=influx
- INFLUXDB_ADMIN_USER=admin
- INFLUXDB_ADMIN_PASSWORD=admin
ports:
- '8086:8086'
volumes:
- influxdb_data:/var/lib/influxdb
grafana:
image: grafana/grafana-enterprise
container_name: grafana
restart: always
depends_on:
- influxdb
environment:
- GF_SECURITY_ADMIN_USER=admin
- GF_SECURITY_ADMIN_PASSWORD=admin
- GF_INSTALL_PLUGINS=
links:
- influxdb
ports:
- '3000:3000'
volumes:
- grafana_data:/var/lib/grafana
volumes:
grafana_data: {}
influxdb_data: {}
· El contenedor telegraf
telegraf
, integrando la configuración desde el fichero telegraf.conf
.influxdb
y se enlaza al mismo.8125
telegraf:
image: telegraf
container_name: telegraf
restart: always
volumes:
- ./telegraf/telegraf.conf:/etc/telegraf/telegraf.conf:ro
depends_on:
- influxdb
links:
- influxdb
ports:
- '8125:8125'
· El contenedor telegraf_second
telegraf
, integrando la configuración desde el fichero telegraf_second.conf
.influxdb
y se enlaza al mismo.8126
(Un número más que el contenedor telegraf
).
telegraf_second:
image: telegraf
container_name: telegraf_second
restart: always
volumes:
- ./telegraf/telegraf_second.conf:/etc/telegraf/telegraf.conf:ro
depends_on:
- influxdb
links:
- influxdb
ports:
- '8126:8126'
· El contenedor influxdb
influxdb:1.8-alpine
.8086
influxdb:
image: influxdb:1.8-alpine
container_name: influxdb
restart: always
environment:
- INFLUXDB_DB=influx
- INFLUXDB_ADMIN_USER=admin
- INFLUXDB_ADMIN_PASSWORD=admin
ports:
- '8086:8086'
volumes:
- influxdb_data:/var/lib/influxdb
· El contenedor grafana
grafana/grafana-enterprise
.influxdb
.3000
grafana:
image: grafana/grafana-enterprise
container_name: grafana
restart: always
depends_on:
- influxdb
environment:
- GF_SECURITY_ADMIN_USER=admin
- GF_SECURITY_ADMIN_PASSWORD=admin
- GF_INSTALL_PLUGINS=
links:
- influxdb
ports:
- '3000:3000'
volumes:
- grafana_data:/var/lib/grafana
Cuando ejecute Grafana por medio de la dirección: 127.0.0.1:3000, le pedirá que inicie sesión, teniendo como usuario
y contraseña
, admin
y admin
. Esto, por primera vez, ya que en la siguiente ventana le pedirá que actualice la contraseña a una personal.
· Configuración del telegraf
para contenedores
Se manejan etiquetas globales, que son las entregadas a InfluxDB y Grafana las obtiene para ser controladas desde la interfaz gráfica y aplicar filtros. Entre los global tags
tenemos los siguientes:
customer
.environment
.os
, donde se define el sistema operativo en acción.
[global_tags]
customer = "OpenWebinars"
environment = "Dev"
os = "Linux"
[agent]
interval = "60s"
round_interval = true
metric_batch_size = 1000
metric_buffer_limit = 10000
collection_jitter = "0s"
flush_interval = "10s"
flush_jitter = "0s"
precision = ""
hostname = "docker-telegraf"
omit_hostname = false
[[outputs.influxdb]]
urls = ["http://influxdb:8086"]
database = "influx"
timeout = "5s"
username = "telegraf"
password = "metricsmetricsmetricsmetrics"
[[inputs.cpu]]
percpu = true
totalcpu = true
collect_cpu_time = false
report_active = false
[[inputs.disk]]
ignore_fs = ["tmpfs", "devtmpfs", "devfs", "iso9660", "overlay", "aufs", "squashfs"]
[[inputs.diskio]]
[[inputs.kernel]]
[[inputs.mem]]
[[inputs.processes]]
[[inputs.swap]]
[[inputs.system]]
En este pedazo de configuración, se conecta a InfluxDB, realizando autenticación y para ello, agregando las credenciales tales como la dirección del server y puerto, base de datos a conectarse, nombre de usuario y contraseña. En la URL aparece influxdb:8086, que es equivalente también a 127.0.0.1:8086.
[[outputs.influxdb]]
urls = ["http://influxdb:8086"]
database = "influx"
timeout = "5s"
username = "telegraf"
password = "metricsmetricsmetricsmetrics"
· Configuración del telegraf
para Windows 11
¿Vamos a monitorizar Windows?
¡Claro que si! También vas a aprender cómo instalar Telegraf en Windows 11
por medio de Chocolatey en un abrir y cerrar de ojos.
Esta es la configuración del telegraf para la máquina Windows.
[global_tags]
customer = "OpenWebinars"
environment = "Dev"
os = "Windows"
[agent]
interval = "15s"
round_interval = true
metric_batch_size = 1000
metric_buffer_limit = 10000
collection_jitter = "0s"
flush_interval = "15s"
flush_jitter = "0s"
precision = ""
debug = false
quiet = false
logfile = "/Program Files/Telegraf/telegraf.log"
hostname = "openwebinars-dev"
omit_hostname = false
###############################################################################
# OUTPUTS #
###############################################################################
[[outputs.influxdb]]
urls = ["http://192.168.0.3:8086"]
database = "influx"
username = "telegraf"
password = "metricsmetricsmetricsmetrics"
###############################################################################
# INPUTS #
###############################################################################
[[inputs.win_perf_counters]]
[[inputs.win_perf_counters.object]]
ObjectName = "Processor"
Instances = ["*"]
Counters = [
"% Idle Time",
"% Interrupt Time",
"% Privileged Time",
"% User Time",
"% Processor Time",
"% DPC Time",
]
Measurement = "win_cpu"
IncludeTotal=true
[[inputs.win_perf_counters.object]]
ObjectName = "LogicalDisk"
Instances = ["*"]
Counters = [
"% Idle Time",
"% Disk Time",
"% Disk Read Time",
"% Disk Write Time",
"Current Disk Queue Length",
"% Free Space",
"Free Megabytes",
]
Measurement = "win_disk"
[[inputs.win_perf_counters.object]]
ObjectName = "PhysicalDisk"
Instances = ["*"]
Counters = [
"Disk Read Bytes/sec",
"Disk Write Bytes/sec",
"Current Disk Queue Length",
"Disk Reads/sec",
"Disk Writes/sec",
"% Disk Time",
"% Disk Read Time",
"% Disk Write Time",
]
Measurement = "win_diskio"
[[inputs.win_perf_counters.object]]
ObjectName = "Network Interface"
Instances = ["*"]
Counters = [
"Bytes Received/sec",
"Bytes Sent/sec",
"Packets Received/sec",
"Packets Sent/sec",
"Packets Received Discarded",
"Packets Outbound Discarded",
"Packets Received Errors",
"Packets Outbound Errors",
]
Measurement = "win_net"
[[inputs.win_perf_counters.object]]
ObjectName = "System"
Counters = [
"Context Switches/sec",
"System Calls/sec",
"Processor Queue Length",
"System Up Time",
]
Instances = ["------"]
Measurement = "win_system"
[[inputs.win_perf_counters.object]]
ObjectName = "Memory"
Counters = [
"Available Bytes",
"Cache Faults/sec",
"Demand Zero Faults/sec",
"Page Faults/sec",
"Pages/sec",
"Transition Faults/sec",
"Pool Nonpaged Bytes",
"Pool Paged Bytes",
"Standby Cache Reserve Bytes",
"Standby Cache Normal Priority Bytes",
"Standby Cache Core Bytes",
]
Instances = ["------"]
Measurement = "win_mem"
[[inputs.win_perf_counters.object]]
ObjectName = "Paging File"
Counters = [
"% Usage",
]
Instances = ["_Total"]
Measurement = "win_swap"
Logramos rescatar que las credenciales son las mismas, con la excepción de que ahora se agrega la IP de la máquina que mantiene el InfluxDB, ya que no se encuentra en la misma red de los contenedores, sin embargo, si se encuentra compartiendo adaptador de red local, por ende, se conocen y pueden conectar sin problemas.
[[outputs.influxdb]]
urls = ["http://192.168.0.3:8086"]
database = "influx"
username = "telegraf"
password = "metricsmetricsmetricsmetrics"
Ya se que tengas virtualizado el sistema operativo Windows o instalado como máquina base, harás la instalación del gestor de paquetes llamado Chocolatey
o de cariño, simplemente choco
.
Chocolatey es un gestor de paquetes y dependencias de los mismos, donde vienen integradas para ser instaladas de la forma más sencilla posible.
Ejecute la siguiente instrucción desde PowerShell:
Set-ExecutionPolicy Bypass -Scope Process -Force; iex ((New-Object System.Net.WebClient).DownloadString('http://internal/odata/repo/ChocolateyInstall.ps1'))
Es tan sencilla hacer la instalación que tan solo es ejecutar sobre PowerShell, después de haber instalado Chocolatey, la siguiente instrucción:
> choco install telegraf
Además, también puedes actualizarlo e incluso, desinstalarlo desde choco:
> choco upgrade telegraf
> choco uninstall telegraf
Ya por instalado, se agrega la configuración del telegraf para que se conecte y envíe métricas a InfluxDB, no sin antes validar que el servicio telegraf
está corriendo sin problemas.
El fichero a modificar es: C:\Program Files\telegraf\telegraf.conf
.
He elaborado un dashboard sencillo, donde ya se hace monitorización tanto de los contenedores como las máquinas virtuales GNU/Linux y Windows. Para reutilizar el dashboard, es tan sencillo de importar el .json que dejo aquí a su disposición.
· Monitorizando la CPU
Nos enfocaremos en revisar las métricas de la máquina Windows, donde ciertamente representa mayor complejidad, así que como es observable en la imagen, se toman en cuenta las siguientes características y parámetros:
openwebinars-dev
, y cliente, OpenWebinars
así como los demás filtros para reconocer que es una máquina en específica.Esta misma tiene definida una alerta, donde indica un límite de consumo de CPU, en este caso se configura al 80%, si se pasa, generará una alerta, donde bien puede estar configurado para que envíe un correo eletrónico, envíe un mensaje a aplicaciones como Slack, Teams y otros. Así de esta manera, estar informados ante cualquier incidente, incluso, para enviar señales de autoescalado.
· Monitorizando la memoria RAM
· Monitorizando el Disco
megabytes
.Grafana tiene la capacidad de conectarse a un sinnúmero de fuentes de datos. Te permite agregar complementos que nos ayudan a estudiar, analizar y monitorear el hardware y software, además que se puede sacar mayor provecho para rastrear comportamiento del usuario y de la aplicación.
Se ha compartido una vasta información teórica sobre los conceptos e importancia de los servicios que conforman el Stack que en este artículo abordamos. Nos hemos adentrado en un terreno completamente práctico, donde no solo arrancamos los servicios Telegraf
, InfluxDB
y Grafana
, sino que también aprovechamos a recurrir a una solución que lleva Docker y Docker Compose, algo que te acerca aún más al área de DevOps
. Hemos ido en esta aventura de acá para allá, instalando, configurando, implementando y analizando métricas.
¡Espero que este artículo te sume mucho valor!
También te puede interesar
Este curso trata sobre como monitorizar aplicaciones, servicios o procesos utilizando Grafana y Prometheus además presentaremos y probaremos...
En este taller descubrirás cómo ejecutar aplicaciones con interfaz gráfica desde Docker en Windows y podrás ejecutar tu...