告警规则允许您基于 Prometheus 表达式语言表达式定义告警条件,并将关于触发告警的通知发送到外部服务。每当告警表达式在给定时间点产生一个或多个向量元素时,对于这些元素的标签集,告警都被认为是活跃的。
告警规则在 Prometheus 中的配置方式与记录规则相同。
一个带有告警的规则文件示例如下:
groups:
- name: example
labels:
team: myteam
rules:
- alert: HighRequestLatency
expr: job:request_latency_seconds:mean5m{job="myjob"} > 0.5
for: 10m
keep_firing_for: 5m
labels:
severity: page
annotations:
summary: High request latency
可选的 for
子句使 Prometheus 在首次遇到新的表达式输出向量元素和将此元素的告警计数为触发之间等待一定的时间。在本例中,Prometheus 将检查告警是否在每次评估期间持续活跃 10 分钟,然后才触发告警。活跃但尚未触发的元素处于 pending 状态。没有 for
子句的告警规则将在首次评估时变为活跃状态。
还有一个可选的 keep_firing_for
子句,它告诉 Prometheus 在上次满足触发条件后,保持此告警触发指定的持续时间。这可以用于防止诸如告警抖动、由于数据丢失导致的错误解决等情况。没有 keep_firing_for
子句的告警规则将在首次评估条件未满足时停用(假设已满足上述任何可选的 for
持续时间)。
labels
子句允许指定一组要附加到告警的附加标签。任何现有的冲突标签都将被覆盖。标签值可以是模板化的。
annotations
子句指定一组信息性标签,这些标签可用于存储更长的附加信息,例如告警描述或 runbook 链接。注解值可以是模板化的。
标签和注解值可以使用控制台模板进行模板化。$labels
变量保存告警实例的标签键/值对。配置的外部标签可以通过 $externalLabels
变量访问。$value
变量保存告警实例的评估值。
# To insert a firing element's label values:
{{ $labels.<labelname> }}
# To insert the numeric expression value of the firing element:
{{ $value }}
示例
groups:
- name: example
rules:
# Alert for any instance that is unreachable for >5 minutes.
- alert: InstanceDown
expr: up == 0
for: 5m
labels:
severity: page
annotations:
summary: "Instance {{ $labels.instance }} down"
description: "{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 5 minutes."
# Alert for any instance that has a median request latency >1s.
- alert: APIHighRequestLatency
expr: api_http_request_latencies_second{quantile="0.5"} > 1
for: 10m
annotations:
summary: "High request latency on {{ $labels.instance }}"
description: "{{ $labels.instance }} has a median request latency above 1s (current value: {{ $value }}s)"
要手动检查哪些告警处于活动状态(pending 或 firing),请导航到您的 Prometheus 实例的 “Alerts” 选项卡。这将向您显示每个已定义告警当前处于活动状态的确切标签集。
对于 pending 和 firing 告警,Prometheus 还存储 ALERTS{alertname="<alert name>", alertstate="<pending or firing>", <additional alert labels>}
形式的合成时间序列。只要告警处于指示的活动(pending 或 firing)状态,样本值就设置为 1
,当不再是这种情况时,该序列被标记为陈旧。
Prometheus 的告警规则擅长找出现在哪里出了问题,但它们不是一个完全成熟的通知解决方案。还需要另一层来在简单的告警定义之上添加摘要、通知速率限制、静默和告警依赖关系。在 Prometheus 的生态系统中,Alertmanager 承担了这个角色。因此,可以将 Prometheus 配置为定期向 Alertmanager 实例发送关于告警状态的信息,然后 Alertmanager 负责分发正确的通知。
Prometheus 可以配置为通过其服务发现集成自动发现可用的 Alertmanager 实例。
本文档是开源的。请通过提交 issue 或 pull request 帮助改进它。