Guía de instalación Prometheus y Grafana para un Validador

Guia de instalación del monitoreo para un Validador

Introducción

Los nodos validadores miden el tiempo de disponibilidad u operación (en inglés uptime) como parámetro de calidad, para mantener un tiempo de disponibilidad entre valores de 99,9% y 100% es muy importante tener un mecanismos que nos permita conocer el estado del sistema constantemente, dado que en algún momento puede ocurrir algún problema en los servicios o en el hardware, un sistema de monitoreo y alertas nos ayuda a identificar oportunamente y tomar acción para mitigar los largos periodos de inactividad en los nodos validadores.

Para ello nosotros usamos y recomendamos Prometheus como sistema de recopilación y almacenamiento de métricas, Node Exporter como exportador de datos a monitorear en cada uno de los servidores y Grafana como interfaz gráfica y de fácil administración para el monitoreo y las alertas.

Prometheus

Prometheus es un software libre enfocado en la recopilación de métricas, monitoreo de eventos y alertas cuando sea necesario, Está desarrollado en Go y está licenciado bajo Apache también se dispone de su código fuente en su github y es un proyecto graduado de Cloud la Native Computing Foundation junto a Kubernetes. Si quiere conocer más sobre Prometheus puede ir a su página oficial aquí.

Node exporter

Es el encargado de enviar los datos a prometheus referente al hardware y métricas del sistema operativo, este software también está desarrollado en go, si quiere conocer más acerca de node exporter puede revisar su información y código fuente que también está publicado en github. Para descargarlo puede ir al link de descarga oficial aquí.

Grafana

Grafana es una aplicación web desarrollada en lenguaje Go y cuenta con licencia de apache 2, esta aplicación permite la visualización de métricas en cuadros y paneles, esta aplicación admite varias fuentes de datos y recopiladores de métricas como lo pueden ser Graphite y Prometheus. Si quiere conocer más acerca de Grafana puede ir a su página oficial aquí.

Arquitectura

Para nuestro caso hemos dispuesto de una máquina o servidor dedicado solamente a monitorear los otros servidores, en dicha máquina tenemos comunicación de manera privada hacia los diferentes validadores ó sistemas que deseamos monitorear. El sistema está basado en Gnu/Linux y lo tenemos parametrizado de manera estándar en este momento.

Cada nodo validador tiene trabajando el software llamado Node Exporter, este software se encarga de exportar los datos necesarios o los que necesitemos para el monitoreo, estos datos son recopilados por prometheus el cual está en el servidor dedicado al monitoreo y este se encarga de darles formato para que podamos visualizarlos y entenderlos. Grafana por su parte tiene la capacidad de tomar los datos que recopila prometheus y mostrarlos vía web de una forma agradable y más entendible a la vista de un usuario.

A continuación vamos a describir el proceso de instalación de las diferentes herramientas:

Instalación de Prometheus

Usuario y grupo de monitoreo

Se crea el usuario y el grupo de monitoreo, también se crean los directorios para prometheus

groupadd --system monitoreo
useradd -s /bin/false -r -g monitoreo monitoreo

mkdir /etc/prometheus
mkdir /var/lib/prometheus

Descargar Prometheus:

Posterior a esto se descarga la última versión desde la página oficial aquí.

mkdir Downloads/prometheus -p 
cd Downloads/prometheus
#Descargar la última versión
wget 
https://github.com/prometheus/prometheus/releases/download/v2.42.0/prometheus-2.42.0.linux-amd64.tar.gz
tar -xvf prometheus-2.42.0.linux-amd64.tar.gz

Se procede a instalar

cd prometheus
install prometheus /usr/local/bin/
install promtool /usr/local/bin/
mv consoles /etc/prometheus/
mv console_libraries /etc/prometheus/
mv prometheus.yml /etc/prometheus/

Configuración de Prometheus

Ingresar a la ubicación del archivo de configuración de prometheus

cd /etc/prometheus
#Copia de seguridad del archivo de configuración para modificarlo
mv prometheus.yml prometheus.yml.bak
#creamos y editamos el archivo de configuración nuevo
nano prometheus.yml

En el contenido de configuración puede dejarlo por defecto, el primer job_name es el correspondiente a prometheus que se aloja por defecto en el puerto 9090 y el otro es el que estaría exportando los datos de métricas desde node exporter, que es lo que veremos después de terminar prometheus.

global:
  scrape_interval: 15s

scrape_configs:
  - job_name: 'prometheus'
    scrape_interval: 5s
    static_configs:
      - targets: ['localhost:9090']

  - job_name: 'monitoreo'
    scrape_interval: 5s
    static_configs:
      - targets: ['localhost:9100']

Se establecen los permisos en los archivos y binarios de instalación al usuario y grupo de monitoreo.

chown monitoreo:monitoreo /usr/local/bin/prometheus
chown monitoreo:monitoreo /usr/local/bin/promtool
chown monitoreo:monitoreo /var/lib/prometheus -R
chown monitoreo:monitoreo /etc/prometheus -R
chmod -R 775 /etc/prometheus/ /var/lib/prometheus/

Configuración del Proceso de Prometheus en el sistema

Procedemos a crear el proceso para permitir que se ejecute en segundo plano.

