Skip to content

Latest commit

 

History

History
558 lines (350 loc) · 26.7 KB

monitoreo-y-mantenimiento-de-un-validador.md

File metadata and controls

558 lines (350 loc) · 26.7 KB

Monitoreo y mantenimiento de un Validador

Hay que tener en cuenta que el versionado de nuestros clientes es algo que tenemos que estar pendiente y va a depender de cual estemos usando nosotros, para esta actividad creamos una guia que te va a ayudar a mantener tu nodo o validador actualizado,

También es importante que sepamos utilizar herramientas para monitorear nuestro validador asi podremos ver que informacion estamos exponiendo sobre nuestro Nodo, hacer seguimiento de inconvenientes que tengamos y como se comporto nuestro Nodo ante ese inconveniente, prevenir errores al ver que se estan consumiendo mas recursos de lo comun, para esto hoy vamos a ver como monitorear nuestro nodo dando como ejemplo la red de Holesky.

Monitoreo de un Validador Holesky

Para este caso utilizamos Nethermind y Teku al momento de instalacion, para los mismos utilizamos Sedge, podes ver como utilizar esta herramienta te será muy util nuestro tutorial que utilizaremos como ejemplo de punto de partida:

{% embed url="https://www.youtube.com/watch?v=7kQDpSjIiKA" %}

Herramientas

Prometheus es un proyecto de monitoreo de sistemas de código abierto. Recolecta y almacena diferentes métricas en una base de datos especializada. Proporciona todas esas métricas a cualquier otra herramienta que desee consultarlas de manera flexible, eficiente y sencilla. En nuestra configuración, recopilará métricas de Node Exporter y opcionalmente de clientes Ethereum, y las proporcionará a solicitud a Grafana.

{% embed url="https://dvt-homestaker.stakesaurus.com/monitoring-maintenance-and-updates/set-up-monitoring-suite/installing-and-configuring-prometheus" %}

Node Exporter es un proyecto de código abierto que expone las métricas de hardware y sistema operativo. En nuestra configuración, proporcionará las métricas de nuestro sistema a Prometheus.

Grafana es un proyecto de código abierto utilizado para visualizar métricas. Puede usarse para crear paneles que muestren fácilmente las métricas en las que está interesado. En nuestra configuración, consultará las métricas almacenadas en Prometheus para mostrarlas en un navegador con gráficos.

1-Prometheus

Descargar e instalar Prometheus

Descarga la ultima version de Prometheus acá: https://prometheus.io/download/

Una vez que lo descargamos, abrimos la terminal en el directorio que este el archivo y ejectuamos el comando: sha256sum [nombre-archivo].tar.gz para comprobar que este correcto, comprobamos que el resultado sea igual a la columna SHA256 Checksum que nos indica la pagina

Vemos que coincide, perfecto, vamos a repetir este proceso 2 veces mas adelante de forma mas resumida, es importante que entiendas porque hacemos esto.

Extraemos los archivos con el comando:

Copy

tar -xzvf [nombre-archivo].tar.gz

Ahora los movemos dentro de /usr/local/bin y /etc/prometheus para mas practicidad.

Copy

sudo cp prometheus-2.52.0.linux-amd64/prometheus /usr/local/bin/
sudo cp prometheus-2.52.0.linux-amd64/promtool /usr/local/bin/
sudo cp -r prometheus-2.52.0.linux-amd64/consoles /etc/prometheus
sudo cp -r prometheus-2.52.0.linux-amd64/console_libraries /etc/prometheus

(opcional) Despues podemos eliminar el archivo .tar.gz y el prometheus que se extrajo.

Configurar Prometheus

Creamos una cuenta (prometheus) sin acceso al servidor para que Prometheus se ejecute como un servicio en segundo plano para mas seguridad.

Copy

sudo useradd --no-create-home --shell /bin/false prometheus

Creamos un directorio para que Prometheus almacene los datos del monitoreo. Despues, establecemos al usuario prometheus como propietario de este directorio y del directorio /etc/prometheus para que este usuario pueda leer y escribir sobre los directorios

Copy

sudo mkdir -p /var/lib/prometheus
sudo chown -R prometheus:prometheus /var/lib/prometheus
sudo chown -R prometheus:prometheus /etc/prometheus

Creamos un archivo de configuración para que Prometheus sepa de dónde obtener los datos.

Copy

sudo nano /etc/prometheus/prometheus.yml

Pegamos los siguientes parámetros de configuración en el archivo:

1) General + parametros execution client (Nethermind):

Copy

global:
  scrape_interval: 15s
scrape_configs:
  - job_name: prometheus
    static_configs:
      - targets:
          - localhost:9090
  - job_name: node_exporter
    static_configs:
      - targets:
          - localhost:9100
  - job_name: nethermind
    static_configs:
      - targets:
          - localhost:9091

2) Parametros consensus client (Teku):

De acuerdo con su consensus client seleccionado, agreguamos los siguientes bloques a los parámetros generales + parámetros del execution client anteriores.

Copy

