Прометей: оповещение об изменении стоимости

Я хочу быть предупрежден, если log_error_count увеличился как минимум на 1 за последнюю минуту.

Итак, изначально мой запрос выглядел так

ALERT BackendErrors
  IF rate(log_error_count[1m]) > 0
  FOR 1s
  ...

Но затем я попытался проверить график на работоспособность с помощью панели инструментов Prometheus.

Используя запрос

log_error_count

Мой график выглядит так

log_error_count

Когда я смотрю на график с запросом

rate(log_error_count[2m])

Мой график выглядит так

rate (log_error_count [2m])

Фактически, я также пробовал функции irate, changes и delta, и все они стали нулевыми.

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


person math4tots    schedule 09.05.2017    source источник
comment
Я отправлю это в список рассылки пользователей, поскольку требуется дополнительная информация о проблеме - groups.google.com/forum / #! forum / prometheus-users   -  person ConorB    schedule 10.05.2017
comment
Думаю, теперь вы можете использовать prometheus.io/docs/prometheus/latest/ Querying / functions / для этой цели.   -  person Chris Stryczynski    schedule 21.06.2020


Ответы (2)


У меня была аналогичная проблема с planetlabs / draino:
Я хотел иметь возможность определять, когда он истощает узел.
(К сожалению, они переносят свою минималистичную политику ведения журнала, которая имеет смысл для ведения журнала, на показатели, где это не имеет смысла ...)
Веб-страница конечной точки draino_pod_ip: 10002 / metrics полностью пуста .. .. не существует, пока не произойдет первая утечка ...
Мои потребности было немного сложнее обнаружить, мне пришлось иметь дело с метрикой, которая не существует, когда значение = 0 (также как при перезагрузке модуля).
Мне пришлось обнаружить переход от не существует -> 1, а от n -> n + 1.
Это то, что я придумал, обратите внимание, что метрика, которую я обнаружил, является целым числом, я не уверен, как это будет стоить с десятичными знаками, даже если это нужно настроить для ваших нужд, я думаю, это может помочь вам в правильное направление:


(absent(draino_cordoned_nodes_total offset 1m) == 1 and count(draino_cordoned_nodes_total) > -1)

^ создает сообщение 1, когда метрика переключается с "не существует" на "существует"

((draino_cordoned_nodes_total - draino_cordoned_nodes_total offset 1m) > 0)

^ создает мигание 1, когда оно увеличивается от n -> n + 1


Комбинируя 2:

(absent(draino_cordoned_nodes_total offset 1m) == 1 and count(draino_cordoned_nodes_total) > -1) or ((draino_cordoned_nodes_total - draino_cordoned_nodes_total offset 1m) > 0)

^ или объединение их обоих вместе позволило мне обнаружить изменения в виде единого всплеска 1 на графике графана, я думаю, это то, что вам нужно.

person neokyle    schedule 06.07.2019

У @neokyle есть отличное решение в зависимости от используемых вами метрик.

В моем случае мне нужно было решить аналогичную проблему. Проблема заключалась в том, что у меня также есть ярлыки, которые нужно включить в предупреждение. И было невозможно использовать отсутствие, так как это означало бы создание предупреждения для каждой метки. (Я использую Jsonnet, так что это возможно, но все же довольно раздражает!)

Ключевым моментом в моем случае было использование unless, который является оператором дополнения. Я написал примерно так:

(my_metric unless my_metric offset 15m) > 0

В результате будет получен ряд после перехода метрики от отсутствующего к отсутствующему с сохранением всех меток. Серия будет длиться до тех пор, пока есть смещение, так что это создаст пятнадцатиметровую отметку. Это не супер-интуитивно понятно, но я понимаю, что это правда, когда сами серии разные. Так что это не сработает, например, при изменении значения.

Вы можете перейти к добавлению or для (увеличение / дельта) ›0 в зависимости от того, с чем вы работаете. Это немного беспорядочно, но приведу пример:

(
  my_metric
  unless my_metric offset 15m
) > 0
or
(
  delta(
    my_metric[15m]
  )
) > 0
person Jacob Colvin    schedule 09.12.2020