Подсчет случаев падения процента между последовательными точками в движущемся окне - PullRequest
0 голосов
/ 01 мая 2019

Я хочу предупредить в Прометее на основе правила, которое на простом английском языке будет читать что-то вроде

alert if metric X has dropped once by 5% in the last 5 minutes.

Требованием для соблюдения этого правила является измерение падений в последовательных точках данных, которые происходят с интервалом в 1 минуту, и если падение в любой из точек данных больше или равно 5%, мы отправляем предупреждение.

Я использую комбинацию различных правил записи для достижения этой цели. Алгоритм, по которому я иду, следующий:

# First group of rules, runs every 1 minute
# Recording rule which measures the percentage drop between consecutive points
((idelta(metricX{job="A"}[2m]) / (metricX{job="A"} offset 1m)) * 100)

# Recording rule which generate a time series of 1 if percent drop is >= X% or 0 otherwise
<insert expression here>

# Second group of rules begins which runs every 5 minutes
# Alert rule which reads and sums the timeseries of 1's and 0's over the last 5 minutes and alerts if sum is greater than 0
sum_over_time(timeseries_1_0[5m]) > 0

Как мне написать второе правило записи? Я экспериментировал с зажимом / макс. Но я не думаю, что это то, что я хочу. Что мне поможет, так это конструкция if / else в promQL. Отсутствие предшествующего опыта в запросах временных рядов также не помогает. Любая помощь с этим очень ценится.

1 Ответ

0 голосов
/ 06 мая 2019

Это должно работать:

record: metricX:idelta_ratio
expr: ((idelta(metricX{job="A"}[2m]) / (metricX{job="A"} offset 1m)) * 100)

record: metricX:idelta_ratio_le-5
expr: metricX:idelta_ratio <= bool -5

alert: MetricXDroppedBy5Percent
expr: sum_over_time(metricX:idelta_ratio_le-5[5m]) > 0
...

Обратите внимание, что Прометей не гарантирует, что ваш показатель будет собираться ровно раз в минуту. Или ваши правила оцениваются ровно раз в минуту. И что вы жестко программируете диапазоны 1m и 2m в своих правилах, которые могут вести себя некорректно, если ваш интервал очистки когда-либо изменится.

...