天天看点

运维监控系列(12)-Alertmanager简介及配置文件详解

Alertmanager

简介

Alertmanager 主要用于接收Prometheus 发送的告警信息,它支持丰富的告警通知渠道,而且很容易做到告警信息进行分组、静默、抑制等,是Prometheus生态中非常重要的一个核心模块。

运维监控系列(12)-Alertmanager简介及配置文件详解

告警功能概述

Prometheus 告警分为两部分:

  • Prometheus服务器中的警报规则向Alertmanager发送告警。
  • Alertmanager 管理这些告警,对这些告警进行分组去重,根据理由规则发送到接受者,比如发送电子邮件、呼叫通知系统,以及即时通讯平台。

设置告警和通知的主要步骤是:

  • 安装和配置Alertmanager
  • 配置 Prometheus与 Alertmanager 对接
  • 在 Prometheus 中创建告警规则

Alertmanager实现的核心概念

接下来了解下Alertmanager核心概念,混个眼熟,后面会详细案例解读。

分组

分组将类似性质的警报分类为单个通知。当许多系统同时发生故障并且可能同时触发数百到数千个警报时,这在较大的中断期间尤其有用。

示例:当发生网络分区故障时,集群中正在运行数十个或数百个服务实例。您的一半服务实例无法再访问数据库。Prometheus 中的警报规则被配置为在每个服务实例无法与数据库通信时发送警报。因此,数百个警报被发送到 Alertmanager。

作为用户,您只想获得一个页面,同时仍然能够准确查看哪些服务实例受到影响。因此,可以将 Alertmanager 配置为按集群和警报名称对警报进行分组,以便它发送单个紧凑通知。

警报分组、分组通知的时间以及这些通知的接收者由配置文件中的路由树进行配置。

抑制

抑制是一个概念,如果某些其他警报已经触发,则抑制某些警报的通知。

示例:发出警报,通知无法访问整个集群。如果该特定警报正在触发,Alertmanager 可以配置为静音与该集群相关的所有其他警报。这可以防止收到与实际问题无关的数百或数千个触发警报的通知。

通过 Alertmanager 的配置文件进行配置。

静默

静默是在给定时间内简单地将警报静音的直接方法。静默是基于匹配器配置的,就像路由树一样。检查传入警报是否与活动静默的所有相等或正则表达式匹配器匹配。如果他们这样做,则不会发送该警报的通知。

静默是在 Alertmanager 的 Web 界面中配置的。

客户行为

Alertmanager对其客户端的行为有特殊要求。这些仅与不使用 Prometheus 发送警报的高级用例相关。

高可用性

Alertmanager 支持配置以创建集群以实现高可用性。这可以使用–cluster-*标志进行配置。

重要的是不要在 Prometheus 及其警报管理器之间负载平衡流量,而是将 Prometheus 指向所有警报管理器的列表。

Alertmanager配置项说明

接下来了解下Alertmanager核心配置,混个眼熟,后面会详细案例解读。

Alertmanager通过命令行和配置文件进行配置。配置文件定义了禁止规则、通知路由和通知接收器。

要查看所有可用的命令行帮助,请运行alertmanager -h。

Alertmanager 可以在运行时重新加载其配置。如果新配置格式不正确,则不会应用更改并记录错误。配置重新加载是通过向SIGHUP进程发送 a 或向/-/reload端点发送 HTTP POST 请求来触发的。

配置文件说明

要指定要加载的配置文件,使用–config.file命令。

./alertmanager --config.file=alertmanager.yml
           

该文件以YAML 格式编写,由下面描述的字段定义。

  • < duration>: 匹配正则表达式的持续时间((([0-9]+)y)?(([0-9]+)w)?(([0-9]+)d)?(([0-9]+)h)?(([0-9]+)m)?(([0-9]+)s)?(([0-9]+)ms)?|0),例如1d, 1h30m, 5m,10s
  • < labelname>: 匹配正则表达式的字符串 [a-zA-Z_][a-zA-Z0-9_]*
  • < labelvalue>: 一串unicode字符
  • < filepath>: 当前工作目录中的有效路径
  • < boolean>: 一个布尔值,可以取值true或false
  • < string>: 普通字符串
  • < secret>:作为秘密的常规字符串,例如密码
  • < tmpl_string>: 使用前模板扩展的字符串
  • < tmpl_secret>: 一个在使用前被模板扩展的字符串,这是一个秘密
  • < int>: 一个整数值

