告警规则
告警规则允许你基于 Prometheus 表达式语言表达式定义告警条件,并向外部服务发送有关触发告警的通知。每当告警表达式在给定时间点的结果为一个或多个向量元素时,这些元素的标签集将被视为活跃的。
定义告警规则
告警规则与记录规则可以以相同的方式在 Prometheus 中配置。
以下是一个包含告警的规则文件示例:
可选的for
子句使得 Prometheus 在首次遇到新表达式输出向量元素后等待一段时间,然后才将告警设置为 firing(触发)状态。也就是,Prometheus 将在每次评估期间检查告警是否持续活跃10分钟以上,然后触发告警。活跃但尚未进入 firing 状态的元素会处于 pending(等待)状态。
没有for
子句的告警规则将在首次评估时立即激活。
labels
子句允许指定一组附加标签,用于附加到告警上。现有的冲突标签将被覆盖。标签值可以进行模板化。
annotations
子句指定一组用于存储更详细信息(如告警描述或运行手册链接)的元数据标签。注释值可以进行模板化。
模板化
标签和注释值可以使用控制台模板进行模板化。$labels
变量持有告警实例的标签键/值对。配置的外部标签可以通过$externalLabels
变量访问。$value
变量持有告警实例计算的数值。
示例:
运行时检查告警
要手动检查当前哪些告警处于活跃状态(pending 或 firing),跳转至 Prometheus 实例的“Alerts”选项卡。这将显示当前处于活动状态的告警的确切标签集。
对于状态为 pending 和 firing 的告警,Prometheus 还存储了合成时间序列(synthetic time series),形式为ALERTS{alertname="<alert name>", alertstate="<pending or firing>", <additional alert labels>}
。样本在告警处于活跃状态时被设置为1
,当告警不再活跃时,该序列会被标记为过期。
发送告警通知
Prometheus 的告警规则擅长确定当前出了什么问题,但它们并不是完备的通知解决方案。因此,我们还需要另一层服务来添加总结、通知速率限制、静默和解决告警依赖性等功能。在 Prometheus 的生态系统中,Alertmanager 承担了这一角色。因此,Prometheus 可以配置为定期将告警状态信息发送到 Alertmanager 实例,然后 Alertmanager 负责分发正确的通知。
Prometheus 可以配置自动通过其服务发现功能发现可用的 Alertmanager 实例。
该文档基于 Prometheus 官方文档翻译而成。