Recopilando metricas de Windows en Elasticsearch con Metricbeat y visualizando con Grafana
En este post veremos otro de los maravillosos componentes de Elasticsearch, dentro de los paquetes de Beats también nos encontraremos una utilidad que nos servirá para tratar y recoleccionar métricas de nuestros equipos Windows o Linux, conocida como Metricbeat. Veremos cómo exportar dichas métricas a Logstash para tratarlas y almacenarlas en Elasticsearch para posteriormente visualizarlas con Kibana o Grafana!
Bien, debemos dejar el agente liviano Metricbeat instalado y corriendo en las máquinas de las que queremos absorber sus métricas, sea un equipo con SO Windows, Linux o Mac OS. Descargamos Metricbeat de https://www.elastic.co/downloads/beats/metricbeat, lo descomprimiremos y , (por ejemplo) lo dejamos en ‘ C:\Program Files\metricbeat\’. Tendremos su fichero de configuración llamado ‘metricbeat.yml’ y otro fichero de referencia con todas las opciones que podremos utilizar, llamado ‘metricbeat.reference.yml’. En este ejemplo veremos sobre una máquina Windows cómo recopilar métricas básicas como son la CPU, Memoria, Disco o Red, pero que opcionalmente si corre algún servicio interesante le habilitaremos el módulo correspondiente para recopilar también dichos datos. Descargaremos Metricbeat, lo configuraremos y lo instalaremos como servicio.
Configurando Metricbeat,
Bueno, antes de comenzar a tocar el fichero de configuración de Metricbeat; en la carpeta ‘modules.d’ tendremos todos los módulos adicionales de los que podremos además obtener métricas, sean servicios de servicios web, bases de datos, plataformas virtuales, como por ejemplo apache, mongodb, mysql, vsphere, PostgreSQL… En cada módulo podremos habilitar que se obtengan más o menos métricas.
En este ejemplo, en ‘system.yml’ veremos que redireccionará cada 10 segundos las métricas de CPU, Memoria, Red o información de los procesos entre otros, podremos comentar o descomentar lo que necesitemos, podremos definir este módulo o el que nos interese especificando la info que nos interese recopilar. Más adelante veremos como habilitar los módulos que nos interese, ya que si no tendrán la extensión ‘.disabled’.
[sourcecode]- module: system
period: 10s
metricsets:
– cpu
#- load
– memory
– network
– process
– process_summary
#- core
#- diskio
#- socket
process.include_top_n:
by_cpu: 5 # include top 5 processes by CPU
by_memory: 5 # include top 5 processes by memory
– module: system
period: 1m
metricsets:
– filesystem
– fsstat
processors:
– drop_event.when.regexp:
system.filesystem.mount_point: ‘^/(sys|cgroup|proc|dev|etc|host|lib)($|/)’
– module: system
period: 15m
metricsets:
– uptime[/sourcecode]
Después, en el fichero de configuración ‘metricbeat.yml’ realizaremos el resto de configuración, en la sección de ===== General ===== podremos añadir tags o campos adicionales por si nos interesaría asociar este Metricbeat del equipo a distintas palabras claves, para luego poder usarlas en distintas búsquedas, como indicar si es un Servidor, es un servidor de BBDD o web, o tiene IIS, su SO…
[sourcecode]tags: ["Servidor", "Windows 2016 R2", "OS-DC-01"]
fields:
globo_environment: Produccion[/sourcecode]
En la sección del Output, podremos enviar directamente a Elasticsearch los datos, pero como en otros posts, particularmente prefiero enviar los datos a Logstash para tratarlos. Así que comentaremos toda la parte de Output contra Elasticsearch y configuramos contra el servidor de Logstash y su puerto, que en un anterior documento vimos en la parte de “Configurando Logstash” el fichero a crear. Lo dicho tocamos el output dejando algo así:
[sourcecode]#——— Logstash output ———
output.logstash:
# The Logstash hosts
#hosts: ["localhost:5044"]
hosts: ["DIRECCION_IP_LOGSTASH:5044"][/sourcecode]
Una vez configurado Metricbeat, para instalar Metricbeat como un servicio ejecutamos:
[sourcecode].\install-service-metricbeat.ps1[/sourcecode]
Y lo dicho, podemos habilitar módulos especificos si queremos monitorización adicional en nuestra máquina, en este servidor dispongo de un MySQL y un Apache, debería habilitarlos:
[sourcecode].\metricbeat.exe modules enable apache mysql[/sourcecode]
Como siempre, la primera vez que añadamos en Elasticsearch métricas de Metricbeat, debemos cargar la plantilla para que nos genere los índices con los campos de manera correcta:
.\metricbeat.exe setup –template -E output.logstash.enabled=false -E ‘output.elasticsearch.hosts=[“SERVIDOR_ELASTICSEARCH:9200”]’
Podremos probar si tenemos bien configurado los ficheros de configuración, desde un PowerShell con privilegios de administrador, vamos al path donde tenemos Metricbeats, y ejecutamos:
[sourcecode].\metricbeat.exe test config -c .\metricbeat.yml -e[/sourcecode]
E iniciamos el servicio y si queremos, podemos ver el estado de la conexión de Metricbeats con Logstash o Elasticsearch (depende lo que escogimos):
[sourcecode]Start-Service metricbeat
Get-Content .\logs\metricbeat -Wait[/sourcecode]
Y listo! Ya deberemos tener Metricbeat recoleccionando métricas! Ahora vamos a visualizarlas… viene la mágia!
Desde Kibana,
Si queremos visualizar las métricas con Kibana, primero crearemos el patrón del índice, después verificaremos que llegan datos y luego ya nos podríamos poner a pintar!
Abrimos Kibana, vamos a “Management” > “Index Patterns” > “Create Index Pattern” e indicamos ‘metricbeat-*’ como patrón, pulsamos en “Next step”,
Seleccionamos ‘@timestamp‘ como columna de tiempo y creamos el patrón desde “Create index pattern”.
Y desde “Discover”, seleccionando el patrón que acabamos de crear ya podremos apreciar que nos están llegando datos, como siempre, podemos desde aquí ver qué nos llega, jugar a añadir columnas y hacer filtros para luego crear las visualizaciones desde “Visualize” y ver las métricas que estamos monitorizando en tiempo real pero en formato de gráficas, tablas, columnas, quesos…
Desde Grafana,
Antes de poder visualizar los datos, recordar que debemos de dar de alta el origen de datos y conectar Grafana con los índices de Metricbeat en Elasticsearch!
Abrimos Grafana, vamos a “Configuración” > “Data Sources”, indicaremos un nombre a la conexión, en la URL debemos indicar la URL de nuestro Elasticsearch ‘http://DIRECCION_IP_ELASTIC:9200’. Seleccionamos ‘metricbeat-*’ para usar como nombre para los índices, indicamos el campo @timestamp para el campo de tiempo y seleccionamos la versión de Elasticsearch, pulsamos en “Save & Test”,
Y ya podremos en un Dashboard añadir paneles para visualizar las métricas que generan las máquinas que tienen Metricbeat instalado! En un Panel de ejemplo, en este caso será una gráfica de líneas, donde visualizaremos todos las métricas que generan un par de máquinas. Seleccionamos nuestro conector contra los índices de Metricbeat en Elasticsearch, y podemos usar consultas Lucene desde aquí para visualizar lo que nos interese.
Y nada, en un ratito podremos analizar que datos nos están llegando y cómo presentarlos y dibujarlos con Grafana, ya veréis como no resulta tán complicado y podemos visualizar de una manera muy agradable cualquier información que recopilemos, espero os haya resultado interesante!