global

全局配置指定在所有其他配置上下文中有效的参数。它们还用作其他配置部分的默认值。

global:
  # 默认SMTP发件人标头字段
  [ smtp_from: <tmpl_string> ]
  # 用于发送电子邮件的默认SMTP smarthost,包括端口号。
  # 端口号通常为25,对于通过TLS的SMTP(有时称为STARTTLS),端口号通常为587。
  # 例子: smtp.example.org:587
  [ smtp_smarthost: <string> ]
  # 要向SMTP服务器标识的默认主机名。
  [ smtp_hello: <string> | default = "localhost" ]
  # SMTP身份验证使用CRAM-MD5、LOGIN、PLAIN。如果为空,则Alertmanager不会对SMTP服务器进行身份验证。
  [ smtp_auth_username: <string> ]
  #  SMTP身份验证使用LOGIN and PLAIN
  [ smtp_auth_password: <secret> ]
  # SMTP认证使用 PLAIN.
  [ smtp_auth_identity: <string> ]
  #  SMTP认证使用  CRAM-MD5.
  [ smtp_auth_secret: <secret> ]
  # 默认SMTP TLS要求,请注意,Go不支持到远程SMTP端点的未加密连接。
  [ smtp_require_tls: <bool> | default = true ]
  # 用于slack通知的API URL。
  [ slack_api_url: <secret> ]
  [ slack_api_url_file: <filepath> ]
  [ victorops_api_key: <secret> ]
  [ victorops_api_url: <string> | default = "https://alert.victorops.com/integrations/generic/20131114/alert/" ]
  [ pagerduty_url: <string> | default = "https://events.pagerduty.com/v2/enqueue" ]
  [ opsgenie_api_key: <secret> ]
  [ opsgenie_api_url: <string> | default = "https://api.opsgenie.com/" ]
  # 微信通知
  [ wechat_api_url: <string> | default = "https://qyapi.weixin.qq.com/cgi-bin/" ]
  [ wechat_api_secret: <secret> ]
  [ wechat_api_corp_id: <string> ]
  # 默认的HTTP客户端配置
  [ http_config: <http_config> ]

  # ResolveTimeout是alertmanager在警报发生时使用的默认值
  # 不包括EndsAt,在此时间过后,如果警报尚未更新,则可以将其声明为已解决。
  # 这对来自普罗米修斯的警报没有影响,因为它们总是包括EndsAt。
  [ resolve_timeout: <duration> | default = 5m ]

# 从中读取自定义通知模板定义的文件。
# 最后一个组件可以使用通配符匹配器,例如“templates/*.tmpl”。
templates:
  [ - <filepath> ... ]
# 路由树的根节点。
route: <route>
# 通知接收者的列表。
receivers:
  - <receiver> ...
# 抑制规则列表。
inhibit_rules:
  [ - <inhibit_rule> ... ]
# 静音路由的静音时间间隔列表。
mute_time_intervals:
  [ - <mute_time_interval> ... ]
           

route

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

每个警报在配置的顶级路由处进入路由树,该路由树必须匹配所有警报(即没有任何配置的匹配器)。然后遍历子节点。如果continue设置为 false,它会在第一个匹配的孩子之后停止。如果continue在匹配节点上为 true,则警报将继续与后续兄弟节点匹配。如果警报与节点的任何子节点都不匹配(没有匹配的子节点或不存在),则根据当前节点的配置参数处理警报。

# 接受者名称
[ receiver: <string> ]
# 用于将传入警报分组在一起的标签。
[ group_by: '[' <labelname>, ... ']' ]
# 警报是否应继续匹配后续同级节点。
[ continue: <boolean> | default = false ]
# 不推荐使用下面的匹配器。
# 警报必须满足的一组相等匹配器来匹配节点。
match:
  [ <labelname>: <labelvalue>, ... ]
# 不推荐,警报必须满足的一组正则表达式匹配器来匹配节点。
match_re:
  [ <labelname>: <regex>, ... ]