- job_name: "teku-dev" #for consensus client
    scrape_timeout: 10s
    metrics_path: /metrics
    scheme: http
    static_configs:
      - targets: ["localhost:8009"]
      
  - job_name: "teku-validator" #for validator client
    scrape_timeout: 10s
    metrics_path: /metrics
    scheme: http
    static_configs:
      - targets: ["localhost:8108"]

Una vez que hayamos copiado todo, guardamos con Ctrl+O y le damos a Enter . Nos deberia quedar asi:

despues salimos con Ctrl+x volviendo a donde estabamos

Luego, creamos un archivo de configuracion systemd para que el servicio de Prometheus se ejecute en segundo plano

Copy

sudo nano /etc/systemd/system/prometheus.service

Pegamos la configuracion dentro del archivo:

Copy

[Unit]
Description=Prometheus
Wants=network-online.target
After=network-online.target
[Service]
Type=simple
User=prometheus
Group=prometheus
Restart=always
RestartSec=5
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

Una vez copiado, guardamos con Ctrl+O le damos a Enter y salimos con Ctrl+X .

Iniciar el servicio Prometheus

Recargamos el systemd deamon para registrar los cambios que hicimos, iniciamos Prometheus y verificamos que su estado para comprobar que esta corriendo.

Copy

sudo systemctl daemon-reload
sudo systemctl start prometheus.service
sudo systemctl status prometheus.service

Deberiamos obtener la siguiente salida:

(Presionamos Ctrl+C para salir y Promtheus va a seguir corriendo)

Usamos el siguiente comando para checkear los logs por si hay algun warning o algun error:

Copy

sudo journalctl -fu prometheus -o cat | ccze -A

Observacion: si no tenemos ccze lo instalamos

Salida esperada:

Presionamos Ctrl+C para salir.

Si el servicio de Prometheus esta funcionando sin problemas, ahora podemos habilitarlo para que se inicie automaticamente al reiniciar el sistema:

Copy

sudo systemctl enable prometheus.service

Ahora, podemos proceder con la instalación de Node Exporter

2-Node Exporter

Descarga y configuración

Descargamos la ultima versión de node_exporter del siguiente link: https://prometheus.io/download/#node_exporter

Corremos sha256sum para verificar que este todo correcto y lo comparamos con la tabla

Vemos que coincide, podemos seguir.

Descomprimimos el archivo usando tar -xzvf [nombre.archivo].tar.gz y los copiamos a /usr/local/bin para mas practicidad.

Configure the Node Exporter service

Creamos una cuenta de node_exporter sin acceso al servidor para que Node Exporter se ejecute como un servicio en segundo plano para mas seguridad.

Copy

sudo useradd --no-create-home --shell /bin/false node_exporter

Creamos un archivo de configuración de systemd para que el servicio de Node Exporter se ejecute en segundo plano.

Copy

sudo nano /etc/systemd/system/node_exporter.service

Pegamos los siguientes parámetros de configuración en el archivo:

Copy

[Unit]
Description=Node Exporter
Wants=network-online.target
After=network-online.target
[Service]
User=node_exporter
Group=node_exporter
Type=simple
Restart=always
RestartSec=5
ExecStart=/usr/local/bin/node_exporter
[Install]
WantedBy=multi-user.target

Una vez que lo copiemos, guardamos con Ctrl+O y le damos a Enter , despues salimos con Ctrl+X .

Iniciamos el servicio Node Exporter

Recargamos systemd para registrar los cambios realizados, iniciamos el servicio de Node Exporter y verificamos su estado para asegurarnos de que esté funcionando.

Copy

sudo systemctl daemon-reload
sudo systemctl start node_exporter.service
sudo systemctl status node_exporter.service

Salida esperada: La salida debe indicar que Node Exporter está "active (running)". Presiona Ctrl+C para salir y Node Exporter continuará ejecutándose.

Usa el siguiente comando para verificar los registros del proceso de sincronización de Teku Beacon Node. Pon atención a cualquier advertencia o error.

Copy

sudo journalctl -fu node_exporter -o cat | ccze -A

Salida esperada:

Le damos a Ctrl+C para salir del monitoreo.

Si el servicio de Node Exporter está funcionando sin problemas, ahora podemos habilitarlo para que se inicie automáticamente al reiniciar el sistema.

Copy

sudo systemctl enable node_exporter.service

3-Grafana

Instalacion de dependencias (Pushgateway)

Esta dependencia es específica del cliente de la capa de ejecución Nethermind para permitir que el panel de monitoreo de Grafana funcione correctamente.

Descargamos la última versión:

Releases · prometheus/pushgatewayPush acceptor for ephemeral and batch jobs. Contribute to prometheus/pushgateway development by creating an account on GitHub.github.comReleases · prometheus/pushgateway

Extraemos los archivos y los movemos al directorio (/usr/local/bin) para que sea mas practico.

Copy

tar xvf pushgateway-1.7.0.linux-amd64.tar.gz
cd pushgateway-1.7.0.linux-amd64
sudo cp pushgateway /usr/local/bin

