← Tilbake til dokumentasjon
Middels

Kjør Prometheus, Grafana og Alertmanager

Deploy en monitoring-stack med Docker Compose, samle VPS-metrics, åpne Grafana over SSH og test en alert.

prometheusgrafanaalertmanagermonitoringdocker

Denne guiden kjører Prometheus, Grafana, node_exporter og Alertmanager med Docker Compose. Webgrensesnittene bindes til loopback og åpnes gjennom en SSH-tunnel. node_exporter binder seg til port 9100 på verten, så brannmuren må blokkere offentlig tilgang til denne porten.

Før du starter

  • En Ubuntu 26.04-VPS der Docker-guiden er fullført
  • En faktisk Alertmanager receiver, for eksempel en privat webhook eller støttet varslingstjeneste
  • Nok storage til retention-perioden du velger

Versjonene nedenfor ble gjennomgått 23. september 2026. Les upstream release notes og oppdater kontrollert.

Opprett prosjektet

sudo install -d -m 0755 -o "$USER" -g "$USER" /opt/monitoring/{prometheus/rules,alertmanager}
cd /opt/monitoring

Opprett .env, velg et langt og unikt passord, og kjør chmod 600 .env:

GRAFANA_ADMIN_PASSWORD=replace-with-a-long-password

Opprett compose.yaml:

services:
  prometheus:
    image: prom/prometheus:v3.14.0
    restart: unless-stopped
    command:
      - --config.file=/etc/prometheus/prometheus.yml
      - --storage.tsdb.path=/prometheus
      - --storage.tsdb.retention.time=15d
    ports: ["127.0.0.1:9090:9090"]
    extra_hosts:
      - host.docker.internal:host-gateway
    networks: [monitoring]
    volumes:
      - ./prometheus:/etc/prometheus:ro
      - prometheus-data:/prometheus

  alertmanager:
    image: prom/alertmanager:v0.34.1
    restart: unless-stopped
    ports: ["127.0.0.1:9093:9093"]
    networks: [monitoring]
    volumes:
      - ./alertmanager:/etc/alertmanager:ro
      - alertmanager-data:/alertmanager
    secrets:
      - alertmanager_webhook_url

  grafana:
    image: grafana/grafana:13.2.2
    restart: unless-stopped
    environment:
      GF_SECURITY_ADMIN_PASSWORD: ${GRAFANA_ADMIN_PASSWORD}
      GF_USERS_ALLOW_SIGN_UP: "false"
    ports: ["127.0.0.1:3000:3000"]
    networks: [monitoring]
    volumes:
      - grafana-data:/var/lib/grafana

  node-exporter:
    image: prom/node-exporter:v1.12.1
    restart: unless-stopped
    command: ["--path.rootfs=/host"]
    network_mode: host
    pid: host
    volumes:
      - /:/host:ro,rslave

networks:
  monitoring:

volumes:
  prometheus-data:
  alertmanager-data:
  grafana-data:

secrets:
  alertmanager_webhook_url:
    file: ./alertmanager/webhook-url

Konfigurer Prometheus

Opprett prometheus/prometheus.yml:

global:
  scrape_interval: 30s
  evaluation_interval: 30s

alerting:
  alertmanagers:
    - static_configs:
        - targets: [alertmanager:9093]

rule_files:
  - /etc/prometheus/rules/*.yml

scrape_configs:
  - job_name: prometheus
    static_configs:
      - targets: [localhost:9090]
  - job_name: node
    static_configs:
      - targets: [host.docker.internal:9100]

Opprett prometheus/rules/node.yml:

groups:
  - name: node
    rules:
      - alert: NodeExporterDown
        expr: up{job="node"} == 0
        for: 2m
        labels:
          severity: critical
        annotations:
          summary: node_exporter is unavailable

Konfigurer Alertmanager

Opprett alertmanager/webhook-url med bare URL-en til den private mottakeren. Alertmanager-imaget kjører som UID 65534 (nobody), så gi denne UID-en eierskap og hold filen privat:

nano alertmanager/webhook-url
chmod 600 .env alertmanager/webhook-url
sudo chown 65534:65534 alertmanager/webhook-url

Docker Compose bind-monterer filbaserte secrets, så containeren må kunne lese filen på verten. Ved senere endringer bruker du sudoedit og gjenoppretter eierskap til UID 65534 og modus 600. Opprett alertmanager/alertmanager.yml med url_file, slik at URL-en ikke lagres i config-filen som må være lesbar for andre brukere:

route:
  receiver: operations
  group_wait: 30s
  group_interval: 5m
  repeat_interval: 4h

receivers:
  - name: operations
    webhook_configs:
      - url_file: /run/secrets/alertmanager_webhook_url
        send_resolved: true

Prometheus og Alertmanager kjører uten root-rettigheter. De må kunne traversere de bind-mountede katalogene og lese YAML-filene. Katalogene ovenfor bruker derfor modus 755. Behold modus 644 på config-filene, som ikke inneholder credentials:

chmod 644 compose.yaml prometheus/prometheus.yml prometheus/rules/node.yml alertmanager/alertmanager.yml

Start og valider

sudo docker compose config --quiet
sudo docker compose up -d
sudo docker compose ps
sudo docker compose exec prometheus promtool check config /etc/prometheus/prometheus.yml
sudo docker compose exec prometheus promtool check rules /etc/prometheus/rules/node.yml
sudo docker compose exec alertmanager amtool check-config /etc/alertmanager/alertmanager.yml
sudo docker compose exec alertmanager sh -c 'test -r /run/secrets/alertmanager_webhook_url'
curl --fail http://127.0.0.1:9090/-/ready
curl --fail 'http://127.0.0.1:9090/api/v1/query?query=up%7Bjob%3D%22node%22%7D'

Den siste spørringen skal returnere verdien 1. Hvis ikke, sjekk sudo docker compose logs node-exporter prometheus.

node_exporter bruker vertens nettverks- og PID-namespace, slik upstream anbefaler for overvåking av verten. Som standard lytter den på alle vertens nettverksgrensesnitt på port 9100. Prometheus når tjenesten gjennom Dockers host-gateway-mapping. Sjekk sudo ufw status numbered for regler som gir offentlig tilgang til 9100, og test porten fra en annen maskin. Hold den stengt mot internett.

Åpne Grafana over SSH

Kjør dette på din egen maskin:

ssh -L 3000:127.0.0.1:3000 USER@SERVER_IP

Åpne http://127.0.0.1:3000, logg inn som admin med passordet fra .env, og legg til http://prometheus:9090 som Prometheus data source. Lag eller importer et dashboard for CPU, minne, filesystem og nettverk.

Test alert-flyten

Stopp node_exporter midlertidig:

sudo docker compose stop node-exporter

Etter to evalueringsminutter skal NodeExporterDown være firing i Prometheus, vises i Alertmanager og nå receiveren. Start node_exporter igjen og sjekk at alerten resolves:

sudo docker compose start node-exporter

Drift av stacken

  • Sett opp alert på diskbruk før monitoring-disken blir full.
  • Ta backup av Compose-filene, rules, receiver-config og Grafana-volume.
  • Test restore av Grafana-config og dashboards.
  • Les release notes før du oppdaterer images.
  • Hold port 3000, 9090, 9093 og 9100 stengt offentlig med mindre de ligger bak en autentisert reverse proxy med en tydelig access policy.

Se egen overvåking på VPS for valg av serverstørrelse og driftsansvar.

Kilder: Prometheus config, Alertmanager config, node_exporter og Grafana Prometheus data source.