# 警报必须完成以匹配节点的匹配器列表。
matchers:
  [ - <matcher> ... ]
# 为组发送通知的初始等待时间
# 警报数量。允许等待禁止警报到达或收集,同一组的更多初始警报。(通常为~0到几分钟。)
[ group_wait: <duration> | default = 30s ]
# 在发送有关新警报的通知之前需要等待多长时间 
[ group_interval: <duration> | default = 5m ]
# 如果已发送通知,则在再次发送通知之前要等待多长时间,通常约3小时或更长时间
[ repeat_interval: <duration> | default = 4h ]
# 应禁用路由的时间。这些文件必须与文件名匹配
mute_time_intervals:
  [ - <string> ...]
# 零个或多个子路由。
routes:
  [ - <route> ... ]
           

mute_time_interval

mute_time_interval指定可以在路由树中引用的命名时间间隔,以在一天中的特定时间使特定路由静音。

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

time_interval

time_interval包含时间间隔的实际定义。语法支持以下字段:

- times:
  [ - <time_range> ...]
  weekdays:
  [ - <weekday_range> ...]
  days_of_month:
  [ - <days_of_month_range> ...]
  months:
  [ - <month_range> ...]
  years:
  [ - <year_range> ...]
           

所有字段都是列表。在每个非空列表中,必须至少满足一个元素才能匹配该字段。如果未指定字段,则任何值都将匹配该字段。对于匹配完整时间间隔的瞬间,所有字段都必须匹配。一些字段支持范围和负索引,详情如下。所有定义均采用 UTC,目前不支持其他时区。

time_range包括开始时间和不包括结束时间的范围,以便于表示在小时边界开始/结束的时间。例如,开始时间:‘17:00’ 和结束时间:‘24:00’ 将在 17:00 开始并在 24:00 之前结束。它们是这样指定的:

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

weekday_range:一周中的几天列表,一周从星期日开始到星期六结束。应按名称指定日期(例如“星期日”)。为方便起见,范围也接受形式:并且在两端都包含在内。例如: [‘monday:wednesday’,‘saturday’, ‘sunday’]

days_of_month_range: 月份中的数字天数列表。天数从 1 开始。也接受从月底开始的负值,例如,一月份的 -1 表示一月 31 日。例如:[‘1:5’, ‘-3:-1’]。超过月初或月底将导致它被夹住。例如,指定 [‘1:31’]在二月将根据闰年将实际结束日期限制为 28 或 29。两端包容。

month_range:由区分大小写的名称(例如“一月”)或数字标识的日历月列表,其中一月 = 1。也接受范围。例如,[‘1:3’, ‘may:august’, ‘december’]。两端包容。

year_range: 年份的数字列表。接受范围。例如,[‘2020:2022’, ‘2030’]。两端包容。

inhibit_rule

当存在与另一组匹配器匹配的警报(源)时,禁止规则使匹配一组匹配器的警报(目标)静音。对于equal列表中的标签名称,目标警报和源警报都必须具有相同的标签值。

从语义上讲,缺少标签和带有空值的标签是一回事。因此,如果equal源警报和目标警报中都缺少 中列出的所有标签名称,则将应用禁止规则。

为了防止警报自我抑制,与规则的目标端和源端均匹配的警报不能被同样适用的警报(包括其自身)抑制。但是,我们建议以警报永远不会匹配双方的方式选择目标和源匹配器。推理要容易得多,并且不会触发这种特殊情况。

# 必须在警报中完成的匹配器将被禁用。不推荐使用
target_match:
  [ <labelname>: <labelvalue>, ... ]
# 不推荐使用
target_match_re:
  [ <labelname>: <regex>, ... ]

# 要禁用的目标警报必须满足的匹配器列表。
target_matchers:
  [ - <matcher> ... ]

# 不推荐使用
source_match:
  [ <labelname>: <labelvalue>, ... ]
# 不推荐使用
source_match_re:
  [ <labelname>: <regex>, ... ]
# 必须存在一个或多个警报才能使抑制生效的匹配器列表。
source_matchers:
  [ - <matcher> ... ]
# 要使抑制生效,源警报和目标警报中必须具有相等值的标签。
[ equal: '[' <labelname>, ... ']' ]
           

