Prometheus-定期执行的规则

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Prometheus-定期执行的规则相关的知识,希望对你有一定的参考价值。

参考技术A prometheus可定期执行的规则包括:记录规则(recording rules)和告警规则(alerting rules)

记录规则

目的:使用户可以预先计算经常需要 或者 计算量大的表达式,并将计算结果保存为一组新的时间序列,由此实现对复杂查询的PromQL语句的性能优化并提高查询效率

配置记录规则

记录规则的计算频率由prometheus配置文件中global块下的evaluation_interval参数配置;也可以在recording rules中每个记录规则中配置,配置位置为和name、rules平级的interval字段中配置

prometheus加载记录规则的配置,在rule_files块下进行配置;记录规则的文件名称建议命名为xxx_rules.yaml

可以使用工具prom tool来检查配置文件的语法是否正确

记录规则的格式

groups:

  [- <rule_group>] ###这里是配置的一个个规则组

规则组的格式(即:rule_group的格式)

name: <string> #规则组名称必须是唯一的

interval: <duration> #规则评估间隔时间

rules:

  [- <rule>] #要进行评估的规则

规则的格式(即:rule的格式)

record: <string> #输出的时间序列名称,必须是一个有效的metric名称

expr: <string> #要计算的PromQL表达式,结果记录为一组新的时间序列,新的时间序列的名称由record字段设置

labels: #添加或者覆盖的标签

  [<labelname>: <labelvalue>]

记录规则说明

1. prometheus会在后台完成rule中expr字段定义的PromQL表达式计算,并且将计算结果保存到新的时间序列,新的时间序列的名称为record字段配置的值,同时还可以通过labels字段为时间序列添加额外的标签;

2. 在Prometheus 1.x中,记录规则都是同时运行的,这意味着一条规则依赖另一条规则的结果进行计算是不安全的;在Prometheus 2.x中,规则组内的规则是按顺序执行的,因此一条规则的计算可以依赖另一条规则的计算结果

告警规则

用途:基于PromQL表达式定义告警条件,并将有关触发告警条件的通知发送到外部服务器

配置告警规则

prometheus加载告警规则的配置,在rule_files块下进行配置;记录规则的文件名称建议命名为xxx_alerts.yaml

告警规则格式

groups:

  [- <alert_rule_group>] ###这里配置的是一个个的告警规则组

告警规则组的格式(即:alert_rule_group的格式)

name: <string>

rules:

  [- <alert_rule>] #要计算和评估的告警规则

告警规则的格式(即:alert_rule的格式)

alert: <string> #告警规则的名称

expr: <string> #基于PromQL表达式的告警触发条件,用于计算是否有时间序列满足该条件

[ for: <duration> | default=0s] #评估等待时间,可选参数,用于表示在触发告警之前expr中表达式必须为true时持续的时间长度,在等待期间新产生告警的状态为pending

labels: #允许指定一组附加标签并附加到告警,任何现有的冲突标签都将被覆盖,标签值可以模板化

  [ <labelname>: <tmpl_string> ]

annotations: #用于指定一组信息标签,可用于存储更长的附加信息,例如:告警说明或者运行手册链接

  [ <labelname>: <tmpl_string>>]    

Prometheus Alert 不适用于基于事件的指标

【中文标题】Prometheus Alert 不适用于基于事件的指标【英文标题】:Prometheus Alert not working for an event based metric 【发布时间】:2021-02-02 16:28:51 【问题描述】:

我有一个指标,仅在发生特定事件时才发送数据。换句话说,它不会每 15 秒定期进行一次连续遥测,但它会针对单个数据点进行。现在,我配置了一个警报来检查指标是否存在(规则中没有包含任何“for”条件,因为不需要等待),应该触发一个警报。

发生的情况是,当指标在 Prometheus 中可用时,该规则会在 Prometheus UI 中激活为黄色,但不会触发,而是在 15 秒内自动消失。我是否需要做一些额外的设置来提醒基于事件的指标仅持续 1 个单个数据点或 15 秒?

谢谢, 阿纳夫

【问题讨论】:

您能否添加一个衡量这些事件的指标,而不是使用仪表(我假设)? 实际上,我是在灭霸标尺组件中尝试这个,而不是在普罗米修斯中。这会有什么不同吗?因为相同的查询和警报在 Prometheus 中运行良好。但是,当我在 Thanos 而不是 Prometheus 中部署时,基于事件的警报停止工作,如果遥测持续时间不超过 15 秒,它会自行解决。 K_Event_CountEvId="24171643",EvMessage="fan alarm" - 这是查询。该指标是连续的,但具有特定值的标签是在特定情况下生成的,并且仅在一个数据点或 15 秒内发送。 【参考方案1】:

我用了 1m 的 count_over_time 并且成功了。尽管数据只存在了 15 秒,但查询使其持续了 1m,并且警报正确触发。

【讨论】:

以上是关于Prometheus-定期执行的规则的主要内容,如果未能解决你的问题,请参考以下文章

小姐姐带你入门Alertmanager与Prometheus告警规则

开箱即用的 Prometheus 告警规则集

chartjs-plugin-datasource-prometheus 展示prometheus 数据

prometheus配置alertmanager完整过程

Prometheus SNMP Exporter

升级到 Spring Boot 2 后,如何向 prometheus 公开缓存指标?