跳到主要内容

告警路由树配置

在 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'] 表示告警会根据 alertnamejob 标签进行分组。
  • routes 是路由规则的列表,每个规则可以包含 matchmatch_re 来匹配告警的标签。

路由匹配规则

matchmatch_re

  • match:用于精确匹配告警的标签。例如,severity: 'critical' 表示只有当 severity 标签的值为 critical 时,才会匹配该路由。
  • match_re:用于正则表达式匹配告警的标签。例如,service: 'web|database' 表示当 service 标签的值为 webdatabase 时,才会匹配该路由。

嵌套路由

路由规则可以嵌套,形成树状结构。例如:

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

实际案例

假设你有一个微服务架构,包含 webdatabasecache 三个服务。你希望:

  1. 所有 critical 级别的告警发送到 critical-receiver
  2. webdatabase 服务的告警发送到 web-db-receiver
  3. 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 中非常重要的功能,它允许你根据告警的标签和条件,将告警路由到适当的接收者。通过合理配置路由树,你可以确保告警信息能够及时、准确地传达给相关团队或个人。

附加资源

练习

  1. 尝试为你的 Prometheus 实例配置一个告警路由树,确保 critical 级别的告警发送到 critical-receiver,而 warning 级别的告警发送到 warning-receiver
  2. 使用 match_re 配置一个路由规则,将所有 webdatabase 服务的告警发送到 web-db-receiver