方案架构
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
| Dashboard | ID | 说明 |
|---|---|---|
| Node Exporter Full | 1860 | 主机资源监控 |
| Prometheus Stats | 3662 | Prometheus 自身监控 |
总结
Prometheus 生态提供了完整的监控方案。搭建只是第一步,关键在于定义好 SLI 指标和合理的告警阈值。