http_config

http_config允许配置接收方用于与基于 HTTP 的 API 服务通信的 HTTP 客户端。

# 请注意,`basic_auth`和`authorization`选项是互斥的。
# 使用配置的用户名和密码设置“Authorization”标头。
# 密码和密码文件是互斥的。
basic_auth:
  [ username: <string> ]
  [ password: <secret> ]
  [ password_file: <string> ]

# Authorization消息头令牌认证方式
authorization:
  # 消息头前缀 Bearer 
  [ type: <string> | default: Bearer ]
  # 设置凭据。
  [ credentials: <secret> ]
  # 凭据文件
  [ credentials_file: <filename> ]

#  OAuth 2.0 配置
# 使用客户端凭据授权类型的 OAuth 2.0 身份验证。Alertmanager 使用给定的客户端访问和密钥从指定的端点获取访问令牌。
#  不能与基本授权或授权同时使用。
oauth2:
  [ <oauth2> ]
# 可选的代理URL。
[ proxy_url: <string> ]
# 配置HTTP请求是否遵循HTTP 3xx重定向。
[ follow_redirects: <bool> | default = true ]
# TLS配置
tls_config:
  [ <tls_config> ]
           

使用客户端凭据授权类型的 OAuth 2.0 身份验证。Alertmanager 使用给定的客户端访问和密钥从指定的端点获取访问令牌。

# Oauth2 客户端ID
client_id: <string>
# Oauth2 客户端密码
[ client_secret: <secret> ]
# 从文件读取Oauth密码
[ client_secret_file: <filename> ]
# Oauth2授权范围
scopes:
  [ - <string> ... ]
# 获取令牌URL
token_url: <string>
# 令牌URL 参数
endpoint_params:
  [ <string>: <string> ... ]
           

tls_config

tls_config允许配置 TLS 连接。

# 用于验证服务器证书的CA证书
[ ca_file: <filepath> ]
# 用于向服务器进行客户端证书身份验证的证书和密钥文件。
[ cert_file: <filepath> ]
[ key_file: <filepath> ]
# ServerName扩展以指示服务器的名称。http://tools.ietf.org/html/rfc4366#section-3.1
[ server_name: <string> ]
# 禁用服务器证书的验证。
[ insecure_skip_verify: <boolean> | default = false]
           

receiver

Receiver 是一个或多个通知集成的命名配置。

注意:作为取消过去对新接收器的暂停的一部分,同意除了现有要求之外,新的通知集成将需要有一个具有推送访问权限的承诺维护者。

# Receiver 的唯一名称。
name: <string>
# 多个通知集成的配置。
email_configs:
  [ - <email_config>, ... ]
pagerduty_configs:
  [ - <pagerduty_config>, ... ]
pushover_configs:
  [ - <pushover_config>, ... ]
slack_configs:
  [ - <slack_config>, ... ]
opsgenie_configs:
  [ - <opsgenie_config>, ... ]
webhook_configs:
  [ - <webhook_config>, ... ]
victorops_configs:
  [ - <victorops_config>, ... ]
wechat_configs:
  [ - <wechat_config>, ... ]
           

email_config

发送邮件通知相关配置。

# 是否通知已解决的警报。
[ send_resolved: <boolean> | default = false ]
# 要向其发送通知的电子邮件地址。
to: <tmpl_string>
# 发件人地址。
[ from: <tmpl_string> | default = global.smtp_from ]
# 发送电子邮件的SMTP主机。
[ smarthost: <string> | default = global.smtp_smarthost ]
# 要向SMTP服务器标识的主机名。
[ hello: <string> | default = global.smtp_hello ]
# SMTP身份验证信息。
[ auth_username: <string> | default = global.smtp_auth_username ]
[ auth_password: <secret> | default = global.smtp_auth_password ]
[ auth_secret: <secret> | default = global.smtp_auth_secret ]
[ auth_identity: <string> | default = global.smtp_auth_identity ]

# SMTP TLS要求。请注意,Go不支持到远程SMTP端点的未加密连接。
[ require_tls: <bool> | default = global.smtp_require_tls ]
# TLS配置
tls_config:
  [ <tls_config> ]
