Alertmanager通过命令行标志和配置文件进行配置。命令行标志配置不可变的系统参数,配置文件定义抑制规则、通知路由和通知接收者。
可视化编辑器可以帮助建立路由树。
要查看所有可用的命令行标志,请运行 alertmanager -h
。
Alertmanager可以在运行时重新加载其配置。如果新配置格式不正确,则更改将不会应用,并且会记录错误。(可以使用amtool工具测试alertmanager.yml的语法,该工具默认在alertmanager的源代码包已存在,用法:./amtool check-config alertmanager.yml )
通过发送SIGHUP信号到
alertmanager进程
或使用HTTP POST请求/-/reload endpoint来触发配置重载,例如:curl -XPOST localhost:9093/-/reload (alertmanager服务默认监听9093端口)。
要指定加载的配置文件,请使用该--config.file
标志。
./alertmanager --config.file=simple.yml
该文件以YAML格式写入,由以下所述的格式定义。括号表示参数是可选的。对于非列表参数,值设置为指定的默认值。
通用占位符定义如下:
:持续时间 ,匹配正则表达式[0-9]+(ms|[smhdwy])
:字符串,匹配正则表达式匹 [a-zA-Z_][a-zA-Z0-9_]*
:unicode字符串
:当前工作目录中的有效路径
:布尔值,true
或false
:常规字符串
:常规secret字符串,例如密码
:使用前已使用模板扩展的字符串
:使用前已使用模板扩展的secret字符串其他占位符分别指定。
提供的有效示例文件 显示了上下文中的用法。
全局配置指定在所有其他配置上下文中有效的参数。它们还用作其他配置部分的默认设置。
global:
# 默认的SMTP From标头字段。
[ smtp_from: ]
#用于发送电子邮件的默认SMTP主机,包括端口号。端口号通常为25,对于基于TLS的SMTP(有时称为STARTTLS),端口号通常为587。
#示例:smtp.example.org:587
[ smtp_smarthost: ]
#标识SMTP服务器的默认主机名。
[ smtp_hello: | default = "localhost" ]
#使用CRAM-MD5,LOGIN和PLAIN的SMTP身份验证。 如果为空,则Alertmanager不会对SMTP服务器进行身份验证。
[ smtp_auth_username: ]
# 使用LOGIN和PLAIN的SMTP身份验证
[ smtp_auth_password: ]
#使用PLAIN的SMTP身份验证。
[ smtp_auth_identity: ]
# 使用CRAM-MD5的SMTP身份验证。
[ smtp_auth_secret: ]
#默认的SMTP TLS要求。
#请注意,Go不支持与远程SMTP端点的未加密连接。
[ smtp_require_tls: | default = true ]
# 用于Slack通知的API URL。
[ slack_api_url: ]
[ victorops_api_key: ]
[ victorops_api_url: | default = "https://alert.victorops.com/integrations/generic/20131114/alert/" ]
[ pagerduty_url: | default = "https://events.pagerduty.com/v2/enqueue" ]
[ opsgenie_api_key: ]
[ opsgenie_api_url: | default = "https://api.opsgenie.com/" ]
[ hipchat_api_url: | default = "https://api.hipchat.com/" ]
[ hipchat_auth_token: ]
[ wechat_api_url: | default = "https://qyapi.weixin.qq.com/cgi-bin/" ]
[ wechat_api_secret: ]
[ wechat_api_corp_id: ]
# 默认的HTTP客户端配置
[ http_config: ]
#ResolveTimeout是警报管理器使用的默认值
#不包括EndsAt,经过此时间后,如果尚未更新警报,则可以将警报声明为已解决。
#这对Prometheus的警报没有影响,因为它们始终包含EndsAt。
[ resolve_timeout: | default = 5m ]
#从中读取自定义通知模板定义的文件。
#最后一个组件可以使用通配符匹配器,例如 '模板/*.tmpl'。
templates:
[ - ... ]
# 路由树的根节点。
route:
# 通知接收者列表。
receivers:
- ...
# 抑制规则列表。
inhibit_rules:
[ - ... ]
配置文件中的路由配置部分(route:)定义了路由树中的节点及其子节点。如果未设置,则其可选配置参数将从其父节点继承。
每个警报都会在已配置的顶级route处进入路由树,该顶级路由树必须能匹配所有报警(即没有任何已配置的匹配器)。然后,它遍历子节点。如果continue
设置为false,它将在第一个匹配的子项之后停止。如果continue
在匹配的节点上为true,则警报将继续与后续的同级节点进行匹配。如果警报与节点的任何子节点都不匹配(不匹配的子节点或不存在子节点),则根据当前节点的配置参数来处理警报。
##################### 修正线
[ receiver: ]
#根据group_by传入的标签对报警进行分组,例如,针对cluster=A和alertname=LatencyHigh的多个警报将被分为一个组。
#要按所有可能的标签进行聚合,请使用特殊值'...'作为唯一的标签名称,例如:group_by:['...']
#这样可以有效地完全禁用聚合,按原样传递所有警报。 除非您的警报量非常低或上游通知系统执行自己的分组,否则这不太可能是您想要的。
[ group_by: '[' , ... ']' ]
# 报警是否应继续匹配后续的同级节点。
[ continue: | default = false ]
# 报警必须满足匹配某些标签才能匹配节点。
match:
[ : , ... ]
# 报警必须满足标签匹配某些正则表达式才能匹配节点。
match_re:
[ : , ... ]
#最初发送一组警报通知的等待时间。 允许等待禁止警报到达或为同一组收集更多初始警报。 (通常0秒到几分钟。)
[ group_wait: | default = 30s ]
#在发送有关新报警的通知之前要等待多长时间,该通知已添加到已经发送了初始通知的一组警报中。 (通常5m或更多。)
[ group_interval: | default = 5m ]
#如果已经成功发送报警通知,则等待多长时间才能再次发送通知。 (通常3h或更长时间)。
[ repeat_interval: | default = 4h ]
# 零个或多个子路由。
routes:
[ - ... ]
# The root route with all parameters, which are inherited by the child
# routes if they are not overwritten.
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
match_re:
service: mysql|cassandra
# 所有带有team=frontend标签的警报均与此子路由匹配。
# 将它们按product和environment分组,而不是按cluster和altername分组。
- receiver: 'frontend-pager'
group_by: [product, environment]
match:
team: frontend
当存在与另一组匹配器匹配的报警(源)时,禁止规则会使与一组匹配器匹配的报警(目标)静默。目标报警和源报警的equal
列表中的标签名称都必须具有相同的标签值。
从语义上说,缺少标签和带有空值的标签是同一件事。因此,如果equal
源警报和目标警报都缺少列出的所有标签名称,则将应用禁止规则。
为了防止警报禁止自身,与规则的目标和源端均匹配的警报不能被警报(包括其本身)为真来禁止。但是,我们建议选择目标匹配器和源匹配器,以使警报永远不会匹配双方。这很容易推理,并且不会触发这种特殊情况。
# Matchers that have to be fulfilled in the alerts to be muted.
target_match:
[ : , ... ]
target_match_re:
[ : , ... ]
# Matchers for which one or more alerts have to exist for the
# inhibition to take effect.
source_match:
[ : , ... ]
source_match_re:
[ : , ... ]
# Labels that must have an equal value in the source and target
# alert for the inhibition to take effect.
[ equal: '[' , ... ']' ]
例如,定义如下抑制规则(参考https://yunlzheng.gitbook.io/prometheus-book/parti-prometheus-ji-chu/alert/alert-manager-inhibit):
- source_match:
alertname: NodeDown
severity: critical
target_match:
severity: warning
equal: ['node']
当集群中的某一个主机节点异常宕机导致告警NodeDown被触发,同时在告警规则中定义了告警级别severity=critical。由于主机异常宕机,该主机上部署的所有服务、中间件会不可用并触发报警。根据抑制规则的定义,如果有新的告警级别为severity=warning且告警规则中标签node的值与NodeDown这个告警规则中的标签node的值相同,则说明新的告警是由NodeDown导致的,则启动抑制机制停止向接收器发送通知。
http_config允许接收方使用基于HTTP的API来配置HTTP客户端。
#注意`basic_auth`,`bearer_token`和`bearer_token_file`选项是互斥的。
#使用配置的用户名和密码设置“ Authorization”标头。
#password和password_file是互斥的。
basic_auth:
[ username: ]
[ password: ]
[ password_file: ]
# 使用配置的令牌设置“ Authorization”标头。
[ bearer_token: ]
# 使用从配置文件中读取的令牌来设置“ Authorization”标头。
[ bearer_token_file: ]
# 配置TLS的设置。
tls_config:
[ ]
# 可选的代理URL。
[ proxy_url: ]
tls_config
允许配置TLS连接。
# 用于验证服务器证书的CA证书。
[ ca_file: ]
# 用于服务器的客户端证书身份验证的证书和密钥文件。
[ cert_file: ]
[ key_file: ]
# ServerName扩展名,指示服务器的名称。
# http://tools.ietf.org/html/rfc4366#section-3.1
[ server_name: ]
# 禁用服务器证书的验证。
[ insecure_skip_verify: | default = false]
接收器是一个或多个通知集成的命名配置。
我们不会积极添加新的接收器,建议通过webhook接收器实现自定义通知集成。
#接收者的唯一名称。
name:
# 多个通知集成的配置。
email_configs:
[ - , ... ]
hipchat_configs:
[ - , ... ]
pagerduty_configs:
[ - , ... ]
pushover_configs:
[ - , ... ]
slack_configs:
[ - , ... ]
opsgenie_configs:
[ - , ... ]
webhook_configs:
[ - , ... ]
victorops_configs:
[ - , ... ]
wechat_configs:
[ - , ... ]
# 是否通知已解决的警报。
[ send_resolved: | default = false ]
# 发送通知的电子邮件地址。
to:
# 发件人地址。
[ from: | default = global.smtp_from ]
# 通过其发送电子邮件的SMTP主机。
[ smarthost: | default = global.smtp_smarthost ]
# 标识到SMTP服务器的主机名。
[ hello: | default = global.smtp_hello ]
# SMTP身份验证信息。
[ auth_username: | default = global.smtp_auth_username ]
[ auth_password: | default = global.smtp_auth_password ]
[ auth_secret: | default = global.smtp_auth_secret ]
[ auth_identity: | default = global.smtp_auth_identity ]
# SMTP TLS要求。
# 请注意,Go不支持与远程SMTP端点的未加密连接。
[ require_tls: | default = global.smtp_require_tls ]
# TLS configuration.
tls_config:
[ ]
# 电子邮件通知的HTML正文。
[ html: | default = '{{ template "email.default.html" . }}' ]
# 电子邮件通知的文本正文。
[ text: ]
# 进一步的标题电子邮件标题键/值对。 覆盖先前由通知实现设置的所有标头。
[ headers: { : , ... } ]
HipChat通知使用“ 自己构建”集成。
# Whether or not to notify about resolved alerts.
[ send_resolved: | default = false ]
# The HipChat Room ID.
room_id:
# The auth token.
[ auth_token: | default = global.hipchat_auth_token ]
# The URL to send API requests to.
[ api_url: | default = global.hipchat_api_url ]
# See https://www.hipchat.com/docs/apiv2/method/send_room_notification
# A label to be shown in addition to the sender's name.
[ from: | default = '{{ template "hipchat.default.from" . }}' ]
# The message body.
[ message: | default = '{{ template "hipchat.default.message" . }}' ]
# Whether this message should trigger a user notification.
[ notify: | default = false ]
# Determines how the message is treated by the alertmanager and rendered inside HipChat. Valid values are 'text' and 'html'.
[ message_format: | default = 'text' ]
# Background color for message.
[ color: | default = '{{ if eq .Status "firing" }}red{{ else }}green{{ end }}' ]
# The HTTP client's configuration.
[ http_config: | default = global.http_config ]
通过PagerDuty API发送PagerDuty通知。PagerDuty提供有关如何集成的文档。Alertmanager的v0.11与重要的区别在于对PagerDuty的Events API v2的更大支持。
# Whether or not to notify about resolved alerts.
[ send_resolved: | default = true ]
# The following two options are mutually exclusive.
# The PagerDuty integration key (when using PagerDuty integration type `Events API v2`).
routing_key:
# The PagerDuty integration key (when using PagerDuty integration type `Prometheus`).
service_key:
# The URL to send API requests to
[ url: | default = global.pagerduty_url ]
# The client identification of the Alertmanager.
[ client: | default = '{{ template "pagerduty.default.client" . }}' ]
# A backlink to the sender of the notification.
[ client_url: | default = '{{ template "pagerduty.default.clientURL" . }}' ]
# A description of the incident.
[ description: | default = '{{ template "pagerduty.default.description" .}}' ]
# Severity of the incident.
[ severity: | default = 'error' ]
# A set of arbitrary key/value pairs that provide further detail
# about the incident.
[ details: { : , ... } | 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 to attach to the incident.
images:
[ ... ]
# Links to attach to the incident.
links:
[ ... ]
# The HTTP client's configuration.
[ http_config: | default = global.http_config ]
这些字段记录在PagerDuty API文档中。
href:
source:
alt:
这些字段记录在PagerDuty API文档中。
href:
text:
通过Pushover API发送Pushover通知。
# Whether or not to notify about resolved alerts.
[ send_resolved: | default = true ]
# The recipient user’s user key.
user_key:
# Your registered application’s API token, see https://pushover.net/apps
token:
# Notification title.
[ title: | default = '{{ template "pushover.default.title" . }}' ]
# Notification message.
[ message: | default = '{{ template "pushover.default.message" . }}' ]
# A supplementary URL shown alongside the message.
[ url: | default = '{{ template "pushover.default.url" . }}' ]
# Priority, see https://pushover.net/api#priority
[ priority: | default = '{{ if eq .Status "firing" }}2{{ else }}0{{ end }}' ]
# How often the Pushover servers will send the same notification to the user.
# Must be at least 30 seconds.
[ retry: | default = 1m ]
# How long your notification will continue to be retried for, unless the user
# acknowledges the notification.
[ expire: | default = 1h ]
# The HTTP client's configuration.
[ http_config: | default = global.http_config ]
Slack通知通过Slack webhooks发送。通知包含附件。
# Whether or not to notify about resolved alerts.
[ send_resolved: | default = false ]
# The Slack webhook URL.
[ api_url: | default = global.slack_api_url ]
# The channel or user to send notifications to.
channel:
# API request data as defined by the Slack webhook API.
[ icon_emoji: ]
[ icon_url: ]
[ link_names: | default = false ]
[ username: | default = '{{ template "slack.default.username" . }}' ]
# The following parameters define the attachment.
actions:
[ ... ]
[ callback_id: | default = '{{ template "slack.default.callbackid" . }}' ]
[ color: | default = '{{ if eq .Status "firing" }}danger{{ else }}good{{ end }}' ]
[ fallback: | default = '{{ template "slack.default.fallback" . }}' ]
fields:
[ ... ]
[ footer: | default = '{{ template "slack.default.footer" . }}' ]
[ pretext: | default = '{{ template "slack.default.pretext" . }}' ]
[ short_fields: | default = false ]
[ text: | default = '{{ template "slack.default.text" . }}' ]
[ title: | default = '{{ template "slack.default.title" . }}' ]
[ title_link: | default = '{{ template "slack.default.titlelink" . }}' ]
[ image_url: ]
[ thumb_url: ]
# The HTTP client's configuration.
[ http_config: | default = global.http_config ]
这些字段记录在Slack API文档中,用于消息附件和交互式消息。
text:
type:
# Either url or name and value are mandatory.
[ url: ]
[ name: ]
[ value: ]
[ confirm: ]
[ style: | default = '' ]
这些字段记录在Slack API文档中。
text:
[ dismiss_text: | default '' ]
[ ok_text: | default '' ]
[ title: | default '' ]
这些字段记录在Slack API文档中。
title:
value:
[ short: | default = slack_config.short_fields ]
OpsGenie通知是通过OpsGenie API发送的。
# Whether or not to notify about resolved alerts.
[ send_resolved: | default = true ]
# The API key to use when talking to the OpsGenie API.
[ api_key: | default = global.opsgenie_api_key ]
# The host to send OpsGenie API requests to.
[ api_url: | default = global.opsgenie_api_url ]
# Alert text limited to 130 characters.
[ message: ]
# A description of the incident.
[ description: | default = '{{ template "opsgenie.default.description" . }}' ]
# A backlink to the sender of the notification.
[ source: | default = '{{ template "opsgenie.default.source" . }}' ]
# A set of arbitrary key/value pairs that provide further detail
# about the incident.
[ details: { : , ... } ]
# List of responders responsible for notifications.
responders:
[ - ... ]
# Comma separated list of tags attached to the notifications.
[ tags: ]
# Additional alert note.
[ note: ]
# Priority level of alert. Possible values are P1, P2, P3, P4, and P5.
[ priority: ]
# The HTTP client's configuration.
[ http_config: | default = global.http_config ]
# Exactly one of these fields should be defined.
[ id: ]
[ name: ]
[ username: ]
# "team", "user", "escalation" or schedule".
type:
VictorOps通知通过VictorOps API发送
# Whether or not to notify about resolved alerts.
[ send_resolved: | default = true ]
# The API key to use when talking to the VictorOps API.
[ api_key: | default = global.victorops_api_key ]
# The VictorOps API URL.
[ api_url: | default = global.victorops_api_url ]
# A key used to map the alert to a team.
routing_key:
# Describes the behavior of the alert (CRITICAL, WARNING, INFO).
[ message_type: | default = 'CRITICAL' ]
# Contains summary of the alerted problem.
[ entity_display_name: | default = '{{ template "victorops.default.entity_display_name" . }}' ]
# Contains long explanation of the alerted problem.
[ state_message: | default = '{{ template "victorops.default.state_message" . }}' ]
# The monitoring tool the state message is from.
[ monitoring_tool: | default = '{{ template "victorops.default.monitoring_tool" . }}' ]
# The HTTP client's configuration.
[ http_config: | default = global.http_config ]
Webhook接收器允许配置通用接收器。
# Whether or not to notify about resolved alerts.
[ send_resolved: | default = true ]
# The endpoint to send HTTP POST requests to.
url:
# The HTTP client's configuration.
[ http_config: | default = global.http_config ]
Alertmanager将以以下JSON格式向配置的端点发送HTTP POST请求:
{
"version": "4",
"groupKey": , // key identifying the group of alerts (e.g. to deduplicate)
"status": "",
"receiver": ,
"groupLabels":
有此功能的集成列表 。
微信通知通过WeChat API发送。
# Whether or not to notify about resolved alerts.
[ send_resolved: | default = false ]
# The API key to use when talking to the WeChat API.
[ api_secret: | default = global.wechat_api_secret ]
# The WeChat API URL.
[ api_url: | default = global.wechat_api_url ]
# The corp id for authentication.
[ corp_id: | default = global.wechat_api_corp_id ]
# API request data as defined by the WeChat API.
[ message: | default = '{{ template "wechat.default.message" . }}' ]
[ agent_id: | default = '{{ template "wechat.default.agent_id" . }}' ]
[ to_user: | default = '{{ template "wechat.default.to_user" . }}' ]
[ to_party: | default = '{{ template "wechat.default.to_party" . }}' ]
[ to_tag: | default = '{{ template "wechat.default.to_tag" . }}' ]