Creamos una cuenta (pushgateway) sin acceso al servidor para que Pushgateway se ejecute como un servicio en segundo plano.

Creamos el archivo de configuración de systemd para ejecutar Pushgateway.

Copy

sudo nano /etc/systemd/system/pushgateway.service

Paste the following contents into the configuration file.

Copy

[Unit]
Description=Prometheus Pushgateway
After=network.target
Wants=network.target

[Service]
User=pushgateway
Group=pushgateway
Type=simple
Restart=always
RestartSec=5
ExecStart=/usr/local/bin/pushgateway

[Install]
WantedBy=default.target

Una vez que lo hagas, guardamos con Ctrl+O y Enter , despues salimos con Ctrl+X .

Iniciamos el servicio Pushgateway:

Copy

sudo systemctl daemon-reload
sudo systemctl start pushgateway
sudo systemctl enable pushgateway
sudo systemctl status pushgateway

Salida esperada: La salida debería indicar que Pushgateway está "activo (ejecutándose)". Presionamos Ctrl+C para salir y Pushgateway seguirá ejecutándose.

Monitoreamos para identificar las causas de los mensajes de error, si los hubiera.

Copy

sudo journalctl -fu pushgateway -o cat | ccze -A

Descargamos e instalamos grafana

Instalamos Grafana utilizando el gestor de paquetes APT: descarga la clave GPG de Grafana, añade Grafana a las fuentes de APT, actualiza la caché de apt y verifica que Grafana se haya añadido al repositorio de APT.

Copy

wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -
sudo add-apt-repository "deb https://packages.grafana.com/oss/deb stable main"
sudo apt update
apt-cache policy grafana

Salida esperada: Asegúrate de que la versión más reciente coincida con la última versión aquí: https://grafana.com/grafana/download

Corremos el comando de instalación:

Copy

sudo apt install -y grafana

Iniciamos el servidor Grafana

Copy

sudo systemctl start grafana-server
sudo systemctl status grafana-server

La salida debería indicar que Grafana está "activo (ejecutándose)". Presiona CTRL-C para salir y Grafana seguirá ejecutándose.

Utilizamos el siguiente comando para verificar los registros en busca de advertencias o errores:

Copy

sudo journalctl -fu grafana-server -o cat | ccze -A

Usamos Ctrl+C para salir

Si el servicio de Grafana está funcionando sin problemas, ahora podemos habilitarlo para que se inicie automáticamente al reiniciar el sistema:

Configuracion del Dashboard de Grafana

Vamos a nuestro navegador y ingresamos a http://localhost:3000/login

Ingresamos admin como usuario y como contraseña

A continuacion nos deja setear una nueva password, es recomendable hacerlo.

Vamos a data sources

Luego en Add data source seleccionamos Prometheus y ingresamos http://localhost:9090 como URL.

Bajamos

Ingresamos la URL

Vamos a dashboards en el menu de la izquierda

Seleccionamos el boton de new y le damos import

Execution client dashboard

Vamos abajo a la parte del JSON y copiamos lo siguiente (JSON especifico de Nethermind):

Untitledsamuelclk

Si usaste otro cliente:

  • Besu: Ingresamos el dashboard ID - 10273
  • Geth: Ingresamos el dashboard ID - 13877

Le damos a import

image

Consensus client dashboard

  • Teku: Ingresamos el dashboard ID - 16737
  • Nimbus: Paste the JSON text from the options below
  • Lodestar: Pegamos el JSON desde acá
  • Lighthouse: Pegamos el JSON desde acá
  • Prysm: Pegamos el JSON desde acá

Node Exporter Dashboard

Pegamos el JSON de acá:

ETH_full_home_staking_guide/monitoring-maintenance-and-updates/set-up-monitoring-suite/Node-exporter-grafana-json at main · samuelclk/ETH_full_home_staking_guideContribute to samuelclk/ETH_full_home_staking_guide development by creating an account on GitHub.github.comETH_full_home_staking_guide/monitoring-maintenance-and-updates/set-up-monitoring-suite/Node-exporter-grafana-json at main · samuelclk/ETH_full_home_staking_guide

Importante!!! Seleccionar Prometheus en el campo desplegable "Selecciona una fuente de datos de Prometheus aquí"

Ya vamos a empezar a ver como en Node exporter nos trae la data, el execution client y el consensus client no deberian tener data si todavia estan sincronizando, vamos a tener que esperar si es el caso.

Esta forma es bastante automatica en si, en caso de que quisieramos podriamos conectar todo esto via la app de Beaconcha.in (https://beaconcha.in/)

image

Una alternativa mas simple es descargar Team Viewer

image

(https://www.teamviewer.com/latam/) y configurarlo de forma que donde tenemos el Nodo cada vez que querramos acceder no se nos pida permiso con la cuenta que estemos usando, de esta forma cada vez que querraamos ver la pantalla en vivo de nuestro nodo podemos conectarnos sin estar fisicamente cerca del Nodo.