# 电子邮件通知的HTML正文。
[ html: <tmpl_string> | default = '{{ template "email.default.html" . }}' ]
# 电子邮件通知的文本正文。
[ text: <tmpl_string> ]
# 更多标题电子邮件标题键/值对。覆盖任何标题,以前由通知实现设置。
[ headers: { <string>: <tmpl_string>, ... } ]
           

pagerduty_config

PagerDuty 通知通过PagerDuty API发送。PagerDuty 提供有关如何集成的文档。与 Alertmanager 的 v0.11 和对 PagerDuty 的 Events API v2 的更大支持存在重要差异。

# 是否通知已解决的警报。
[ send_resolved: <boolean> | default = true ]
# 以下两个选项是互斥的。PagerDuty集成键(使用PagerDuty集成类型`Events API v2`时)
routing_key: <tmpl_secret>
# PagerDuty集成键(使用PagerDuty集成类型“Prometheus”时)。
service_key: <tmpl_secret>
# 要向其发送API请求的URL
[ url: <string> | default = global.pagerduty_url ]
# Alertmanager的客户端标识。
[ client:  <tmpl_string> | default = '{{ template "pagerduty.default.client" . }}' ]
# 指向通知发件人的反向链接。
[ client_url:  <tmpl_string> | default = '{{ template "pagerduty.default.clientURL" . }}' ]
# 对事件的描述。
[ description: <tmpl_string> | default = '{{ template "pagerduty.default.description" .}}' ]
# 事件的严重性。
[ severity: <tmpl_string> | default = 'error' ]
# 提供进一步详细信息的一组任意键/值对
[ details: { <string>: <tmpl_string>, ... } | default = {
  firing:       '{{ template "pagerduty.default.instances" .Alerts.Firing }}'
  resolved:     '{{ template "pagerduty.default.instances" .Alerts.Resolved }}'
  num_firing:   '{{ .Alerts.Firing | len }}'
  num_resolved: '{{ .Alerts.Resolved | len }}'
} ]
# 要附加到事件的图像。
images:
  [ <image_config> ... ]
# 要附加到事件的链接。
links:
  [ <link_config> ... ]
# 受影响系统中损坏的部分或组件。
[ component: <tmpl_string> ]
# sources的集群或者分组
[ group: <tmpl_string> ]
# event的class类型
[ class: <tmpl_string> ]
# HTTP客户端的配置。
[ http_config: <http_config> | default = global.http_config ]
           

image_config

这些字段记录在PagerDuty API 文档中。

href: <tmpl_string>
source: <tmpl_string>
alt: <tmpl_string>

           

link_config

这些字段记录在PagerDuty API 文档中。

href: <tmpl_string>
text: <tmpl_string>
           

pushover_config

Pushover 通知通过Pushover API发送。

# Whether or not to notify about resolved alerts.
[ send_resolved: <boolean> | default = true ]
# The recipient user’s user key.
user_key: <secret>
# 您注册的应用程序的API令牌,请参阅https://pushover.net/apps
# 您还可以通过克隆此普罗米修斯应用程序来注册令牌:
# https://pushover.net/apps/clone/prometheus
token: <secret>
# Notification title.
[ title: <tmpl_string> | default = '{{ template "pushover.default.title" . }}' ]
# 通知消息
[ message: <tmpl_string> | default = '{{ template "pushover.default.message" . }}' ]
# 消息旁边显示的补充URL。
[ url: <tmpl_string> | default = '{{ template "pushover.default.url" . }}' ]
# 优先事项,见https://pushover.net/api#priority
[ priority: <tmpl_string> | default = '{{ if eq .Status "firing" }}2{{ else }}0{{ end }}' ]
# Pushover服务器向用户发送相同通知的频率。
# 必须至少为30秒。
[ retry: <duration> | default = 1m ]
# 您的通知将继续重试多长时间,除非用户确认通知。
[ expire: <duration> | default = 1h ]
# HTTP客户端的配置。
[ http_config: <http_config> | default = global.http_config ]
           

slack_config

Slack 通知通过Slack webhooks发送。该通知包含一个附件。

