不需要一整套告警体系,只要能在服务出问题前收到一条消息就够了。这是一份刻意保持精简的监控方案。
要监控什么
只盯四个指标,覆盖 95% 的实际故障:
| 指标 | 含义 | 危险线 |
|---|---|---|
up | 目标是否可达 | 等于 0 |
| 磁盘使用率 | 写满就全线崩溃 | 85% |
| 内存可用 | 影响 OOM | 低于 10% |
| 站点响应时间 | 用户体验 | 超过 3 秒 |
部署
services:
prometheus:
image: prom/prometheus:latest
restart: unless-stopped
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml:ro
- ./data:/prometheus
ports:
- "127.0.0.1:9090:9090"
node-exporter:
image: prom/node-exporter:latest
restart: unless-stopped
pid: host
volumes:
- /:/host:ro,rslave
command:
- --path.rootfs=/host
ports:
- "127.0.0.1:9100:9100"prometheus.yml:
global:
scrape_interval: 30s
rule_files:
- /etc/prometheus/alerts.yml
alerting:
alertmanagers:
- static_configs:
- targets: ['alertmanager:9093']
scrape_configs:
- job_name: node
static_configs:
- targets: ['node-exporter:9100']告警规则
groups:
- name: basic
rules:
- alert: InstanceDown
expr: up == 0
for: 2m
labels: { severity: critical }
annotations:
summary: "{{ $labels.instance }} 已失联 2 分钟"
- alert: DiskAlmostFull
expr: (1 - node_filesystem_avail_bytes{mountpoint="/"} / node_filesystem_size_bytes{mountpoint="/"}) > 0.85
for: 10m
labels: { severity: warning }
annotations:
summary: "根分区使用率超过 85%"for: 2m 是必要的:它避免网络抖动导致的抖动式误报,只有持续满足条件才真正告警。
通知渠道
Alertmanager 支持邮件、钉钉、企业微信、Telegram 等。以邮件为例,配置里最关键的是 group_wait 与 repeat_interval——前者避免同一故障在几秒内连发多条,后者决定未恢复时的重复提醒频率。
建议设成 repeat_interval: 4h,否则半夜会被同一条告警反复吵醒。
小结
Prometheus 本身不复杂,容易被做复杂的是告警规则。先用四条规则跑一个月,根据实际误报再去调阈值,比一开始就写几十条规则要有效得多。