#prometheus
Вопрос:
Со следующей конфигурацией prometheus:
groups:
- name: backup
rules:
- alert: BackupTooOld
expr: time() - last_backup_success > 216000
# for: 1h # 1m # 1s # <-- Setting any of these causes it to fail
labels:
severity: critical
annotations:
summary: "Backup too old"
description: >-
Backup for {{ $labels.path }} is over 2.5 days old.
…и следующий тест:
rule_files:
- alert.rules
evaluation_interval: 1m
tests:
- name: backup
interval: 1h
input_series:
- series: 'last_backup_success{path="gmail"}'
values: '0x72'
- series: 'last_backup_success{path="drive"}'
values: '90000x72'
alert_rule_test:
- eval_time: 59h
alertname: BackupTooOld
exp_alerts: []
- eval_time: 63h
alertname: BackupTooOld
exp_alerts:
- exp_labels:
severity: critical
path: gmail
exp_annotations:
summary: Backup too old
description: Backup for gmail is over 2.5 days old.
…все работает. Однако изменение alert
правила для добавления любого ненулевого for
значения ( 1h
, 1m
, 1s
) приводит к сбою второго теста — независимо от того, насколько высоко я его установил eval_time
. Что я упускаю?
(Обоснование этой for
настройки заключается в том, что при загрузке первая проверка last_backup_success
занимает некоторое время. У меня есть тесты для других установленных предупреждений for
, которые, похоже, работают нормально.)
Комментарии:
1. Можете ли вы вкратце объяснить, почему вы используете «900×72»? Я пытаюсь проверить правила оповещения, основанные на времени, но я не могу этого сделать. Спасибо
2. Единица
time
измерения-секунды, поэтому 90 000 секунд-это 25 часов (чуть более одного дня). Идея здесь заключаетсяpath="drive"
в том, что на момент тестирования 63-25=38 часов назад, где пороговое значение равно 60 часам. Хотя я не совсем понимаю, почему выбрал такое высокое число.
Ответ №1:
Ненулевое for
значение требует, чтобы предупреждение срабатывало не менее двух evaluation_interval
секунд, чтобы убедиться, что оно охватывает необходимое количество времени.
Здесь это сочетается с тем, что ваши временные ряды разрежены, так как у них есть точка данных только один раз в час, поэтому наступает застой. Это нереалистичные тестовые данные, интервал в 1 м был бы лучше.
В примере комбинации предупреждение не будет срабатывать в 63 часа, но оно должно срабатывать с 63h1m по 63h5m с 1 for
м. A при длине более 5 м никогда не может выстрелить, учитывая эти данные испытаний.
Комментарии:
1. Спасибо! Действительно, изменение интервала на
1m
,input_series
длины на4320
и настройкиfor: 1h
приводит к успешному выполнению теста , если-и-только-еслиeval_time
для второго61h1m
значения или больше.