Desde hace un tiempo tenía pendiente monitorizar los nodos virtualizados con KVM que tengo para el proyecto World Community Grid. Hay muchas maneras de hacerlo, pero me decidí por montar un stack ELK (Elasticsearch, Logstash y Kibana) en la máquina que tengo como servidor y recoger métricas con Metricbeat de cada nodo.
Por tanto, para empezar el entorno que tengo es:
- Servidor jota-master (Debian Stretch, IP 192.168.1.39) con ELK instalado. En el propio servidor también tengo instalado Metricbeat para tener métricas de rendimiento.
- Máquinas virtualizadas wcg-node1, wcg-node2 y wcg-node3 con Ubuntu Server 16.04 que envian métricas a jota-master. Como estas máquinas envían métricas al servidor jota-master las consideraré clientes.
Preparación del repositorio de elastic.co
Para instalar los distintos componentes tanto en servidor como clientes utilizaremos el repositorio oficial de elastic.co
En todos los nodos (servidor y clientes) hacemos:
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add - sudo apt-get install apt-transport-https echo "deb https://artifacts.elastic.co/packages/6.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-6.x.list
Instalación y configuración de ELK en el servidor
En el servidor jota-master instalo el stack ELK:
sudo apt-get update sudo apt-get install elasticsearch logstash kibana
Configuramos cada componente:
- IP/hostname de Kibana y URL de Elasticsearch en el fichero /etc/kibana/kibana.yml
server.host: "192.168.1.39" elasticsearch.url: "http://192.168.1.39:9200"
- IP/hostname de Elasticsearch en /etc/elasticsearch/elasticsearch.yml
network.host: 192.168.1.39
- IP/hostname de Logstash en /etc/logstash/logstash.yml
http.host: "192.168.1.39"
Habilito (para que arranque con el inicio de la máquina) y levanto cada componente:
# Habilitar systemctl enable kibana systemctl enable logstash systemctl enable elasticsearch # Iniciar systemctl start kibana systemctl start logstash systemctl start elasticsearch
Instalación de Metricbeat
Servidor
En mi caso he instalado Metricbeat en el servidor ya que me interesa tener métricas del mismo:
sudo apt-get install metricbeat
El fichero de configuración es /etc/metricbeat/metricbeat.yml. Configuramos el endpoint de Kibana:
#============================== Kibana ===================================== # Starting with Beats version 6.0.0, the dashboards are loaded via the Kibana API. # This requires a Kibana endpoint configuration. setup.kibana: # Kibana Host # Scheme and port can be left out and will be set to the default (http and 5601) # In case you specify and additional path, the scheme is required: http://localhost:5601/path # IPv6 addresses should always be defined as: https://[2001:db8::1]:5601 host: "192.168.1.39:5601" ...
En mi caso he elegido como endpoint Logstash:
... #================================ Outputs ===================================== ... #----------------------------- Logstash output -------------------------------- #output.logstash: # The Logstash hosts #hosts: ["192.168.1.39:5044"] ...
Iniciamos Metricbeat:
systemctl start metricbeat.service
Cargamos template para Elasticsearch y dashboards para Kibana:
# Carga de template, veremos "Loaded index template" si todo ha cargado bien metricbeat setup --template -E output.logstash.enabled=false -E 'output.elasticsearch.hosts=["192.168.1.39:9200"]' # Carga de dashboards, obtendremos "Loaded dashboards" metricbeat setup --dashboards
Ahora, volvemos al fichero de configuración /etc/metricbeat/metricbeat.yml, comentamos el endpoint de Elasticsearch y descomentamos el de Logstash. Después, reiniciamos Metricbeat con systemctl restart metricbeat.service
Clientes wcg-node
Esta parte es muy sencilla ya que que la configuración de ELK para recibir métricas de Metricbeat ya la hemos realizado en el paso anterior. Ahora en cada uno de los clientes (wcg-node1,2 y 3) simplemente instalo el paquete para Metricbeat:
sudo apt-get install metricbeat
Y configuro en /etc/metricbeat/metricbeat.yml el endpoint para Kibana y Logstash:
#============================== Kibana ===================================== # Starting with Beats version 6.0.0, the dashboards are loaded via the Kibana API. # This requires a Kibana endpoint configuration. setup.kibana: # Kibana Host # Scheme and port can be left out and will be set to the default (http and 5601) # In case you specify and additional path, the scheme is required: http://localhost:5601/path # IPv6 addresses should always be defined as: https://[2001:db8::1]:5601 host: "192.168.1.39:5601" ... #----------------------------- Logstash output -------------------------------- output.logstash: # The Logstash hosts hosts: ["192.168.1.39:5044"]
Iniciamos en cada máquina Metricbeat con systemctl start metricbeat.service
Comprobando dashboards
En mi máquina servidor donde tengo el stack ELK, en un navegador voy a http://192.168.1.39:5601/app/kibana
y después en los dashboards busco metric, seleccionando [Metricbeat System] Overview
Desde aquí podemos entrar al dashboard de los distintos nodos que están enviando métricas, por ejemplo mi servidor:
ELK y metricbeat tienen mucho más por explorar. Podemos habilitar métricas para Apache, Redis… todo ello lo tenéis en la documentación oficial.