Amazon Managed Service for Prometheus Alert Manager
简介
Amazon Managed Service for Prometheus (AMP) 支持两种类型的规则,即"记录规则"和"告警规则",可以从现有的 Prometheus 服务器导入,并按固定间隔进行评估。
告警规则允许客户基于 PromQL 和阈值定义告警条件。当告警规则的值超过阈值时,会向 Amazon Managed Service for Prometheus 中的 Alert Manager 发送通知,其功能与独立 Prometheus 中的 Alert Manager 类似。告警是 Prometheus 中告警规则处于活动状态时的结果。
告警规则文件
Amazon Managed Service for Prometheus 中的告警规则由 YAML 格式的规则文件定义,其格式与独立 Prometheus 中的规则文件相同。客户可以在一个 Amazon Managed Service for Prometheus workspace 中拥有多个规则文件。Workspace 是专用于 Prometheus metrics 存储和查询的逻辑空间。
规则文件通常包含以下字段:
groups:
- name:
rules:
- alert:
expr:
for:
labels:
annotations:
Groups: A collection of rules that are run sequentially at a regular interval
Name: Name of the group
Rules: The rules in a group
Alert: Name of the alert
Expr: The expression for the alert to trigger
For: Minimum duration for an alert\'s expression to be exceeding threshold before updating to a firing status
Labels: Any additional labels attached to the alert
Annotations: Contextual details such as a description or link
示例规则文件如下所示:
groups:
- name: test
rules:
- record: metric:recording_rule
expr: avg(rate(container_cpu_usage_seconds_total[5m]))
- name: alert-test
rules:
- alert: metric:alerting_rule
expr: avg(rate(container_cpu_usage_seconds_total[5m])) > 0
for: 2m
Alert Manager 配置文件
Amazon Managed Service for Prometheus Alert Manager 使用 YAML 格式的配置文件来设置告警(针对接收服务),其结构与独立 Prometheus 中的 Alert Manager 配置文件相同。配置文件由 Alert Manager 和模板的两个关键部分组成:
-
template_files,包含告警中注释和标签的模板,以
$value、$labels、$externalLabels和$externalURL变量的形式公开以便使用。$labels变量保存告警实例的标签键/值对。可以通过$externalLabels变量访问全局配置的外部标签。$value变量保存告警实例的评估值。.Value、.Labels、.ExternalLabels和.ExternalURL分别包含告警值、告警标签、全局配置的外部标签和外部 URL(通过--web.external-url配置)。 -
alertmanager_config,包含 Alert Manager 配置,使用与独立 Prometheus 中 Alert Manager 配置文件相同的结构。
同时包含 template_files 和 alertmanager_config 的示例 Alert Manager 配置文件如下所示:
template_files:
default_template: |
{{ define "sns.default.subject" }}[{{ .Status | toUpper }}{{ if eq .Status "firing" }}:{{ .Alerts.Firing | len }}{{ end }}]{{ end }}
{{ define "__alertmanager" }}AlertManager{{ end }}
{{ define "__alertmanagerURL" }}{{ .ExternalURL }}/#/alerts?receiver={{ .Receiver | urlquery }}{{ end }}
alertmanager_config: |
global:
templates:
- \'default_template\'
route:
receiver: default
receivers:
- name: \'default\'
sns_configs:
- topic_arn: arn:aws:sns:us-east-2:accountid:My-Topic
sigv4:
region: us-east-2
attributes:
key: severity
value: SEV2
告警的关键方面
创建 Amazon Managed Service for Prometheus Alert Manager 配置文件时,需要注意三个重要方面。
- 分组:这有助于将相似的告警收集到单个通知中,当故障或中断的爆炸半径较大影响多个系统且多个告警同时触发时非常有用。这也可用于按类别分组(例如节点告警、pod 告警)。Alert Manager 配置文件中的 route 块可用于配置此分组。
- 抑制:这是一种抑制某些通知的方式,以避免发送与已活动和已触发的告警相似的垃圾告警。inhibit_rules 块可用于编写抑制规则。
- 静默:告警可以在指定的持续时间内被静音,例如在维护窗口或计划中断期间。传入的告警在静默之前会被验证是否匹配所有相等或正则表达式条件。PutAlertManagerSilences API 可用于创建静默。