Архитектура алертинг-движка Grafana¶
Поверхностно алерт выглядит просто: правило, порог, уведомление. Но под капотом трудятся три независимых компонента, каждый со своим циклом жизни и ответственностью.
Двигатель: Scheduler + State Machine¶
Алертинг работает циклично. Каждые N минут планировщик (Scheduler) берёт Evaluation Group — группу правил, которая оценивается одновременно, — и запускает для неё полный цикл проверки.
Каждое правило в каждый момент времени находится в одном из четырёх состояний:
Normal → Pending → Alerting→ Firing → Resolved
- Normal — состояние метрики в норме. Пользователи спокойны.
- Pending — переходное состояние. Правило уже считает, что порог превышен, но ждёт подтверждения. В этом суть Pending Period: всплеск CPU до 80,01% на одну секунду не должен триггерить алерт. Только устойчивое превышение за заданный интервал (обычно 5 минут) вызовет переход в Alerting.
- Alerting→Firing — условие выполнено, отправка уведомления.
- Resolved — метрика пришла в норму, уведомление о восстановлении.
Evaluation Interval vs Pending Period¶
Evaluation Interval — с какой частотой Scheduler пересчитывает правило. Обычно 1 минута.
Pending Period — минимальное время, которое правило должно провести в состоянии Pending, прежде чем перейти в Alerting. Обычно 5 минут.
Так, при Evaluation Interval в 1 минуту и Pending Period в 5 минут, правило будет пересчитано 5 раз, прежде чем, наконец, отправить уведомление. Это фильтр от шума.
Состояния No Data и Error¶
Что делать, если запрос не вернул данные? Настройка No Data state:
- NoData — создать алерт без данных.
- OK — считать нормальным.
- Alerting — считать проблемой.
- Keep Last — сохранять последнее известное состояние.
Error state — при ошибке запроса или ошибке источника. Лучше ставить Alerting (не знаешь — значит проблема), чем OK (не знаешь — значит нет проблемы).
Multidimensional alerting¶
Правило «CPU > 80%» без группировки по хосту отслеживает только глобальное среднее. С массивом по host оно создаст по одному отдельному алерту на каждый хост. Хост server-01 — свой алерт, server-02 — свой. Это правильный подход: если упал server-01, а server-02 жив, не нужно всем разработчикам одновременно получать уведомление. Вы получите отдельный алерт про конкретный хост, с конкретным контекстом.
Folder и Evaluation Group¶
Правила живут в папках (Folders). Папка содержит Evaluation Group — множество правил, которые оцениваются одновременно. Это гарантирует, что правила внутри группы разделяют один интервал оценки и синхронно обновляются. Разные группы — разные интервалы. Группа «Инфраструктура» — каждую минуту. Группа «Бизнес-метрики» — каждые 15 минут. Так вы не перегружаете источник, но сохраняете быструю реакцию там, где это критично.