Een Complete DevOps Monitoring Stack Opzetten
Leer hoe je een robuuste monitoring stack bouwt met Prometheus, Grafana en alerting voor production workloads.
Jean-Pierre Broeders
Freelance DevOps Engineer
Een Complete DevOps Monitoring Stack Opzetten
Monitoring is het zenuwstelsel van je infrastructure. Zonder goede observability vlieg je blind en ontdek je problemen pas wanneer gebruikers al klagen. In deze post laat ik zien hoe je een professionele monitoring stack opzet die je real-time inzicht geeft in je systemen.
Waarom Monitoring Essentieel Is
Production systemen zijn complex. Applicaties crashen, disks raken vol, databases worden traag, en netwerk connections timeout. Goede monitoring helpt je:
- Problemen vroegtijdig detecteren voordat ze impact hebben
- Root cause analysis sneller uitvoeren
- Trends identificeren die wijzen op toekomstige problemen
- SLA's handhaven met concrete metrics
De Stack: Prometheus + Grafana + Alertmanager
De meest populaire open-source monitoring stack bestaat uit:
- Prometheus: Time-series database en metrics collector
- Grafana: Dashboarding en visualisatie
- Alertmanager: Intelligent alert routing en grouping
- Node Exporter: Systeem metrics (CPU, RAM, disk)
- cAdvisor: Container metrics
Opzetten met Docker Compose
Hier is een production-ready setup:
version: '3.8'
services:
prometheus:
image: prom/prometheus:latest
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
- prometheus-data:/prometheus
command:
- '--config.file=/etc/prometheus/prometheus.yml'
- '--storage.tsdb.retention.time=30d'
ports:
- "9090:9090"
restart: unless-stopped
grafana:
image: grafana/grafana:latest
volumes:
- grafana-data:/var/lib/grafana
- ./grafana/dashboards:/etc/grafana/provisioning/dashboards
- ./grafana/datasources:/etc/grafana/provisioning/datasources
environment:
- GF_SECURITY_ADMIN_PASSWORD=changeme
- GF_USERS_ALLOW_SIGN_UP=false
ports:
- "3000:3000"
restart: unless-stopped
alertmanager:
image: prom/alertmanager:latest
volumes:
- ./alertmanager.yml:/etc/alertmanager/alertmanager.yml
ports:
- "9093:9093"
restart: unless-stopped
node-exporter:
image: prom/node-exporter:latest
command:
- '--path.rootfs=/host'
volumes:
- '/:/host:ro,rslave'
ports:
- "9100:9100"
restart: unless-stopped
cadvisor:
image: gcr.io/cadvisor/cadvisor:latest
volumes:
- /:/rootfs:ro
- /var/run:/var/run:ro
- /sys:/sys:ro
- /var/lib/docker/:/var/lib/docker:ro
ports:
- "8080:8080"
restart: unless-stopped
volumes:
prometheus-data:
grafana-data:
Prometheus Configuratie
Maak prometheus.yml met je scrape targets:
global:
scrape_interval: 15s
evaluation_interval: 15s
alerting:
alertmanagers:
- static_configs:
- targets: ['alertmanager:9093']
rule_files:
- "alerts.yml"
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
- job_name: 'node'
static_configs:
- targets: ['node-exporter:9100']
- job_name: 'cadvisor'
static_configs:
- targets: ['cadvisor:8080']
Alert Rules Configureren
Maak alerts.yml voor kritieke situaties:
groups:
- name: system_alerts
interval: 30s
rules:
- alert: HighCPUUsage
expr: 100 - (avg by(instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 80
for: 5m
labels:
severity: warning
annotations:
summary: "High CPU usage detected"
description: "CPU usage is above 80% for 5 minutes on {{ $labels.instance }}"
- alert: DiskSpaceLow
expr: (node_filesystem_avail_bytes / node_filesystem_size_bytes) * 100 < 10
for: 5m
labels:
severity: critical
annotations:
summary: "Disk space critically low"
description: "Only {{ $value }}% disk space remaining on {{ $labels.instance }}"
- alert: ServiceDown
expr: up == 0
for: 2m
labels:
severity: critical
annotations:
summary: "Service is down"
description: "{{ $labels.job }} on {{ $labels.instance }} has been down for 2 minutes"
Alertmanager Setup
Configureer alertmanager.yml voor notificaties:
global:
resolve_timeout: 5m
route:
group_by: ['alertname', 'cluster']
group_wait: 10s
group_interval: 10s
repeat_interval: 12h
receiver: 'default'
receivers:
- name: 'default'
webhook_configs:
- url: 'http://your-webhook-endpoint'
send_resolved: true
Grafana Dashboards
Na het opstarten van de stack:
- Open http://localhost:3000
- Login met admin/changeme
- Voeg Prometheus toe als datasource (http://prometheus:9090)
- Import community dashboards:
- Node Exporter Full (ID: 1860)
- Docker Container & Host Metrics (ID: 179)
Best Practices
Retention instellen: Bewaar metrics niet eindeloos. 30 dagen is vaak voldoende voor troubleshooting.
Labeling strategie: Gebruik consistente labels zoals environment, service, instance voor betere filtering.
Alert fatigue voorkomen: Te veel alerts = geen alerts. Focus op actionable warnings.
Dashboard per service: Maak dedicated dashboards voor elke applicatie met relevante metrics.
Backup je configuratie: Prometheus data is vervangbaar, maar je dashboards en alerts niet.
Conclusie
Een goede monitoring stack is niet optioneel voor production workloads. Met Prometheus en Grafana bouw je in een middag een professioneel systeem dat je waarschuwt voor problemen en inzicht geeft in je infrastructure. Start simpel, voeg incremental metrics toe, en verfijn je alerts op basis van ervaring.
English summary: This article explains how to build a complete DevOps monitoring stack using Prometheus, Grafana, and Alertmanager. It covers Docker Compose setup, alert configuration, and best practices for production observability.
