3. 告警路由基础:什么是告警路由、Loki与Alertmanager的集成方式
3.1 告警路由的核心概念
在可观测性体系中,告警路由是指将产生的告警事件根据预定义的规则(如标签、严重级别、来源)分发到不同接收端(如邮件、PagerDuty、Slack)的机制。它解决了“告警风暴”和“通知混乱”两大痛点,确保正确的告警在正确的时间到达正确的人。
告警路由的核心组件包括:
- 告警源:产生告警的系统,如Loki、Prometheus、Grafana。
- 路由引擎:根据标签匹配规则决定告警去向的中间件,典型代表为Alertmanager。
- 接收器:最终接收告警通知的渠道,如邮件、即时通讯、工单系统。
关键原则:告警路由应遵循“先宽后窄”的匹配策略——先定义通用路由(匹配所有告警),再定义特定路由(匹配高优先级或特定标签的告警),避免告警丢失。
3.2 Loki与Alertmanager的集成架构
Loki本身不直接发送告警通知,而是通过Ruler组件评估告警规则,并将触发的告警推送到Alertmanager。Alertmanager负责去重、分组、抑制和路由分发。下图展示了完整的集成链路:
3.3 告警路由的匹配机制
Alertmanager 的路由配置采用树形结构,每个路由节点包含一组匹配规则和子路由。告警进入后,从根路由开始逐级匹配,直到找到第一个匹配的叶子节点。匹配依据是告警的标签键值对。
| 路由属性 | 说明 | 示例 |
|---|---|---|
receiver |
匹配成功后使用的接收器名称 | receiver: "team-alert-email" |
match |
精确匹配标签(所有标签必须完全匹配) | match: { severity: "critical" } |
match_re |
正则匹配标签值 | match_re: { service: "web-.*" } |
continue |
匹配后是否继续向子路由传递 | continue: true |
group_by |
分组聚合的标签列表 | group_by: ['cluster', 'alertname'] |
路由匹配优先级:Alertmanager 按配置顺序从上到下评估路由。第一个匹配的路由节点生效,除非该节点设置了
continue: true,此时告警会继续匹配同级或子路由。建议将最具体的路由放在前面,通用路由放在末尾。
3.4 集成配置示例
以下是一个完整的 Loki Ruler 与 Alertmanager 集成配置片段:
# Loki Ruler 配置 (loki.yaml)
ruler:
storage:
type: local
local:
directory: /etc/loki/rules
rule_path: /tmp/loki/rules
alertmanager_url: http://alertmanager:9093
external_url: http://loki:3100
external_labels:
source: loki
env: production
# Alertmanager 路由配置 (alertmanager.yml)
route:
receiver: 'default-receiver'
group_wait: 30s
group_interval: 5m
repeat_interval: 4h
routes:
- match:
severity: critical
receiver: 'pagerduty-critical'
group_wait: 10s
repeat_interval: 1h
- match_re:
service: 'api-.*'
receiver: 'slack-api-team'
group_by: ['service', 'alertname']
receivers:
- name: 'default-receiver'
email_configs:
- to: 'ops@example.com'
- name: 'pagerduty-critical'
pagerduty_configs:
- routing_key: 'YOUR_PD_KEY'
- name: 'slack-api-team'
slack_configs:
- api_url: 'https://hooks.slack.com/services/xxx'
channel: '#api-alerts'
3.5 路由策略对比
不同的路由策略适用于不同的运维场景,下表对比了三种常见策略:
| 策略类型 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
| 扁平路由 | 小团队、告警量少 | 配置简单,易于维护 | 无法精细控制,容易产生告警疲劳 |
| 层级路由 | 多团队、多环境 | 隔离性好,告警精准送达 | 配置复杂,调试困难 |
| 动态路由 | 大规模、标签动态变化 | 灵活适应业务变化 | 依赖标签规范,正则性能开销大 |
3.6 集成验证与常见问题
完成配置后,建议按以下步骤验证集成是否正常:
- 检查 Loki Ruler 日志:确认 Ruler 能正常连接到 Alertmanager,无连接超时或拒绝连接错误。
- 触发测试告警:在 Loki 中写入一条匹配告警规则的日志,等待评估周期触发。
- 查看 Alertmanager UI:访问
http://alertmanager:9093,确认告警是否到达并被正确分组。 - 验证通知送达:检查配置的接收器(如邮箱、Slack)是否收到告警通知。
常见陷阱:
- Loki Ruler 的
alertmanager_url必须使用 Alertmanager 可访问的地址,避免使用 localhost。 - 告警标签必须与路由匹配规则完全一致,大小写敏感。
- 如果告警未到达,优先检查 Ruler 的
external_labels是否与路由匹配规则冲突。