Monitor Docker Container ด้วย Prometheus และ Grafana
ทำไมต้อง Monitor Docker?
การติดตาม Container Health, CPU, Memory และ Network ช่วยให้รู้ปัญหาก่อนที่ User จะได้รับผลกระทบ Prometheus เป็นเครื่องเก็บ Metrics และ Grafana เป็นเครื่องแสดง Dashboard
สถาปัตยกรรม Monitoring Stack
Prometheus ← scrape metrics ← cAdvisor (Docker Container metrics)
↓
Grafana Dashboard
↓
Alertmanager (Alert)
docker-compose.yml
version: '3.8'
services:
prometheus:
image: prom/prometheus:latest
container_name: prometheus
restart: unless-stopped
ports:
- "9090:9090"
volumes:
- ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
- prometheus_data:/prometheus
command:
- '--config.file=/etc/prometheus/prometheus.yml'
- '--storage.tsdb.retention.time=15d'
grafana:
image: grafana/grafana:latest
container_name: grafana
restart: unless-stopped
ports:
- "3000:3000"
environment:
GF_SECURITY_ADMIN_PASSWORD: admin123
GF_USERS_ALLOW_SIGN_UP: "false"
volumes:
- grafana_data:/var/lib/grafana
depends_on:
- prometheus
cadvisor:
image: gcr.io/cadvisor/cadvisor:latest
container_name: cadvisor
restart: unless-stopped
ports:
- "8080:8080"
volumes:
- /:/rootfs:ro
- /var/run:/var/run:ro
- /sys:/sys:ro
- /var/lib/docker/:/var/lib/docker:ro
- /dev/disk/:/dev/disk:ro
privileged: true
node-exporter:
image: prom/node-exporter:latest
container_name: node_exporter
restart: unless-stopped
ports:
- "9100:9100"
volumes:
- /proc:/host/proc:ro
- /sys:/host/sys:ro
- /:/rootfs:ro
command:
- '--path.procfs=/host/proc'
- '--path.sysfs=/host/sys'
volumes:
prometheus_data:
grafana_data:
prometheus.yml
global:
scrape_interval: 15s
evaluation_interval: 15s
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
- job_name: 'cadvisor'
static_configs:
- targets: ['cadvisor:8080']
- job_name: 'node'
static_configs:
- targets: ['node-exporter:9100']
ตั้งค่า Grafana Dashboard
- เข้า Grafana ที่
http://server:3000(admin/admin123) - Configuration → Data Sources → Add Prometheus (
http://prometheus:9090) - Import Dashboard ID 193 (Docker cAdvisor) หรือ 1860 (Node Exporter Full)
Metrics ที่น่าติดตาม
| Metric | ความหมาย |
|---|---|
| container_cpu_usage_seconds_total | CPU ใช้สะสม |
| container_memory_usage_bytes | Memory ที่ใช้อยู่ |
| container_network_receive_bytes_total | Network รับเข้า |
| container_fs_usage_bytes | Disk usage |
ตั้ง Alert ด้วย Alertmanager
version: '3.8'
services:
alertmanager:
image: prom/alertmanager:latest
container_name: alertmanager
restart: unless-stopped
ports:
- "9093:9093"
volumes:
- ./alertmanager/alertmanager.yml:/etc/alertmanager/alertmanager.yml
สรุป
Prometheus + Grafana + cAdvisor เป็น Monitoring Stack ที่นิยมที่สุดสำหรับ Docker ติดตั้งได้ง่ายด้วย Docker Compose อย่างเดียว