记录规则
配置规则
Prometheus 支持两种类型的规则,可以在配置文件中进行配置并定期计算:记录规则(recording rules)和告警规则(alerting rules)。要在 Prometheus 中使用规则,请创建包含必要规则语句的文件,并通过配置文件中的rule_files
字段让 Prometheus 加载该文件。规则文件使用 YAML 格式。
规则文件在运行时可以被重新加载,你只需要向 Prometheus 进程发送SIGHUP
即可。只有当所有规则文件格式正确时,更改才会被应用。
关于原生 Histogram(native histogram,实验性功能)的注释:原生 Histogram 目前总是以 Gauge Histogram 的形式被记录(目前如此)。大多数情况下,Prometheus 会自然地创建 Gauge Histogram,例如,在执行rate()
后。
检查规则语法
为了快速检查规则文件是否具有正确的语法而不必启动 Prometheus 服务器,你可以使用 Prometheus 的命令行工具promtool
:
promtool check rules /path/to/example.rules.yml
promtool
是 Prometheus 下载页面提供的工具。
如果文件语法有效,检查器将在标准输出上打印解析得到规则的文本表示,然后以0
返回状态退出。
如果有任何语法错误或无效输入参数,则在标准错误上打印错误消息并以1
返回状态退出。
记录规则
记录规则允许你预计算经常需要或昂贵的表达式并将结果保存为一组新的时间序列。每次查询预计算的结果通常比每次需要时执行原始表达式要快得多。这对于频繁刷新的仪表板特别有用,因为它们需要反复查询相同的表达式。
记录规则和告警规则存在于一个规则组中。组内的规则按照固定的间隔顺序执行,具有相同的评估时间。记录规则的名称必须是有效的指标名称。告警规则的名称必须是有效的标签值。
规则文件的语法如下:
groups: [ - <rule_group> ]
简单的规则文件示例如下:
groups: - name: example rules: - record: code:prometheus_http_requests_total:sum expr: sum by (code) (prometheus_http_requests_total)
<rule_group>
# 组的名称。必须在文件内唯一。name: <string>
# 组内规则的评估频率。[ interval: <duration> | default = global.evaluation_interval ]
# 评估每个告警规则和由记录规则产生的序列的限制数量。0 表示无限制。[ limit: <int> | default = 0 ]
# 为特定组的规则评估时间戳向过去偏移指定的一段时间。[ query_offset: <duration> | default = global.rule_query_offset ]
rules: [ - <rule> ... ]
<rule>
记录规则的语法如下:
# 输出的时间序列名称。必须是有效的指标名称。record: <string>
# 要评估的 PromQL 表达式。在每轮评估中,此表达式会在当前时间评估,# 并将结果记录为一组新的时间序列,其指标名称为给定的“record”。expr: <string>
# 在存储结果之前添加或覆盖的标签。labels: [ <labelname>: <labelvalue> ]
告警规则的语法如下:
# 告警的名称。必须是有效的标签值。alert: <string>
# 要评估的 PromQL 表达式。在每轮评估中,此表达式会在当前时间评估,# 并且所有结果时间序列都成为待处理/正在生效的告警。expr: <string>
# 告警一旦返回就会被认为正在生效。尚未达到足够长的告警被认为是待处理的。[ for: <duration> | default = 0s ]
# 告警触发条件清除后告警将继续生效的持续时间。[ keep_firing_for: <duration> | default = 0s ]
# 添加到每个告警的标签。labels: [ <labelname>: <tmpl_string> ]
# 添加到每个告警的注释。annotations: [ <labelname>: <tmpl_string> ]
有关命名由记录规则创建的指标的最佳实践,请参阅记录规则。
限制告警和序列
可以为告警规则和由记录规则产生的序列配置组限制。当超过限制时,由规则产生的所有序列都将被丢弃,并且如果是告警规则,则规则的所有活动、待处理或已取消的告警也将被清除。此事件将作为评估过程中的错误被记录,使得没有过期标记(stale marker)会被写入。
规则查询偏移量
这有助于确保底层指标已被接收并存储在 Prometheus 中。由于分布式系统的特性,指标可用性延迟很有可能发生在 Prometheus 作为 remote write(远程写入)目标运行时,但也有可能在抓取异常或评估间隔较短的情况下发生。
由于过于缓慢而失败的规则评估
如果规则组没有在下一个评估开始前(由evaluation_interval
定义)完成评估,则下一个评估将被跳过。后续对规则组的评估也将继续被跳过,直到初始评估完成或超时。当这种情况发生时,记录规则产生的指标将出现空白。每当规则组错过一次迭代时,rule_group_iterations_missed_total
指标将自增一次。
该文档基于 Prometheus 官方文档翻译而成。