本文目录导读:

- 通用核心要素(无论什么系统都适用)
- Prometheus + Alertmanager 配置(开源最常用)
- 云平台监控(阿里云 / 腾讯云 / AWS)
- Grafana 内嵌告警(统一监控界面)
- Zabbix 告警(传统运维)
- 核心最佳实践(避免被告警淹没)
- 快速入门的配置模板
配置告警规则的具体方法取决于你使用的监控系统(Prometheus + Alertmanager、Zabbix、阿里云监控、AWS CloudWatch、Grafana、ELK等)。
由于你没有指定具体平台,我将以目前最流行的 Prometheus + Alertmanager 方案为例,并结合通用的云平台监控(如阿里云/腾讯云)和 Grafana 常见场景,为你提供核心配置思路。
通用核心要素(无论什么系统都适用)
任何告警规则配置,本质上都需要定义以下 5个W:
- What(监控什么):CPU使用率、内存、磁盘、接口延迟、错误日志、API响应码等。
- Condition(触发条件):> 90%、< 10% 、连续 5 次失败、速率变化率 > 50% 等。
- Duration(持续时间):持续 1 分钟 / 5 分钟(避免瞬时抖动误报)。
- Severity(告警级别):P0(致命)、P1(严重)、P2(警告)、P3(通知)。
- Action(通知谁/怎么通知):企业微信、钉钉、邮件、短信、Slack、PagerDuty。
Prometheus + Alertmanager 配置(开源最常用)
这是云原生和K8s环境的标准方案,配置分为两步:
步骤1:编写告警规则文件(Prometheus 端)
在 Prometheus 的配置文件 prometheus.yml 中,通过 rule_files 引入规则文件。/etc/prometheus/rules/alert_rules.yml
示例规则文件 (alert_rules.yml):
groups:
- name: example-alerts
rules:
# 告警1:实例宕机
- alert: InstanceDown
expr: up == 0 # 条件:up指标为0
for: 1m # 条件持续1分钟才告警
labels:
severity: critical # 级别
annotations:
summary: "实例 {{ $labels.instance }} 停止工作"
description: "服务器 {{ $labels.instance }} 已宕机超过1分钟。"
# 告警2:CPU使用率过高
- alert: HighCpuUsage
expr: 100 - (avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 90
for: 5m
labels:
severity: warning
annotations:
summary: "实例 {{ $labels.instance }} CPU 使用率过高"
description: "CPU 使用率已超过 90%(当前值:{{ $value }}%)"
# 告警3:某API接口错误率过高(针对业务)
- alert: HighErrorRate
expr: rate(http_requests_total{status=~"5.."}[5m]) / rate(http_requests_total[5m]) > 0.05
for: 3m
labels:
severity: critical
annotations:
summary: "API 错误率异常"
description: "5xx 错误率超过 5% (当前: {{ $value | humanizePercentage }})"
步骤2:配置路由与接收者(Alertmanager 端)
Alertmanager 负责将上述规则触发的告警发出去。
示例 alertmanager.yml:
global:
resolve_timeout: 5m
route:
receiver: 'default-receiver' # 默认接收者
group_wait: 30s # 同一组告警等待30秒后发送
group_interval: 5m # 同一组告警间隔5分钟重复发送
repeat_interval: 4h # 确认后未解决,每4小时重复一次
# 根据severity路由到不同通道
routes:
- match:
severity: critical
receiver: 'team-ops-pager' # 重要告警发到Pager/电话
- match:
severity: warning
receiver: 'team-wechat' # 一般告警发到企业微信
receivers:
- name: 'default-receiver'
webhook_configs:
- url: 'http://internal-webhook/alert' # 通用Webhook
- name: 'team-ops-pager'
pagerduty_configs:
- routing_key: 'xxx'
- name: 'team-wechat'
webhook_configs:
- url: 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxx'
云平台监控(阿里云 / 腾讯云 / AWS)
如果你使用云厂商的监控服务(如阿里云云监控、AWS CloudWatch),配置方式大同小异,通常是图形界面操作。
以阿里云监控为例:
- 进入:云监控 -> 报警规则。
- 创建:点击“创建报警规则”。
- 配置:
- 关联资源:选择要监控的ECS、RDS、SLB实例。
- 指标:选择(如:CPU使用率、内存使用率、网络流出带宽)。
- 阈值及周期:
- CPU使用率 > 90%
- 持续周期:5个周期(即连续5次数据点都超90%才告警)
- 通知对象:选择报警联系人组、钉钉机器人、Webhook。
- 通知方式:邮件、短信、电话(付费)。
- 生效时间:全天或工作时间。
Grafana 内嵌告警(统一监控界面)
如果你的 Grafana 版本 >= 8.0,可以直接在图表上创建告警。
- 进入:选择一个 Dashboard -> 编辑一个 Panel。
- 配置:切换到 Alert 选项卡。
- 规则:
- Condition:
WHENlast()OFquery(A)IS ABOVE90。 - Evaluate every:每 1m 评估一次。
- For:持续 5m 触发。
- Condition:
- 通知:
- 在 Grafana 的 Alerting -> Contact points 里配置通知渠道(钉钉、Webhook、邮件等)。
- 在规则里选择关联的 Contact point。
Zabbix 告警(传统运维)
Zabbix 的配置核心在 触发器(Trigger)。
- 创建:配置 -> 主机 -> 触发器 -> 创建触发器。
- 名称:
服务器 {HOST.NAME} CPU负载过高。 - 表达式:
{Server:system.cpu.load[all,avg1].last()}>5。 - 级别:严重性(一般、警告、严重、灾难)。
- 然后:在“动作(Action)”里配置发送邮件或执行脚本。
核心最佳实践(避免被告警淹没)
- 规则要“去噪”:
- 加 Duration:
for: 5m比for: 1m好,能过滤掉很多毛刺。 - 设置合理阈值:不要用理论极限值(如CPU 100%),建议留缓冲(如P1: 95%,P2: 80%)。
- 加 Duration:
- 告警要“可路由”:
- 使用标签(Labels)区分:
team: backend、env: prod、severity: critical。 - 让不同级别的告警发给不同的人(或不同渠道)。
- 使用标签(Labels)区分:
- 避免“告警风暴”:
- 分组:将被同一问题引发的告警合并为一条通知(Alertmanager 的
group_by功能)。 - 抑制:如果核心服务宕机,告警通知所有子服务就多余了,应配置抑制规则(Inhibition)。
- 分组:将被同一问题引发的告警合并为一条通知(Alertmanager 的
- 必须设置“恢复通知”:
确保告警恢复后能发一条“已解决”的消息,否则团队会产生“狼来了”心态。
快速入门的配置模板
如果你想快速上手,可以这样试:
- 确定平台:如果是容器/K8s,用 Prometheus(规则文件+Alertmanager);如果是基础设施,用 Zabbix;如果是云原生应用,用 Grafana Alerting。
- 跑通一条规则:先配一个最简单的
服务器Down告警,确保能收到通知。 - 逐步添加:再加 CPU、内存、磁盘、关键业务接口。
- 持续调优:根据收到的误报或漏报,调整阈值和持续时间。
如果你能提供你使用的是哪个具体系统(是阿里云 Web 控制台?还是 Prometheus 的 yaml 文件?还是 Grafana 的界面?),我可以给你更精确的步骤。