Docker

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

  1. เข้า Grafana ที่ http://server:3000 (admin/admin123)
  2. Configuration → Data Sources → Add Prometheus (http://prometheus:9090)
  3. 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 อย่างเดียว