Configuration/Recording rules
В prometheus'e есть два вида правил которые могут быть сконфигурированы и выполняться через регулярные интервалы:
- recording rules
- alerting rules
Правила нужно описать в отдельном файле в yaml и включить в основной конфиг через директиву rule_files
Файлы и правилами не подгружаются автоматически в процессе работы. Чтобы prometheus обновил зарелоадил их, нужно отправить ему SIGHUP
Все правила из файла применятся только если все они описаны корректно. Если хоть где-то ошибка (хоть в одном из множетства файлов), то не применится ни одно
Syntax-checking rules
Проверить файл с правилами на корректность можно утилитой promtool
root@two:~/prometheus-2.27.1.linux-amd64# ./promtool check rules prometheus.rules.yaml
Checking prometheus.rules.yaml
SUCCESS: 1 rules found
root@two:~/prometheus-2.27.1.linux-amd64# echo $?
0
root@two:~/prometheus-2.27.1.linux-amd64# ./promtool check rules prometheus.rules.incorrect.yaml
Checking prometheus.rules.incorrect.yaml
FAILED:
prometheus.rules.incorrect.yaml: yaml: unmarshal errors:
line 1: field gros not found in type rulefmt.RuleGroups
root@two:~/prometheus-2.27.1.linux-amd64# echo $?
1
Как видно выше, она выдает человекочитаемый результат, а так же соответствующий exitcode
Recording rules
Recording rules позволяют предподсчитывать частые или вычислительносложные выражения и сохранять их результат как новую таймсерию
Это особенно полезно для дашбордов (потому что они постоянно запрашивают одно и то же)
Правила записи и оповещений существуют в группе правил
А их имена должны соответствовать правилам именования метрик и лейблов соответственно
groups:
[ - <rule_group> ]
Пример:
groups:
- name: example
rules:
- record: job:http_inprogress_requests:sum
expr: sum by (job) (http_inprogress_requests)
-
<rule_group>
- содержит имя группы, интервал и сами правила. Должно быть уникальным в пределах файла -
<rule>
- описываются внутри группы. Содержит имя таймсерии в которую будет записывать результат выполнения выражения, само выражение в PromQL и лейблы
Правила алертинга описываются точно так же, только вместо 'record' пишется 'alert' и добавляется аннотация и продолжительность
No Comments