Salta al contingut
Portàtil amb un panell de monitoratge amb gràfiques d'ús i mètriques

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:

  1. Substituïu job_name pel nom de la vostra instància.
  2. Substituïu targets per l’adreça IP de la instància que voleu monitorar.
  3. 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.

Formulari de Grafana per crear un origen de dades anomenat Prometheus, amb el camp URL i l'accés de tipus servidor
Origen de dades de Prometheus a Grafana

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

  1. Creeu un punt de contacte (contact point) i trieu-ne el tipus: correu, Slack, Discord…
  2. Entreu als panells que acabeu de crear i configureu una regla d’alerta nova, enviant les notificacions a aquest punt de contacte.
  3. 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.

Regla d'alerta de Grafana anomenada Uptime metrics que salta quan la consulta no retorna valors, avaluada cada 10 segons
Alerta sobre l'uptime: avisa si la màquina deixa d'enviar dades
Regla d'alerta de Grafana anomenada Disk Usage metrics que salta quan l'ús mitjà de disc supera el 60 %
Alerta sobre l'ús de disc: avisa en superar el 60 %

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.

Tornar al blog

Expliqueu-nos el vostre cas

En una trucada gratuïta de 20 minuts veiem on sou i per on començar. Sense compromís.

Reservar una trucada de 20 minuts
WhatsApp