方案架构

Exporter → Prometheus(存储) → Grafana(可视化)
              Alertmanager(告警分发)

Docker Compose 部署

version: '3.8'

services:
  prometheus:
    image: prom/prometheus:v2.52.0
    ports: ["9090:9090"]
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml
      - ./rules:/etc/prometheus/rules
      - prom_data:/prometheus
    command:
      - '--storage.tsdb.retention.time=30d'
    restart: unless-stopped

  grafana:
    image: grafana/grafana:10.4.2
    ports: ["3000:3000"]
    volumes: [grafana_data:/var/lib/grafana]
    restart: unless-stopped

  alertmanager:
    image: prom/alertmanager:v0.27.0
    ports: ["9093:9093"]
    volumes: [./alertmanager.yml:/etc/alertmanager/config.yml]
    restart: unless-stopped

  node-exporter:
    image: prom/node-exporter:v1.8.1
    ports: ["9100:9100"]
    restart: unless-stopped

volumes:
  prom_data:
  grafana_data:

核心配置

# prometheus.yml
global:
  scrape_interval: 15s
  evaluation_interval: 15s

rule_files:
  - "rules/*.yml"

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

scrape_configs:
  - job_name: 'node'
    static_configs:
      - targets: ['node-exporter:9100']

常用 PromQL

# CPU 使用率
100 - (avg(rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)

# 内存使用率
(node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes) / node_memory_MemTotal_bytes * 100

# 磁盘使用率
(node_filesystem_size_bytes - node_filesystem_avail_bytes) / node_filesystem_size_bytes * 100

告警规则示例

groups:
  - name: host-alerts
    rules:
      - alert: HighCPU
        expr: 100 - (avg(rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 80
        for: 5m
        labels:
          severity: warning
        annotations:
          summary: "CPU 使用率过高 ({{ $labels.instance }})"

Grafana 推荐 Dashboard

DashboardID说明
Node Exporter Full1860主机资源监控
Prometheus Stats3662Prometheus 自身监控

总结

Prometheus 生态提供了完整的监控方案。搭建只是第一步,关键在于定义好 SLI 指标和合理的告警阈值。