# 是否通知已解决的警报。
[ send_resolved: <boolean> | default = false ]
# 松弛webhook URL。应设置api_url或api_url_文件。
# 如果此处未设置任何设置,则默认为全局设置。
[ api_url: <secret> | default = global.slack_api_url ]
[ api_url_file: <filepath> | default = global.slack_api_url_file ]
# 要向其发送通知的频道或用户。
channel: <tmpl_string>
# 由Slack webhook API定义的API请求数据。
[ icon_emoji: <tmpl_string> ]
[ icon_url: <tmpl_string> ]
[ link_names: <boolean> | default = false ]
[ username: <tmpl_string> | default = '{{ template "slack.default.username" . }}' ]
# 以下参数定义了附件。
actions:
  [ <action_config> ... ]
[ callback_id: <tmpl_string> | default = '{{ template "slack.default.callbackid" . }}' ]
[ color: <tmpl_string> | default = '{{ if eq .Status "firing" }}danger{{ else }}good{{ end }}' ]
[ fallback: <tmpl_string> | default = '{{ template "slack.default.fallback" . }}' ]
fields:
  [ <field_config> ... ]
[ footer: <tmpl_string> | default = '{{ template "slack.default.footer" . }}' ]
[ mrkdwn_in: '[' <string>, ... ']' | default = ["fallback", "pretext", "text"] ]
[ pretext: <tmpl_string> | default = '{{ template "slack.default.pretext" . }}' ]
[ short_fields: <boolean> | default = false ]
[ text: <tmpl_string> | default = '{{ template "slack.default.text" . }}' ]
[ title: <tmpl_string> | default = '{{ template "slack.default.title" . }}' ]
[ title_link: <tmpl_string> | default = '{{ template "slack.default.titlelink" . }}' ]
[ image_url: <tmpl_string> ]
[ thumb_url: <tmpl_string> ]
# The HTTP 客户端配置
[ http_config: <http_config> | default = global.http_config ]
           

action_config

这些字段记录在消息附件和交互式消息的 Slack API 文档中。

text: <tmpl_string>
type: <tmpl_string>
# url或名称和值都是必需的。
[ url: <tmpl_string> ]
[ name: <tmpl_string> ]
[ value: <tmpl_string> ]

[ confirm: <action_confirm_field_config> ]
[ style: <tmpl_string> | default = '' ]
           

action_confirm_field_config

这些字段记录在Slack API 文档中。

text: <tmpl_string>
[ dismiss_text: <tmpl_string> | default '' ]
[ ok_text: <tmpl_string> | default '' ]
[ title: <tmpl_string> | default '' ]
           

field_config

这些字段记录在Slack API 文档中。

title: <tmpl_string>
value: <tmpl_string>
[ short: <boolean> | default = slack_config.short_fields ]
           

sns_configs

短信通知配置。

# Whether or not to notify about resolved alerts.
[ send_resolved: <boolean> | default = false ]

# SNS API URL,即。https://sns.us-east-2.amazonaws.com.
#  如果未指定,将使用SNS SDK中的SNS API URL。
[ api_url: <tmpl_string> ]
# 将AWS的签名验证4签名过程配置为签名请求。
sigv4:
  [ <sigv4_config> ]
# SNS主题ARN,即ARN:aws:SNS:us-east-2:698519295917:我的主题
#如果未指定此值,则必须为电话号码或目标号码指定一个值。
#如果您正在使用FIFO SNS主题,则应将消息组间隔设置为大于5分钟
#防止SNS默认重复数据消除窗口对具有相同组密钥的邮件进行重复数据消除
[ topic_arn: <tmpl_string> ]
# 邮件传递到电子邮件端点时的主题行。
[ subject: <tmpl_string> | default = '{{ template "sns.default.subject" .}}' ] 
# 如果信息以E.164格式通过短信发送,则为电话号码。
# 如果未指定此值,则必须为主题或目标指定一个值。
[ phone_number: <tmpl_string> ] 
#移动平台端点ARN if消息通过移动通知传递。
#如果未指定此值,则必须为主题或电话号码指定一个值。
[ target_arn: <tmpl_string> ] 
# SNS通知的消息内容。
[ message: <tmpl_string> | default = '{{ template "sns.default.message" .}}' ] 
# SNS消息属性。
attributes: 
  [ <string>: <string> ... ]
