告警路由树配置
在 Prometheus 中,告警路由树(Alert Routing Tree)是 Alertmanager 的核心功能之一。它允许你根据告警的标签(labels)和条件,将告警路由到不同的接收者(如邮件、Slack、PagerDuty 等)。通过合理配置告警路由树,你可以确保告警信息能够及时、准确地传达给相关团队或个人。
什么是告警路由树?
告警路由树是一种树状结构,用于定义告警的路由规则。每个节点(route)可以包含多个子节点,形成一个树状结构。每个节点可以定义匹配条件(match、match_re)和接收者(receiver)。当告警触发时,Alertmanager 会根据路由树的配置,从上到下匹配告警的标签,并将告警发送到匹配的接收者。
基本配置
以下是一个简单的告警路由树配置示例:
yaml
route:
receiver: 'default-receiver'
group_by: ['alertname', 'job']
routes:
- match:
severity: 'critical'
receiver: 'critical-receiver'
- match_re:
service: 'web|database'
receiver: 'web-db-receiver'
routes:
- match:
severity: 'warning'
receiver: 'web-db-warning-receiver'
在这个配置中:
receiver: 'default-receiver'
是默认的接收者,如果告警不匹配任何路由规则,则会发送到这个接收者。group_by: ['alertname', 'job']
表示告警会根据alertname
和job
标签进行分组。routes
是路由规则的列表,每个规则可以包含match
或match_re
来匹配告警的标签。
路由匹配规则
match
和 match_re
match
:用于精确匹配告警的标签。例如,severity: 'critical'
表示只有当severity
标签的值为critical
时,才会匹配该路由。match_re
:用于正则表达式匹配告警的标签。例如,service: 'web|database'
表示当service
标签的值为web
或database
时,才会匹配该路由。
嵌套路由
路由规则可以嵌套,形成树状结构。例如:
yaml
route:
receiver: 'default-receiver'
routes:
- match:
severity: 'critical'
receiver: 'critical-receiver'
routes:
- match:
service: 'web'
receiver: 'web-critical-receiver'
在这个例子中,如果告警的 severity
标签为 critical
,则会发送到 critical-receiver
。如果同时 service
标签为 web
,则会进一步发送到 web-critical-receiver
。
实际案例
假设你有一个微服务架构,包含 web
、database
和 cache
三个服务。你希望:
- 所有
critical
级别的告警发送到critical-receiver
。 web
和database
服务的告警发送到web-db-receiver
。web
服务的warning
级别告警发送到web-db-warning-receiver
。
你可以使用以下配置:
yaml
route:
receiver: 'default-receiver'
group_by: ['alertname', 'job']
routes:
- match:
severity: 'critical'
receiver: 'critical-receiver'
- match_re:
service: 'web|database'
receiver: 'web-db-receiver'
routes:
- match:
severity: 'warning'
receiver: 'web-db-warning-receiver'
总结
告警路由树是 Prometheus Alertmanager 中非常重要的功能,它允许你根据告警的标签和条件,将告警路由到适当的接收者。通过合理配置路由树,你可以确保告警信息能够及时、准确地传达给相关团队或个人。
附加资源
练习
- 尝试为你的 Prometheus 实例配置一个告警路由树,确保
critical
级别的告警发送到critical-receiver
,而warning
级别的告警发送到warning-receiver
。 - 使用
match_re
配置一个路由规则,将所有web
和database
服务的告警发送到web-db-receiver
。