Prometheus 教程

AlertManager 路由相关配置

路由相关配置允许配置警报如何根据时间进行路由、聚合、节流和静默。

<route>

路由块定义路由树中的一个节点及其子节点。如果未设置路由块的可选配置参数,则从其父节点继承。

每个警报都从配置的顶级路由进入路由树,该路由必须与所有警报匹配(即没有任何配置的匹配器)。然后它会遍历子节点。如果 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>

time_interval 指定了一个指定的时间间隔,可在路由树中引用,以便在一天中的特定时间静音/激活特定路由。

name: <string>
time_intervals:
  [ - <time_interval_spec> ... ]

< 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 时间为准。

time_range

包含起始时间和不包含结束时间的范围,以便于表示以小时为界限开始/结束的时间。例如,start_time: "17:00 "和 end_time: "24:00 "将从 17:00 开始,在 24:00 之前结束。它们是这样指定的:

times:
    - start_time: HH:MM
      end_time: HH:MM

weekday_range

一周的天数列表,一周从周日开始,到周六结束。日期应按名称指定(如 'Sunday')。为方便起见,也接受 <start_day>:<end_day> 形式的范围,两端都包含在内。例如:['monday:wednesday','saturday', 'sunday']

days_of_month_range

月份中的数字天数列表。也接受从月末开始的负值,例如,1 月份的 -1 代表 1 月 31 日。例如 ['1:5', '-3:-1'],超过月初或月末的值将被箝位。例如,在二月份指定 ['1:31'],根据闰年的不同,实际结束日期将被箝位在 28 或 29 日,两端都包含。

month_range

日历月份列表,用不区分大小写的名称(如 'January')或数字标识,其中 1 月 = 1。也接受范围。例如,['1:3', 'may:august', 'december'],两端都包含。

year_range

年份的数字列表,接受范围。例如:['2020:2022', '2030'],两端都包含。

location

与 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 时间。

说说我的看法
全部评论(
没有评论
关于
本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明,如果原文没有版权声明,请来信告知:hxstrive@outlook.com
公众号