# The HTTP 客户端配置
[ http_config: <http_config> | default = global.http_config ]
           

sigv4_config

# AWS地区。如果为空,则使用默认凭据链中的区域。
[ region: <string> ]
#AWS API密钥。必须同时提供访问密钥和机密密钥,或者两者都必须为空。
#如果为空,则使用环境变量“AWS\u ACCESS\u KEY\u ID”和“AWS\u SECRET\u ACCESS\u KEY”。
[ access_key: <string> ]
[ secret_key: <secret> ]
# 用于身份验证的命名AWS配置文件。
[ profile: <string> ]
# AWS角色ARN,使用AWS API密钥的替代方案。
[ role_arn: <string> ]
           

matcher

匹配器是一个字符串,其语法受 PromQL 和 OpenMetrics 启发。匹配器的语法由三个标记组成:

  • 有效的 Prometheus 标签名称。
  • 一 =,!=,=,或!。=表示相等,!=表示字符串不相等,=用于正则表达式的相等,用于正则表达式!的不相等。它们与 PromQL 选择器的含义相同。
  • UTF-8 字符串,可以用双引号括起来。在每个标记之前或之后,可能有任意数量的空格。

第三个标记可能是空字符串。在第三个标记中,OpenMetrics 转义规则适用:“对于双引号、\n换行符、\文字反斜杠。Unescaped"不得出现在第三个标记内(仅作为第一个或最后一个字符)。但是,可以容忍文字换行符,也可以容忍单个\字符后不跟, n, 或”。在这种情况下,它们充当字面反斜杠。

在配置中,多个匹配器组合在一个 YAML 列表中。但是,也可以在单个 YAML 字符串中组合多个匹配器,同样使用受 PromQL 启发的语法。在这样的字符串中,前导{和/或尾随}是可选的,在进一步解析之前将被修剪。单个匹配器在字符串的引用部分之外用逗号分隔。这些逗号可能被空格包围。未转义双引号内的部分字符串"…"被认为是带引号的(并且逗号不作为分隔符)。如果双引号用单个反斜杠转义\,则为了识别输入字符串的引用部分,它们将被忽略。如果是输入字符串,修剪后可选的尾随}, 以逗号结尾,后跟可选的空格,此逗号和空格将被修剪。

以下是一些有效字符串匹配器的示例:

下面显示了两个等式匹配器组合在一个长形式的 YAML 列表中。

matchers:
   - foo = bar
   - dings !=bums 
           

与示例 1 类似,下面显示的是组合在一个简短形式的 YAML 列表中的两个相等匹配器。

如下所示,在短格式中,通常最好将列表元素引用起来,以避免出现逗号等特殊字符的问题:

您还可以将两个匹配器放入一个类似 PromQL 的字符串中。整个字符串的单引号在这里效果最好。

为避免在 YAML 字符串引用和转义方面出现任何混淆,您可以使用 YAML 块引用,然后只担心 OpenMetrics 在块内转义。下面显示了一个带有正则表达式和标签值内不同引号的复杂示例:

matchers:
  - |
      {quote=~"She said: \"Hi, all!( How're you…)?\""}
           

opsgenie_config

OpsGenie 通知通过OpsGenie API发送。

# 是否通知已解决的警报。
[ send_resolved: <boolean> | default = true ]
# 与OpsGenie API对话时要使用的API密钥。
[ api_key: <secret> | default = global.opsgenie_api_key ]
# 要向其发送OpsGenie API请求的主机。
[ api_url: <string> | default = global.opsgenie_api_url ]
# 警报文本限制为130个字符。
[ message: <tmpl_string> ]
# 警报的说明。
[ description: <tmpl_string> | default = '{{ template "opsgenie.default.description" . }}' ]
# 指向通知发件人的反向链接。
[ source: <tmpl_string> | default = '{{ template "opsgenie.default.source" . }}' ]
# 提供进一步详细信息的一组任意键/值对。关于警报。
# 默认情况下,所有常用标签都包含为详细信息
[ details: { <string>: <tmpl_string>, ... } ]
# 负责通知的响应者列表。
responders:
  [ - <responder> ... ]
