Monitorització bàsica amb Grafana, Prometheus, Node Exporter i cAdvisor

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.

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 és el programa que agafarà i emmagatzemarà les dades dels exportadors Node Exporter i cAdvisor.

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.

Farem un arxiu docker-compose.yaml amb el següent contingut:

docker

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.

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:

yaml

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í:

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!