Escriu per cercar…

Monitoring

Prometheus guarda l'historial de mètriques dels teus contenidors i dispara una alerta quan un se'n va de mare; Grafana el dibuixa.

S'ensenya a
Big data aplicatMonitoratge, salut dels serveis i límits de recursosIABD

Introducció

A Recursos vas fer servir docker stats per veure què consumia un contenidor.

shell
docker stats --no-stream --format 'table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}'
NAME               CPU %     MEM USAGE / LIMIT
burner             100.00%   2.91MiB / 11.74GiB

Serveix per mirar, però no per administrar.

docker stats només et diu què passa ara mateix, i les preguntes que et faran mai són sobre ara mateix:

  • «El web anava lent ahir a les tres. Què passava?»
  • «Aquest contenidor sempre ha gastat tanta memòria, o ha crescut aquesta setmana?»
  • «Qui em truca quan un servei es queda sense CPU a les quatre de la matinada?»

Cap de les tres la pot respondre una foto.

Necessites tres coses: algú que prengui mesures cada pocs segons, un lloc on quedin guardades, i una regla que avisi quan una mesura passa d’un límit.

Entorn de treball

Munta-ho amb tres contenidors:

  • cAdvisor mesura els contenidors del host i publica les mesures.
  • Prometheus les va a buscar cada pocs segons i se les guarda.
  • Grafana les dibuixa.

Crea el directori monitoring i, a dins, el fitxer compose.yaml:

yaml
services:
  prometheus:
    image: prom/prometheus:v3.7.3
    ports:
      - 9090:9090
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml
      - ./alerts.yml:/etc/prometheus/alerts.yml

  cadvisor:
    image: gcr.io/cadvisor/cadvisor:v0.52.1
    privileged: true
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - /sys:/sys:ro
      - /var/lib/docker:/var/lib/docker:ro

  grafana:
    image: grafana/grafana:12.3.1
    ports:
      - 3000:3000
    environment:
      GF_SECURITY_ADMIN_PASSWORD: secret

Fixa’t en els volums de cAdvisor: llegeix /sys i el socket de docker del host, en només lectura.

És un contenidor que mira des de dins el que passa a fora, i per això necessita privileged.

Mètriques

Una mètrica és un número que canvia amb el temps, amb un nom i unes etiquetes que diuen de qui és.

Crea prometheus.yml:

yaml
global:
  scrape_interval: 5s

rule_files:
  - alerts.yml

scrape_configs:
  - job_name: prometheus
    static_configs:
      - targets: [localhost:9090]

  - job_name: cadvisor
    static_configs:
      - targets: [cadvisor:8080]

Un scrape és una petició HTTP: cada 5 segons Prometheus demana /metrics a cadascun dels targets i es queda el que li tornen.

Prometheus no espera que ningú li enviï res — va ell a buscar-ho.

Crea també alerts.yml, encara buit de regles però necessari perquè el fitxer existeixi:

yaml
groups: []

Estàs llegint una vista prèvia.

Inicia la sessió amb Google per llegir la pàgina sencera.

Inicia la sessió amb Google

Només et demanarem que acceptis les condicions del servei.