路由相关配置允许配置警报如何根据时间进行路由、聚合、节流和静默。
路由块定义路由树中的一个节点及其子节点。如果未设置路由块的可选配置参数,则从其父节点继承。
每个警报都从配置的顶级路由进入路由树,该路由必须与所有警报匹配(即没有任何配置的匹配器)。然后它会遍历子节点。如果 continue 设置为 false,则会在第一个匹配的子节点后停止。如果匹配节点上的 continue 设置为 true,则警报将继续匹配后续的同级节点。如果警报不匹配节点的任何子节点(没有匹配的子节点,或不存在匹配的子节点),则会根据当前节点的配置参数处理警报。
[ receiver: <string> ] # 将传入警报分组到一起所依据的标签。 # 例如,cluster=A 和 alertname=LatencyHigh 的多个警报将被分批归入一个组。 # 例如,使用特殊值 '...' 作为唯一的标签名称,汇总所有可能的标签: # group_by: ['...'] # 这实际上是完全禁用聚合,按原样通过所有警报。这不可能是您想要的,除非您的警报量非常小, # 或者您的上游通知系统会执行 自己的分组。 [ group_by: '[' <labelname>, ... ']' ] # 警报是否应继续匹配后续的同级节点。 [ continue: <boolean> | default = false ] # 已弃用: 使用下面的 matchers。 # 警报必须满足的一组相等匹配器才能与节点匹配。 match: [ <labelname>: <labelvalue>, ... ] # 已弃用: 使用下面的 matchers。 # 警报必须满足的一组正则表达式匹配器才能匹配节点。 match_re: [ <labelname>: <regex>, ... ] # 一个匹配器列表,警报必须满足这些匹配器才能匹配该节点。 matchers: [ - <matcher> ... ] # 为一组警报发送通知的初始等待时间。 # 允许等待抑制性警报到达或为同一组警报收集更多初始警报(通常为 ~0s 至几分钟。) # 如果省略,子路由将继承父路由的 group_wait。 [ group_wait: <duration> | default = 30s ] # 对于已发送过初始通知的一组警报,如果又有新的警报添加进来,需要等待多久才会发送通知。 # (通常 ~5m 或更长)。 # 如果省略,子路由将继承父路由的 group_interval。 [ group_interval: <duration> | default = 5m ] # 如果已成功发送警报通知,需要等待多长时间才能再次发送通知。(通常 ~3h 或更长)。 # 如果省略,子路由将继承父路由的 repeat_interval。 # 请注意,该参数被 Alertmanager 的 "--data.retention" 配置标志隐式绑定。 # 重复间隔或数据保留期过后(以先发生者为准),将重新发送通知。 # `repeat_interval` 应该是 `group_interval` 的倍数。 [ repeat_interval: <duration> | default = 4h ] # 路由应静音的时间。这些时间必须与静音时间间隔(mute_time_intervals)部分 # 中定义的静音时间间隔名称一致。此外,根节点不能有任何静音时间。 # 路由静音后不会发送任何通知,但其他行为正常(包括结束路由匹配进程 `continue` 选项)。 mute_time_intervals: [ - <string> ...] # 路由应处于活动状态的时间。 # 这些时间必须与 time_intervals 部分中定义的时间间隔名称一致。 # 空值表示路由始终处于活动状态。此外,根节点不能有任何活动时间。 # 路由只有在激活时才会发送通知,否则会正常运行(包括在未设置“continue”选项时结束路由匹配过程)。 active_time_intervals: [ - <string> ...] # 零个或多个子路由 routes: [ - <route> ... ]
# 包含所有参数的根路由,如果没有覆盖这些参数,则由子路由继承。 route: receiver: 'default-receiver' group_wait: 30s group_interval: 5m repeat_interval: 4h group_by: [cluster, alertname] # 所有与以下子路由不匹配的警报都将保留在根节点上,并被分派到 “default-receiver” routes: # 所有带有 service=mysql 或 service=cassandra 的警报都被分派到 database-pager - receiver: 'database-pager' group_wait: 10s matchers: - service=~"mysql|cassandra" # 带有 team=frontend 标签的所有警报与此子路由匹配。 # 它们按 product 和 environment 分组,而不是按 cluster 和 alertname 分组。 - receiver: 'frontend-pager' group_by: [product, environment] matchers: - team="frontend" # 所有带有service=inhouse-service 标签的警报都与此子路由匹配。 # 该路由将在下班时间和节假日时间间隔内静音。 # 即使匹配,它也会继续到下一个子路线 - receiver: 'dev-pager' matchers: - service="inhouse-service" mute_time_intervals: - offhours - holidays continue: true # 带有 service=inhouse-service 标签的所有警报均与此子路由匹配。 # 该路由仅在下班时间和节假日时间间隔内处于活动状态。 - receiver: 'on-call-pager' matchers: - service="inhouse-service" active_time_intervals: - offhours - holidays
time_interval 指定了一个指定的时间间隔,可在路由树中引用,以便在一天中的特定时间静音/激活特定路由。
name: <string> time_intervals: [ - <time_interval_spec> ... ]
time_interval_spec 包含时间间隔的实际定义。该语法支持以下字段:
- times: [ - <time_range> ...] weekdays: [ - <weekday_range> ...] days_of_month: [ - <days_of_month_range> ...] months: [ - <month_range> ...] years: [ - <year_range> ...] location: <string>
所有字段都是列表(数组)。在每个非空列表中,必须至少满足一个元素才能匹配字段。如果字段未指定,则任何值都会匹配该字段。要使一个时间瞬间匹配一个完整的时间间隔,所有字段都必须匹配。某些字段支持范围和负指数,详情如下。如果未指定时区,则以 UTC 时间为准。
包含起始时间和不包含结束时间的范围,以便于表示以小时为界限开始/结束的时间。例如,start_time: "17:00 "和 end_time: "24:00 "将从 17:00 开始,在 24:00 之前结束。它们是这样指定的:
times: - start_time: HH:MM end_time: HH:MM
一周的天数列表,一周从周日开始,到周六结束。日期应按名称指定(如 'Sunday')。为方便起见,也接受 <start_day>:<end_day> 形式的范围,两端都包含在内。例如:['monday:wednesday','saturday', 'sunday']
月份中的数字天数列表。也接受从月末开始的负值,例如,1 月份的 -1 代表 1 月 31 日。例如 ['1:5', '-3:-1'],超过月初或月末的值将被箝位。例如,在二月份指定 ['1:31'],根据闰年的不同,实际结束日期将被箝位在 28 或 29 日,两端都包含。
日历月份列表,用不区分大小写的名称(如 'January')或数字标识,其中 1 月 = 1。也接受范围。例如,['1:3', 'may:august', 'december'],两端都包含。
年份的数字列表,接受范围。例如:['2020:2022', '2030'],两端都包含。
与 IANA 时区数据库中的位置相匹配的字符串。例如,"Australia/Sydney"。该位置提供了时间间隔的时区。例如,位置为 "Australia/Sydney" 的时间间隔包含以下内容:
times: - start_time: 09:00 end_time: 17:00 weekdays: ['monday:friday']
上述配置将包括星期一至星期五上午 9:00 至下午 5:00 之间的任何时间,使用澳大利亚悉尼的当地时间。
您也可以使用 "Local" 作为位置,使用 Alertmanager 运行所在机器的当地时间,或使用 "UTC "作为UTC 时间。注意:在 Windows 系统中,除非使用 ZONEINFO 环境变量提供自定义时区数据库,否则只支持本地时间或 UTC 时间。