Как можно настроить Grafana для ловли крутого падения метри c от Прометея? - PullRequest
2 голосов
/ 02 апреля 2020

Мы используем Grafana для мониторинга определенных событий и срабатывания сигнализации. Данные хранятся в Prometheus (но мы не используем менеджер предупреждений Prometheus).

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

Image of Grafana dashboard with sine wave pattern - except for sharp drop

В этом случае ось Y для этот показатель c довольно низкий, и в одночасье (02: 00-07: 00 слева от графика) вы можете увидеть, что показатель c падает почти до нуля.

Мы хотели бы обнаружить резкое падение на правой стороне в 8 вечера. Мы обнаружили падение до нуля примерно в 9 часов вечера (плоская линия), но я хотел бы определить внезапное падение.

Наш запрос Прометея:

sum(rate({__name__=~"metric_name_.+"}[1m])) by (grouping)

Я пытался Рассмотрим несколько вещей, таких как:

sum(increase({__name__=~"metric_name_.+"}[1m])) by (grouping)

Но в целом все они в конечном итоге имеют похожий график, приведенный ниже, но с дисперсией по шкале оси Y и усложняют различие между ними " около нуля и тишины »и« около нуля, потому что показатели упали с обрыва ».

Какую комбинацию настроек Grafana и Prometheus мы можем использовать для эффективной идентификации этого изменения?

1 Ответ

0 голосов
/ 03 апреля 2020

Вы получили неправильную функцию: для датчика вы должны использовать функцию delta () . Он будет отображать падение в течение минуты:

sum(delta(rate({__name__=~"metric_name_.+"}[1m])[1m:])) by (grouping)

Следующий шаг - определить процент падения, который вызовет ошибку - с падением 80% (примечание: для ясности пропущен sum by(grouping)) :

(-100 * delta(rate({__name__=~"metric_name_.+"}[1m])[1m:]) / rate({__name__=~"metric_name_.+"}[1m] offset 1m)) > 80

Затем вы можете захотеть иметь оповещение о продолжительности после обнаружения падения. В этом случае вы должны использовать подзапросы или правило записи (названное здесь drop_rate_percent):

rules:
- record: metric_name_rate
  expr: sum(rate({__name__=~"metric_name_.+"}[1m])) by(grouping)

- record: drop_rate_percent
  expr: -100 * delta(metric_name_rate[1m]) / (metric_name_rate offset 1m)

- alert: SteepDrop
  expr: max_over_time(drop_rate_percent[15m]) > 80
...