Kjør Prometheus, Grafana og Alertmanager
Deploy en monitoring-stack med Docker Compose, samle VPS-metrics, åpne Grafana over SSH og test en alert.
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.