Monitorización con Grafana & Prometheus

En este tutorial vamos a crear un panel de monitorización con grafana para nuestra stake pool, esta consta de 3 nodos relays y 1 nodo core.

Uno de los relays, el número 3, lo usaremos para levantar el servicio de Grafana con su interfaz web. El resto de nodos relays y el core siguen los mismos pasos.

Vamos a monitorizar tanto las métricas generadas por cardano-node, como las métricas generales del servidor con node-exporter de Prometheus.

Relay3 host
Relay1 & relay2 & core
Relay3 host

Puesta a punto del entorno

Instalar Grafana

Añadimos el key al apt :

wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -

Añadimos el repositorio al apt:

sudo add-apt-repository "deb https://packages.grafana.com/oss/deb stable main"

Actualizamos los paquetes(ya tenemos el repo verificable de grafana en apt)

sudo apt update

Instalamos grafana:

sudo apt install grafana

Cambiamos el puerto donde se desplegará Grafana:

sudo vim /etc/grafana/grafana.ini

Elige el puerto de tu elección(también puedes dejar el puerto por defecto):

http_port = <port>

Inicia el servicios de grafana y haz que se inicie automáticamente si se reinicia el servidor.

sudo systemctl start grafana-server
sudo systemctl enable grafana-server

Comprueba el estado de grafana:

sudo systemctl status grafana-server

Otras opciones:

sudo systemctl restart grafana-server
sudo systemctl stop grafana-server

Abre el puerto establecido en grafana.ini con ufw:

sudo ufw allow proto tcp from any to any port <port>

Ahora todo el mundo puede acceder al login de la web de:

http://<ip-address>:<port>

La primera vez que accedes, 'admin' es el usuario y contraseña, después cambia la contraseña.

Puede pensar en establecer un nombre de dominio a la dirección ip para hacer el acceso mas amigable.

Finalmente, instala el plugin Clock:

grafana-cli plugins install grafana-clock-panel

Instala Prometheus & node exporter

sudo apt-get install -y prometheus prometheus-node-exporter prometheus-alertmanager

Busca el archivo de configuración de prometheus-node-exporter:

sudo find / -name prometheus-node-exporter.service
vim path-to/prometheus-node-exporter.service

Elige el puerto de tu elección, busca la siguiente linea:

ExecStart=/usr/local/bin/node_exporter

Cámbiala por:

ExecStart=/usr/local/bin/node_exporter --web.listen-address=:<port>

Start the services and enable them to init when reboot:

Inicia el servicio y haz que se inicie automáticamente si se reinicia el servidor.

sudo systemctl start prometheus
sudo systemctl start prometheus-node-exporter
sudo systemctl enable prometheus
sudo systemctl enable prometheus-node-exporter

Una vez que todos los servicios está instalados y funcionando, vamos a editar el archivo de configuración de prometheus para añadir la fuente de las métricas de todos los nodos(incluído el localhost). Buscamos el archivo de configuración:

sudo find / -name prometheus.yml
sudo vim <path-to>/prometheus.yml

Añadir las metricas a Prometheus

Antes de continuar, asegúrate de completar todos los pasos del resto de nodos.

Reemplaza el contenido por:

# global configs
global:
scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
# scrape_timeout is set to the global default (10s).
scrape_configs:
- job_name: 'cardano' # To scrape data from the running cardano-node
scrape_interval: 15s
static_configs:
- targets: ['<ip-address1>:12798']
labels:
alias: 'relay1'
type: 'cardano-node'
- targets: ['<ip-address2>:12798']
labels:
alias: 'relay2'
type: 'cardano-node'
- targets: ['<ip-address3>:12798']
labels:
alias: 'core'
type: 'cardano-node'
- targets: ['127.0.0.1:12798']
labels:
alias: 'relay3-host'
type: 'cardano-node'
- job_name: 'node' # To scrape data from a node exporter to monitor the linux host metrics.
scrape_interval: 15s
static_configs:
- targets: ['<ip-address1>:<node-exporter-port>']
labels:
alias: 'relay1'
type: 'host-system'
- targets: ['<ip-address2>:<node-exporter-port>']
labels:
alias: 'relay2'
type: 'host-system'
- targets: ['<ip-address3>:<node-exporter-port>']
labels:
alias: 'core'
type: 'host-system'
- targets: ['127.0.0.1:<node-exporter-port>']
labels:
alias: 'relay3-host'
type: 'host-system'

Date cuenta que el relay3 es el host de grafana, entonces solo necesitamos especificar la ip 127.0.0.1 para esta fuente, porque está todo en la misma máquina.

BAsegúrate de reemplazar<ip-address> y <node-exporter-port> con tus valores.

Reiniciamos el servicio para cargar la nueva configuración:

sudo systemctl restart prometheus
Relay1 & relay2 & core

Puesta a punto del entorno

Instalar Prometheus & node exporter

sudo apt-get install -y prometheus-node-exporter
sudo find / -name prometheus-node-exporter.service

or

systemctl status prometheus-node-exporter.service

Edita el servicio:

vim path-to/prometheus-node-exporter.service

Elige el puerto donde se lanzarán las métricas de node-exporter. Cambia la siguiente línea:

ExecStart=/usr/local/bin/node_exporter

Por:

ExecStart=/usr/local/bin/node_exporter --web.listen-address=:<node-exporter-port>

Start the services and enable them to init when reboot: Inicia el servicios y haz que se inicie cada vez que reinicia el servidor.

sudo systemctl start prometheus-node-exporter.service
sudo systemctl enable prometheus-node-exporter

Cardano config: Hacemos que las métricas sean accesible desde fuera de localhost

Vamos a encontrar el archivo de configuración usado por cardano-node:

sudo find / -name mainnet-config.json
vim path-to/mainnet-conf.json

Cambia el campo hasPrometheus:

"hasPrometheus": [ "127.0.0.1", 12798 ]

Por:

"hasPrometheus": [ "0.0.0.0", 12798 ]

Después de editar el archivo, tienes que reinicar el nodo para que cargue los nuevos valores de configuración.

Firewall: reestringir el puerto de cardano-node 12798

Abrimos el puerto para una dirección ip específica, en este caso, para el relay3-host.

sudo ufw allow from <host-ip-address3> to any port 12798
sudo ufw allow from <host-ip-address3> to any port <node-exporter-port>

Felicidades! Hemos hecho que cardano-node genere metricas accesibles desde el puerto 12798 y que node-exporter genere métricas sobre el servidor en el puerto <port>.

Grafana monitor web

Añade la fuente de métricas Prometheus:

En el panel de grafana, Ir a Configuration > Data Sources > Add data source y selecciona Prometheus.

Crear un panel para tu stake pool desde cero

En el menú izquierdo de grafana, vete a + > Create > Dashboard.

Crear un gráfico que muestre los peers conectados a cardano-node.

1. Seleccionamos la fuente de datos Prometheus

2. Seleccionamos la métrica específica

Ejemplo de gráfico:

3. Establece las propiedades de la gráfica

Cargar un dashboard desde archivo.

En el panel de grafana, Ir a + > Create > Import > introduce el contenido json.

Ejemplo de panel version 1:

Apoyo nuestro trabajo delegando al pool Ada Booster.