
Monitorar servidors amb Prometheus, Node Exporter i Grafana
Laboratori pas a pas: Prometheus i Node Exporter amb Docker Compose, un panell senzill a Grafana amb uptime, disc, CPU i memòria, i les seues alertes.
Per Víctor Piles TemporalSRE i tècnic de sistemesPublicat el 4 min de lectura
En aquest laboratori munte un monitoratge bàsic d’infraestructura: Prometheus recull les mètriques, Node Exporter les exposa a cada màquina i Grafana les mostra en un panell senzill amb alertes. Tot amb Docker Compose, perquè el pugau aixecar en pocs minuts.
En resum: instal·leu Node Exporter a cada màquina que vullgau vigilar (port 9100), apunteu Prometheus a totes des de prometheus.yml (port 9090), afegiu Prometheus com a origen de dades a Grafana i creeu quatre panells: uptime, ús de disc, CPU i memòria. Després, configureu alertes sobre aquests panells perquè us avise abans que el problema arribe als usuaris.
Què és Prometheus?
Prometheus és un programari de monitoratge. Les mètriques que recull ajuden a diagnosticar errors o problemes en els sistemes i les aplicacions que es monitoren.
Què és Node Exporter?
Node Exporter exposa una gran varietat de mètriques del maquinari i del nucli: per exemple, el temps que fa que la instància està engegada (uptime) o l’ús de disc, CPU i memòria.
Laboratori
Instal·lar Grafana
El primer és tindre un espai de Grafana. Si encara no el teniu, seguiu la guia oficial d’instal·lació de Grafana (en anglés).
Configurar Prometheus
Prepareu el fitxer de configuració prometheus.yml i indiqueu totes les instàncies que voleu monitorar:
- Substituïu job_name pel nom de la vostra instància.
- Substituïu targets per l’adreça IP de la instància que voleu monitorar.
- Substituïu replacement pel nom que voleu que aparega a Grafana.
global:
scrape_interval: 1m
scrape_configs:
- job_name: "Instance1"
static_configs:
- targets: ["127.0.0.1:9100"]
relabel_configs:
- source_labels: [__address__]
regex: '.*'
target_label: instance
replacement: 'instance1'
- job_name: "Instance2"
static_configs:
- targets: ["127.0.0.2:9100"]
relabel_configs:
- source_labels: [__address__]
regex: '.*'
target_label: instance
replacement: 'instance2'
Instal·leu Prometheus amb Docker Compose a la instància. El docker-compose.yml ha d’estar a la mateixa carpeta que el fitxer de configuració anterior. Haureu d’obrir el port 9090 de la màquina per acceptar trànsit.
services:
prometheus:
image: prom/prometheus:latest
container_name: prometheus
user: root
restart: unless-stopped
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
- ./prometheus_data:/prometheus
command:
- '--config.file=/etc/prometheus/prometheus.yml'
- '--storage.tsdb.path=/prometheus'
- '--web.console.libraries=/etc/prometheus/console_libraries'
- '--web.console.templates=/etc/prometheus/consoles'
- '--web.enable-lifecycle'
ports:
- 9090:9090
Origen de dades a Grafana
Ara configureu l’origen de dades (data source) al vostre Grafana. Al camp URL escriviu l’endpoint de Prometheus, http://$IP_Address:9090, substituint $IP_Address per l’adreça pública o privada del servidor on teniu Prometheus.

Configurar Node Exporter
Entreu a la màquina que voleu monitorar i instal·leu el servei Node Exporter amb Docker Compose. Haureu d’obrir el port 9100 de la màquina per acceptar trànsit.
services:
node-exporter:
image: prom/node-exporter:latest
container_name: node-exporter
user: root
restart: unless-stopped
volumes:
- /proc:/host/proc:ro
- /sys:/host/sys:ro
- /:/rootfs:ro
command:
- '--path.procfs=/host/proc'
- '--path.rootfs=/rootfs'
- '--path.sysfs=/host/sys'
- '--collector.filesystem.mount-points-exclude=^/(sys|proc|dev|host|etc)($$|/)'
ports:
- 9100:9100
Crear el tauler a Grafana
Creeu un tauler (dashboard) senzill a Grafana per veure les mètriques bàsiques, amb quatre panells. En tots, la llegenda és la mateixa:
{{instance}}
Uptime (dies engegada):
(time() - node_boot_time_seconds) / 86400
Ús de disc (%):
100 - (100 * ((node_filesystem_avail_bytes{mountpoint="/",fstype!="rootfs"}) / (node_filesystem_size_bytes{mountpoint="/",fstype!="rootfs"})))
Ús de CPU (%):
(1 - avg by (instance) (irate(node_cpu_seconds_total{mode="idle"}[10m]))) * 100
Ús de memòria (%):
100 * (1 - ((avg_over_time(node_memory_MemFree_bytes[10m]) + avg_over_time(node_memory_Cached_bytes[10m]) + avg_over_time(node_memory_Buffers_bytes[10m])) / avg_over_time(node_memory_MemTotal_bytes[10m])))
Alertes a Grafana
- Creeu un punt de contacte (contact point) i trieu-ne el tipus: correu, Slack, Discord…
- Entreu als panells que acabeu de crear i configureu una regla d’alerta nova, enviant les notificacions a aquest punt de contacte.
- Configureu a cada alerta els límits que marquen el problema.
Les captures són de quan vaig escriure l’article, amb el sistema d’alertes antic de Grafana; a les versions actuals es configura des d’Alerting, amb regles d’alerta i punts de contacte, però la idea és la mateixa: una condició sobre la consulta del panell i una destinació per a l’avís.


Si voleu anar més enllà d’aquest laboratori, a monitoratge amb Grafana i Prometheus explique com el munte i el mantinc en producció, i a observabilitat com l’amplie amb logs, traces i alertes que no desperten ningú sense motiu. Si voleu que revise el vostre, escriviu-me des de contacte.
Publicat originalment en anglés a Medium.


