Rules详解(二)
本章主要讲解Rules的俩种记录规则
alerting rules
警报规则 与recording rules
记录规则
Prometheus 支持两种类型的Rules,可以对其进行配置,然后定期进行运算:recording rules
与 alerting rules
,规则文件的计算频率与告警规则计算频率一致,
都是通过全局配置中的 evaluation_interval
定义。
alerting rules¶
要在Prometheus中使用Rules规则,就必须创建一个包含必要规则语句的文件,并让Prometheus通过Prometheus配置中的rule_files字段加载该文件,前面我们已经讲过了。
其实语法都一样,除了 recording rules
中的收集的指标名称 record: <string>
字段配置方式略有不同,其他都是一样的。
配置范例:
- alert: ServiceDown
expr: avg_over_time(up[5m]) * 100 < 50
annotations:
description: The service {{ $labels.job }} instance {{ $labels.instance }} is
not responding for more than 50% of the time for 5 minutes.
summary: The service {{ $labels.job }} is not responding
- alert: RedisDown
expr: avg_over_time(redis_up[5m]) * 100 < 50
annotations:
description: The Redis service {{ $labels.job }} instance {{ $labels.instance
}} is not responding for more than 50% of the time for 5 minutes.
summary: The Redis service {{ $labels.job }} is not responding
- alert: PostgresDown
expr: avg_over_time(pg_up[5m]) * 100 < 50
annotations:
description: The Postgres service {{ $labels.job }} instance {{ $labels.instance
}} is not responding for more than 50% of the time for 5 minutes.
summary: The Postgres service {{ $labels.job }} is not responding
recording rules¶
recording rules
是提前设置好一个比较花费大量时间运算或经常运算的表达式,其结果保存成一组新的是时间序列数据。当需要查询的时候直接会返回已经计算好的结果,这样会比直接查询快,同时也
减轻了PromQl的计算压力,同时对可视化查询的时候也很有用,可视化展示每次只需要刷新重复查询相同的表达式即可。
在配置的时候,除却 record: <string>
需要注意,其他的基本上是一样的,一个 groups
下可以包含多条规则 rules
,记录和警报规则保存在规则组内,组中的规则以规则的配置时间间隔顺序运算,也就是全局中的 evaluation_interval
设置。
配置范例:
groups:
- name: http_requests_total
rules:
- record: job:http_requests_total:rate10m
expr: sum by (job)(rate(http_requests_total[10m]))
lables:
team: operations
- record: job:http_requests_total:rate30m
expr: sum by (job)(rate(http_requests_total[30m]))
lables:
team: operations
上面的规则其实就是根据record规则中的定义,Prometheus 会在后台完成 expr
中定义的 PromQL 表达式计算过去的指标,以job为维度使用sum聚合运算符计算 http_requests_total
10m内的请求量,并且将计算结果保存到新的时间序列 job:http_requests_total:rate10m
中,
同时还可以通过 labels
为样本数据添加额外的自定义标签。