nano /etc/systemd/system/prometheus.service
#Editamos el archivo de esta manera
[Unit]
  Description=Prometheus Monitor
  Wants=network-online.target
  After=network-online.target

[Service]
  User=monitoreo
  Group=monitoreo
  Type=simple
  ExecStart=/usr/local/bin/prometheus \
  --config.file /etc/prometheus/prometheus.yml \
  --storage.tsdb.path /var/lib/prometheus/ \
  --web.console.templates=/etc/prometheus/consoles \
  --web.console.libraries=/etc/prometheus/console_libraries

[Install]
  WantedBy=multi-user.target
  SyslogIdentifier=prometheus
  Restart=always

Se fijan los siguientes permisos al usuario monitoreo sobre el binario de prometheus

chown monitoreo:monitoreo /var/lib/prometheus -R
chmod 775 /var/lib/prometheus -R

Habilitamos e iniciamos el servicio de prometheus

systemctl daemon-reload
systemctl enable prometheus
systemctl start prometheus

#Se verifica que el demonio está corriendo correctamente 
systemctl status prometheus

Ahora se podrá ver la interfaz web de prometheus en cualquier navegador web, se pone en la barra de búsqueda la ip y el puerto de prometheus para este caso localhost:9090

Instalación de Node exporter

Para que prometheus pueda obtener las métricas de otros servidores o del servidor mismo donde está instalado se debe usar el software Node Exporter, esta se puede descargar también de la página oficial aquí.

Descarga e instalar node_exporter

Descarga la última versión desde la página oficial, esta puede estar obsoleta al momento de leer esta guía

mkdir Downloads/exporter -p
cd Downloads/exporter
wget https://github.com/prometheus/node_exporter/releases/download/v1.5.0/node_exporter-1.5.0.linux-amd64.tar.gz
#Descomprimimos el archivo descargado
tar -xvzf node_exporter-1.5.0.linux-amd64.tar.gzz
cd cd node_exporter-1.5.0.linux-amd64/

Se mueve y se copia el binario dentro de las carpetas del sistema y se le otorgan permisos al usuario y grupo de monitoreo

mv node_exporter /usr/local/bin/
chown monitor:monitor /usr/local/bin/node_exporter
chmod 775 /usr/local/bin/node_exporter

Configuración del Proceso de Node Exporter en el sistema

Procedemos a crear el proceso para permitir que se ejecute en segundo plano.

nano /etc/systemd/system/exporter.service
#Lo editamos de la siguiente manera
[Unit]
Description=Node exporter
After=network-online.target

[Service]
User=monitoreo
Type=simple
ExecStart=/usr/local/bin/node_exporter

[Install]
WantedBy=multi-user.target
Restart=always

Habilitamos e iniciamos el servicio de Node Exporter

systemctl daemon-reload
systemctl enable exporter
systemctl start exporter
#Se verifica que el demonio está corriendo correctamente 
systemctl status exporter

Se puede verificar la información exportada en cualquier navegador web colocando en la barra de búsqueda la ip del servidor con el puerto dedicado para Node Exporter en este caso usamos localhost:9100 y se obtiene lo siguiente:

Instalación de Grafana

Grafana es nuestra parte visual y de administración de dashboards para la información recolectada por prometheus, acá también se podrán configurar las alertas para que lleguen a nuestro email, telegram, line, discord entre otras muchas posibilidades.

Descargar e instalar grafana.

Para descargar grafana, vamos a la página oficial y descargamos la última versión, en este caso es la v9.3.6 pero para el momento que está mirando esto, puede que ya esté obsoleta, por favor verifique la última versión en la página de descarga oficial aquí.

mkdir Downloads/grafana -p
cd grafana
wget https://dl.grafana.com/enterprise/release/grafana-enterprise_9.3.6_amd64.deb
#Se procede con la instalación a partir del binario
sudo dpkg -i grafana_9.3.6_amd64.deb

Configuración del Proceso de Grafana en el sistema

Grafana ya viene con un proceso por defecto, lo único que tendremos que hacer es iniciarlo.

systemctl enable grafana-server
systemctl start grafana-server
systemctl status grafana-server

Se puede verificar si está activo revisando desde cualquier navegador web y colocando en la barra de búsqueda la ip del servidor con el puerto dedicado para Grafana en este caso usamos localhost:3000 y se obtiene lo siguiente:

Para ingresar por defecto el usuario de grafana es admin y la contraseña también es admin, una vez haya ingresado puede modificar sus credenciales de acceso.

Importar métricas de Prometheus

Vamos a la sección Import para traer un panel por defecto, si conoce del tema puede poner su propio panel favorito si no tiene panel favorito puede usar uno de los dashboard más conocidos que es el 11074 de la siguiente manera:

Cuando le damos clic al boton “Load” nos saldrá la siguiente interfaz donde le asignamos el nombre, el folder donde queremos que se almacene el dashboard, el ID del Dashboard y por último elegiremos Prometheus para que automáticamente lo detecte.

Después damos clic sobre el boton “Import” y aparecerá un dashboard similar a este.

Puede probar distintos dashboards que existen por defecto, los puede buscar en la documentación de grafana o puede crear uno personalizado.

Realizado por:

Mauricio Gil - maurog@decry.io

fabian - vfabian@decry.io

Fecha: Marzo del 2023

Last updated