Prometheus 教程

Prometheus 定义记录规则

Prometheus 支持两种类型的规则,这些规则可以配置,然后定期评估:记录规则和警报规则。要在 Prometheus 中包含规则,需要创建一个包含必要规则语句的文件,并让 Prometheus 通过 Prometheus 配置中的 rule_files 字段加载该文件。

注意:在运行时,可通过向 Prometheus 进程发送 SIGHUP 信号来重新加载规则文件。只有在所有规则文件格式良好的情况下,更改才会被应用。

规则语法检查

要在不启动 Prometheus 服务器的情况下快速检查规则文件的语法是否正确,可以使用 Prometheus 的 promtool 命令行实用工具:

promtool check rules /path/to/example.rules.yml

promtool 命令是 prometheus 安装包的一部分。当文件语法有效时,检查程序会将解析后的规则文本打印到标准输出,然后以 0 返回状态退出。如果出现任何语法错误或输入参数无效,它会在标准错误中打印错误信息,并以 1 返回状态退出。

记录规则

通过记录规则,可以预先计算经常需要或计算成本较高的表达式,并将其结果保存为一组新的时间序列。这样,查询预计算结果往往比每次执行原始表达式要快得多。这对于每次刷新都需要重复查询相同表达式的仪表盘来说尤其有用。

记录和警报规则存在于规则组中,组内的规则按固定间隔顺序运行,评估时间相同。记录规则的名称必须是有效的度量名称,警报规则的名称必须是有效的标签值。

规则文件的语法如下:

groups:
  # 见 <rule_group> 章节
  [ - <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 ]

rules:
  # 见 <rule> 章节
  [ - <rule> ... ]

<rule>

记录规则的语法:

# 要输出到的时间序列的名称,必须是有效的度量名称
record: <string>

# 要评估的 PromQL 表达式。每个评估周期都会在当前时间进行评估,
# 并将结果记录为一组新的时间序列,其度量名称由 "record" 提供。
expr: <string>

# 在存储结果之前要添加或覆盖的标签
labels:
  [ <labelname>: <labelvalue> ]

警报规则的语法:

# 警报的名称,必须是有效的标签值
alert: <string>

# 要评估的 PromQL 表达式。每个评估周期都会在当前时间对其进行评估,
# 评估后的所有时间序列都会成为 pending/firing 状态警报
expr: <string>

# 警报一旦返回了这么长时间,就被认为是触发的(即报警持续了这么长时间)
# 尚未触发足够长时间的警报被视为 pending 状态的警报
[ for: <duration> | default = 0s ]

# 触发警报的条件解除后,警报会持续触发多长时间。
[ keep_firing_for: <duration> | default = 0s ]

# 为每个警报添加或覆盖的标签
labels:
  [ <labelname>: <tmpl_string> ]

# 为每个警报添加注释
annotations:
  [ <labelname>: <tmpl_string> ]

警报和系列的限制

可以为每个组配置由警报规则和系列生成的记录规则产生的警报限制。

当超过限制时,该规则产生的所有系列都将被丢弃,如果是警报规则,则该规则的所有警报(活动的、挂起的或不活动的)也将被清除。

该事件将被记录为评估中的错误,因此不会写入过时的标记。

导致规则评估失败

如果一个规则组在下一次评估开始前还未完成评估(由 evaluation_interval 定义),下一次评估将被跳过。规则组的后续评估将继续跳过,直到初始评估完成或超时为止。当这种情况发生时,记录规则产生的度量值就会出现缺口。每错过一次规则组迭代,rule_group_iterations_missed_total 指标就会递增一次。如下:

Prometheus 定义记录规则

上图中,总共有四次评估,但是第一次评估耗时太长,知道第四次评估才评估结束。那么,第二次、第三次评估将不会执行,rule_group_iterations_missed_total 指标的值将为 2。

说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号