# 附加到通知的标记的逗号分隔列表。
[ tags: <tmpl_string> ]
# 附加警报说明。
[ note: <tmpl_string> ]
# 警报的优先级。可能的值为P1、P2、P3、P4和P5。
[ priority: <tmpl_string> ]
# The HTTP 客户端配置
[ http_config: <http_config> | default = global.http_config ]
           

responder

# 应该定义其中一个字段。
[ id: <tmpl_string> ]
[ name: <tmpl_string> ]
[ username: <tmpl_string> ]
# "team", "user", "escalation" or schedule".
type: <tmpl_string>
           

victorops_config

VictorOps 通知通过VictorOps API发出

# 是否通知已解决的警报。
[ send_resolved: <boolean> | default = true ]
# 与VictorOps API对话时要使用的API键。
[ api_key: <secret> | default = global.victorops_api_key ]
# The VictorOps API URL.
[ api_url: <string> | default = global.victorops_api_url ]
# 用于将警报映射到团队的键。
routing_key: <tmpl_string>
# Describes the behavior of the alert (CRITICAL, WARNING, INFO).
[ message_type: <tmpl_string> | default = 'CRITICAL' ]
# 包含警报问题的摘要。
[ entity_display_name: <tmpl_string> | default = '{{ template "victorops.default.entity_display_name" . }}' ]
# 包含警报问题的详细解释。
[ state_message: <tmpl_string> | default = '{{ template "victorops.default.state_message" . }}' ]
# 状态消息来自的监视工具。
[ monitoring_tool: <tmpl_string> | default = '{{ template "victorops.default.monitoring_tool" . }}' ]
# Http 客户端配置
[ http_config: <http_config> | default = global.http_config ]
           

webhook_config

webhook 接收器允许配置通用接收器。

# 是否通知已解决的警报。
[ send_resolved: <boolean> | default = true ]
# 要向其发送HTTP POST请求的端点。
url: <string>
# Http 客户端配置
[ http_config: <http_config> | default = global.http_config ]
# 单个webhook消息中包含的最大警报数高于此阈值的将被截断。将其保留为默认值时0。 包括所有警报。
[ max_alerts: <int> | default = 0 ]
           

Alertmanager 将以以下 JSON 格式向配置的端点发送 HTTP POST 请求:

{
  "version": "4",
  "groupKey": <string>,              // key identifying the group of alerts (e.g. to deduplicate)
  "truncatedAlerts": <int>,          // how many alerts have been truncated due to "max_alerts"
  "status": "<resolved|firing>",
  "receiver": <string>,
  "groupLabels": <object>,
  "commonLabels": <object>,
  "commonAnnotations": <object>,
  "externalURL": <string>,           // backlink to the Alertmanager.
  "alerts": [
    {
      "status": "<resolved|firing>",
      "labels": <object>,
      "annotations": <object>,
      "startsAt": "<rfc3339>",
      "endsAt": "<rfc3339>",
      "generatorURL": <string>,      // identifies the entity that caused the alert
      "fingerprint": <string>        // fingerprint to identify the alert
    },
    ...
  ]
}
           

wechat_config

微信通知通过微信 API发送。

# 是否通知已解决的警报。
[ send_resolved: <boolean> | default = false ]
# 与微信API交谈时使用的API密钥。
[ api_secret: <secret> | default = global.wechat_api_secret ]
# 微信API URL。
[ api_url: <string> | default = global.wechat_api_url ]
# 用于身份验证的公司id。
[ corp_id: <string> | default = global.wechat_api_corp_id ]
# 微信API定义的API请求数据。
[ message: <tmpl_string> | default = '{{ template "wechat.default.message" . }}' ]
# 消息类型的类型,支持的值为“text”和“markdown”。
[ message_type: <string> | default = 'text' ]
[ agent_id: <string> | default = '{{ template "wechat.default.agent_id" . }}' ]
[ to_user: <string> | default = '{{ template "wechat.default.to_user" . }}' ]
[ to_party: <string> | default = '{{ template "wechat.default.to_party" . }}' ]
[ to_tag: <string> | default = '{{ template "wechat.default.to_tag" . }}' ]
           

文档来源自官方

https://prometheus.io/docs/alerting/latest/configuration/