LabHub
学习 学习路径 课程

可观测性

用 Alertmanager 把告警送出去

在 LabHub 中继续学习

目标

通过亲手发送告警,确认 Prometheus 生成的告警经过 Alertmanager 后, 如何被分流、分组和抑制。

为什么重要

告警设计有两个失败方向:告警太多,以至于无人查看;或者没有告警,导致错过故障。 两者都会产生相同结果——告警失去信任。

因此需要路由、分组和抑制。当一个根因产生二十条告警时, 人不会逐条阅读全部二十条。一个抑制规则就能把它们减少为一条。

步骤

  1. 启动 Alertmanager
  2. 按 severity 划分路由 → /etc/alertmanager.yml
  3. 定义两个 receiver
  4. 设置 critical 抑制 warning 的规则
  5. 使用 amtool check-config 检查并应用
  6. 使用 amtool alert add 直接推送告警
  7. 尝试设置 silence
  8. 为告警添加 runbook 链接

参考

启动 Alertmanager

启动 Alertmanager

使用 lab-start-alertmanager 启动。lab-status 中 9093 应显示为 [O]。Prometheus 配置中已经设定了 alertmanagers 目标。

编写路由树

按 severity 划分路由 → /etc/alertmanager.yml

修改 /etc/alertmanager.yml。在 route 下通过 routes 将 severity=critical 和 severity=warning 分开,发送到不同的 receiver。critical 的 group_wait 设置得短一些,warning 设置得长一些——这样可以优先通知紧急事项。

定义两个 receiver

定义两个 receiver

在 receivers 列表中至少放置两个 receiver。不需要真实的发送目的地——只有名称的 receiver 也是有效配置。这里学习的不是“发送到哪里”,而是“根据什么进行分流”。

抑制规则

设置 critical 抑制 warning 的规则

添加 inhibit_rules。当同一目标触发 critical 时,抑制 warning。需要 source_matchers、target_matchers、equal 三项;equal 定义了什么是“同一目标”——如果遗漏它,无关告警也会被一并压制。

检查配置

使用 amtool check-config 检查并应用

使用 amtool check-config /etc/alertmanager.yml 检查。通过后,重新启动 Alertmanager(pkill alertmanager; lab-start-alertmanager)以应用配置。

直接推送一条告警

使用 amtool alert add 直接推送告警

使用 amtool 创建一条告警:amtool alert add TestAlert severity=critical service=shop-api。然后用 amtool alert 确认是否已经到达。

设置 silence

尝试设置 silence

使用 amtool silence add alertname=TestAlert -d 1h -c '점검 중' 暂时将其静默。通过 amtool silence query 进行确认。维护期间使用 silence 而不是关闭告警,维护结束后告警会自动恢复——不会发生关闭后忘记重新开启的事故。

为告警添加 runbook 链接

为告警添加 runbook 链接

在 /etc/prometheus/rules/slo.yml 的告警中添加 annotations.runbook_url。凌晨 3 点被叫醒的人需要的不是“出了什么问题”,而是“应该做什么”。使用 promtool 检查后再 reload。