告警规则怎么配置?

wen python案例 1

本文目录导读:

告警规则怎么配置?

  1. 通用核心要素(无论什么系统都适用)
  2. Prometheus + Alertmanager 配置(开源最常用)
  3. 云平台监控(阿里云 / 腾讯云 / AWS)
  4. Grafana 内嵌告警(统一监控界面)
  5. Zabbix 告警(传统运维)
  6. 核心最佳实践(避免被告警淹没)
  7. 快速入门的配置模板

配置告警规则的具体方法取决于你使用的监控系统(Prometheus + Alertmanager、Zabbix、阿里云监控、AWS CloudWatch、Grafana、ELK等)。

由于你没有指定具体平台,我将以目前最流行的 Prometheus + Alertmanager 方案为例,并结合通用的云平台监控(如阿里云/腾讯云)和 Grafana 常见场景,为你提供核心配置思路。


通用核心要素(无论什么系统都适用)

任何告警规则配置,本质上都需要定义以下 5个W

  1. What(监控什么):CPU使用率、内存、磁盘、接口延迟、错误日志、API响应码等。
  2. Condition(触发条件):> 90%、< 10% 、连续 5 次失败、速率变化率 > 50% 等。
  3. Duration(持续时间):持续 1 分钟 / 5 分钟(避免瞬时抖动误报)。
  4. Severity(告警级别):P0(致命)、P1(严重)、P2(警告)、P3(通知)。
  5. 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),配置方式大同小异,通常是图形界面操作

以阿里云监控为例:

  1. 进入:云监控 -> 报警规则。
  2. 创建:点击“创建报警规则”。
  3. 配置
    • 关联资源:选择要监控的ECS、RDS、SLB实例。
    • 指标:选择(如:CPU使用率、内存使用率、网络流出带宽)。
    • 阈值及周期
      • CPU使用率 > 90%
      • 持续周期:5个周期(即连续5次数据点都超90%才告警)
    • 通知对象:选择报警联系人组、钉钉机器人、Webhook。
    • 通知方式:邮件、短信、电话(付费)。
    • 生效时间:全天或工作时间。

Grafana 内嵌告警(统一监控界面)

如果你的 Grafana 版本 >= 8.0,可以直接在图表上创建告警。

  1. 进入:选择一个 Dashboard -> 编辑一个 Panel。
  2. 配置:切换到 Alert 选项卡。
  3. 规则
    • ConditionWHEN last() OF query(A) IS ABOVE 90。
    • Evaluate every:每 1m 评估一次。
    • For:持续 5m 触发。
  4. 通知
    • 在 Grafana 的 Alerting -> Contact points 里配置通知渠道(钉钉、Webhook、邮件等)。
    • 在规则里选择关联的 Contact point。

Zabbix 告警(传统运维)

Zabbix 的配置核心在 触发器(Trigger)

  1. 创建:配置 -> 主机 -> 触发器 -> 创建触发器。
  2. 名称服务器 {HOST.NAME} CPU负载过高
  3. 表达式{Server:system.cpu.load[all,avg1].last()}>5
  4. 级别:严重性(一般、警告、严重、灾难)。
  5. 然后:在“动作(Action)”里配置发送邮件或执行脚本。

核心最佳实践(避免被告警淹没)

  1. 规则要“去噪”
    • 加 Durationfor: 5mfor: 1m 好,能过滤掉很多毛刺。
    • 设置合理阈值:不要用理论极限值(如CPU 100%),建议留缓冲(如P1: 95%,P2: 80%)。
  2. 告警要“可路由”
    • 使用标签(Labels)区分:team: backendenv: prodseverity: critical
    • 让不同级别的告警发给不同的人(或不同渠道)。
  3. 避免“告警风暴”
    • 分组:将被同一问题引发的告警合并为一条通知(Alertmanager 的 group_by 功能)。
    • 抑制:如果核心服务宕机,告警通知所有子服务就多余了,应配置抑制规则(Inhibition)。
  4. 必须设置“恢复通知”

    确保告警恢复后能发一条“已解决”的消息,否则团队会产生“狼来了”心态。

快速入门的配置模板

如果你想快速上手,可以这样试:

  1. 确定平台:如果是容器/K8s,用 Prometheus(规则文件+Alertmanager);如果是基础设施,用 Zabbix;如果是云原生应用,用 Grafana Alerting
  2. 跑通一条规则:先配一个最简单的 服务器Down 告警,确保能收到通知。
  3. 逐步添加:再加 CPU、内存、磁盘、关键业务接口。
  4. 持续调优:根据收到的误报或漏报,调整阈值和持续时间。

如果你能提供你使用的是哪个具体系统(是阿里云 Web 控制台?还是 Prometheus 的 yaml 文件?还是 Grafana 的界面?),我可以给你更精确的步骤。

抱歉,评论功能暂时关闭!