Monitorització bàsica amb Grafana, Prometheus, Node Exporter i cAdvisor
Introducció
Quan administrem sistemes i servidors, és essencial monitoritzar-los per detectar possibles problemes abans que els usuaris en notin els efectes.
En aquest post farem una configuració bàsica amb Prometheus i Grafana, dos dels programes més utilitzats per aquest fi, per poder monitoritzar un sistema que tinguem.
Per fer-ho, utilitzarem Node exporter i cadvisor, i tot això utilitzant docker.
Què és cada un?
Node Exporter i cAdvisor
Encara que tenen funcions diferents, tots dos actuen com exportadors de dades per Prometheus.
Node Exporter l’utilitzarem per monitoritzar els recursos del sistema i cAdvisor per monitoritzar els contenidors Docker que hi corren.
Prometheus
Prometheus és el programa que agafarà i emmagatzemarà les dades dels exportadors Node Exporter i cAdvisor.
Grafana
Grafana no és res més que el visualitzador on veurem les estadístiques recollides. Agafa les dades de Prometheus i les mostra en dashboards que podem crear i personalitzar.
Instal·lació amb Docker
Farem un arxiu docker-compose.yaml amb el següent contingut:
services:
grafana:
image: grafana/grafana-enterprise
container_name: grafana
restart: unless-stopped
volumes:
- "/docker/grafana:/var/lib/grafana"
ports:
- '3000:3000'
prometheus:
image: prom/prometheus
volumes:
- '/docker/prometheus:/prometheus'
command:
- '--storage.tsdb.retention.time=90d'
ports:
- 9090:9090
node_exporter:
image: quay.io/prometheus/node-exporter:latest
container_name: node_exporter
command:
- '--path.rootfs=/host'
pid: host
restart: unless-stopped
volumes:
- '/:/host:ro,rslave'
ports:
- 9100:9100
cadvisor:
container_name: cadvisor
image: gcr.io/cadvisor/cadvisor:latest
restart: always
ports:
- "8080:8080"
volumes:
- "/:/rootfs"
- "/var/run:/var/run"
- "/sys:/sys"
- "/var/lib/docker/:/var/lib/docker:ro"
- "/dev/sda1/:/dev/sda1:ro"
privileged: true
devices:
- "/dev/kmsg"
Aquí definim els contenidors i alguns dels seus paràmetres bàsics com el mapeig de ports, volums,…
A prometheus he afegit una comanda –storage.tsdb.retention.time=90d perquè vull que les dades es mantinguin durant 90 dies.
A cadvisor, li passem el “dispositiu” /dev/kmsg, que és el bufer de missatges del kernel, d’on cadvisor agafa algunes dades sobre l’estat dels contenidors.
Configuració
Primer de tot hem de crear l’arxiu de configuració de Prometheus, per dir-li d’on ha d’agafar les dades i a on aniran.
El crearem a la ruta que li haguem especificat a l’arxiu de docker compose (en el meu cas /docker/prometheus) i es dirà prometheus.yml, amb el següent contingut:
global:
scrape_interval: 10s
scrape_configs:
- job_name: node
static_configs:
- targets: ['192.168.1.121:9100']
- job_name: cadvisor
static_configs:
- targets: ['192.168.1.121:8080']
Si volguessim guardar les dades en una base de dades, afegiriem un apartat extra remote_write amb paràmetres per l’autenticació.
Ara farem docker compose up -d i entrarem a revisar que el Prometheus estigui bé, és a dir, que funcioni Prometheus com a tal i agafi dades de Node exporter i de cadvisor. Per això obrirem el navegador i accedirem a la interfície web de Prometheus pel port 9090.
Un cop allà, ens dirigirem a Status i Target health per veure que estigui connectat amb els serveis.

Ara entrarem a Grafana per la IP de la màquina i el port 3000.

Entrarem amb les credencials per defecte admin/admin i modificarem la contrasenya (com ens obliga).
Un cop dins, desplegarem el menú de l’esquerra, anirem a connections i farem Add new connection, filtrant per Prometheus.

Seleccionarem Prometheus i a la part de paràmetres posarem la IP de la màquina amb el port 9090 (el que tenim amb Prometheus).

I farem click a Save and Test. Si ha anat bé, hauria d’aparèixer un missatge com aquest:

Ja ho tenim tot llest. Ara falta visualitzar les dades. Per les dashboards, podem crear-les però en aquest tutorial n’agafarem de ja fetes. Buscarem grafana node exporter al navegador i utilitzarem la primera que apareix, aquesta. Per fer-la servir, copiem l’ID:

Tornem al Grafana, creem una dashboard:

I copiarem l’ID de la dashboard:

Donarem un nom i seleccionarem la font de dades (Prometheus, la que hem configurat abans).

I ja ho tenim:

Ja tenim la dashboard feta amb els recursos monitoritzats. Podem editar-la per mostrar el que ens interessi, moure els menús, canviar-ne el format,…
Per fer-ho amb el cadvisor és pràcticament igual, així que no afegiré captures:
Busquem una dashboard i en copiem l’ID, creem la dashboard copiant l’ID i seleccionant Prometheus com a font de dades i creem la dashboard.
La que jo he triat es veu així:

Conclusions
Com hem pogut comprovar, una monitorització d’un servidor bàsica com aquesta no és gaire difícil de fer però ens permet, de manera molt visual, observar moltes dades vitals del nostre sistema perquè qualsevol pugui saber si hi ha algun problema sense necessitat d’entendre-hi gaire.
Òbviament aquesta configuració no està feta per posar en producció, ja que per ser ideal caldria gestionar els usuaris amb accés a Grafana, xifrar el tràfic amb SSL o restringir l’accès a Prometheus.
I fins aquí el post d’avui. Si t’ha semblat útil pots deixar un comentari i compartir-lo. Ens veiem al següent!