Оповещения по метрикам

Правило оповещения по метрике следит за агрегатом метрики (avg/max/p95 и т. п.) на скользящем окне времени и открывает инцидент, когда значение пробивает заданный порог. Открытие и закрытие инцидента каждое шлёт ровно одно уведомление в каналы доставки проекта — те же email/webhook/Telegram, что и у алертов по проблемам (см. Оповещения).

Где находится

Значок колокольчика в левой рельсе → «Оповещения» → группа «Правила» → «По метрикам» (или напрямую /projects/{id}/metrics/alerts). Управлять правилами может участник команды проекта (оператор), а также owner и admin организации — см. Роли и права.

Создание правила

Кнопка «Новое правило» открывает форму:

ПолеЧто указать
МетрикаТочное имя метрики, как оно приходит по OTLP (например, http.server.duration) — регистр и написание должны совпадать буква в букву
Агрегацияavg, max, min, sum, p50, p95, p99
Условие> (больше) или < (меньше)
ПорогЧисло, с которым сравнивается агрегат. Должно быть конечным — NaN/Infinity отклоняются с ошибкой «порог должен быть конечным числом»
Окно (с)Ширина скользящего окна в секундах, положительное целое (например, 300 — 5 минут)
ОкружениеНеобязательно; точное совпадение. Пусто = любое окружение
Ключ лейбла / Значение лейблаНеобязательный доп. фильтр по одному лейблу метрики (точное совпадение); заполнять либо оба поля, либо ни одного

Доступные агрегации

АгрегацияСмысл
avgСреднее значение за окно
maxМаксимум за окно
minМинимум за окно
sumСумма значений за окно
p50 / p95 / p99Перцентиль (только для метрик типа histogram; для остальных типов агрегация не сработает содержательно)

Условия

УсловиеСимволПробитиеВосстановление (закрытие инцидента)
gt>текущее значение > порогатекущее значение порога × 0.95
lt<текущее значение < порогатекущее значение порога × 1.05

Восстановление намеренно требует отойти от порога на 5% в безопасную сторону (гистерезис) — иначе значение, колеблющееся ровно на границе, открывало и закрывало бы инцидент на каждой проверке.

Как это оценивается

Фоновый оценщик проходит по всем включённым правилам раз в минуту — это значение по умолчанию, меняется через GOTCHA_METRIC_EVAL_INTERVAL_SECONDS (секунды).

Важно: в режимах web и ingest оценщики по умолчанию не запускаются — правило будет включено и не сработает никогда. Включите их явно через GOTCHA_EVALUATORS_ENABLED=true либо разверните инстанс в режиме all или uptime. На каждом проходе для правила берётся агрегат метрики за окно [сейчас − окно, сейчас) — тем же запросом, что рисует график на детальной странице метрики. Если данных за окно нет вовсе — решение не принимается (инцидент не открывается и не закрывается, ждём следующего прохода).

Дальше:

  • нет открытого инцидента и значение пробило порог → открывается инцидент, уходит уведомление «сработало»;
  • инцидент уже открыт и значение всё ещё нарушено (или в «мёртвой зоне» гистерезиса) → инцидент обновляется (текущее значение, пик — самое «плохое» значение за всё время инцидента), уведомление не дублируется;
  • инцидент открыт и значение восстановилось (см. таблицу выше) → инцидент закрывается, уходит уведомление «решено».

На один rule одновременно может быть только один открытый инцидент.

Инциденты

Ниже таблицы правил на той же странице — список инцидентов проекта (до 100 последних): статус (Открыт / Решён), пиковое и текущее значение агрегата, время начала. Пустое состояние подсказывает, что инцидент появится здесь, как только метрика пробьёт порог правила.

Уведомления и каналы

Уведомления об открытии/закрытии инцидента ставятся в очередь на все включённые каналы доставки проекта — те же, что настроены в Оповещениях (email/webhook/Telegram), отдельных каналов для метрик заводить не нужно. Email пропускается с предупреждением в логе, если SMTP не настроен (см. Конфигурацию). Появятся ли в уведомлении имя метрики, значения и порог, решает та же по-получательная политика доверия, что и у алертов по проблемам: детали уходят только доверенным получателям (вашей собственной инфраструктуре; как определяется доверие — в Оповещениях), остальным — ссылка на страницу правил и вид события, а GOTCHA_EXTERNAL_CHANNEL_DETAILS_ENABLED=true снимает ограничение для всех.

Порог на графике

Если на детальной странице метрики (/projects/{id}/metrics/{name}) выбрана та же агрегация, что и в правиле, и правило включено, — его порог рисуется горизонтальной пунктирной линией с подписью условия (например, p95 > 500). Подробнее о самом графике — в Метриках.

Пример: алерт по p95 latency > 500 мс за 5 минут

Допустим, приложение шлёт histogram-метрику http.server.duration (юнит ms) — см. Метрики, как её отправить по OTLP.

  1. Откройте /projects/{id}/metrics/http.server.duration, чтобы убедиться, что точки приходят, и свериться с точным именем/юнитом метрики.
  2. Перейдите в «Оповещения → Правила → По метрикам» и нажмите «Новое правило».
  3. Заполните форму:
    • Метрика: http.server.duration
    • Агрегация: p95
    • Условие: >
    • Порог: 500
    • Окно (с): 300 (это и есть 5 минут)
    • Окружение: production (необязательно, но полезно — иначе окно смешает прод и локальную разработку)
    • Ключ/значение лейбла — оставить пустыми
  4. Нажмите «Создать правило». В таблице появится строка http.server.duration | p95 > 500 | 300s | production | Включено.
  5. Как только p95 за последние 5 минут превысит 500 (в тех же единицах, что несёт метрика — Gotcha не конвертирует юниты), откроется инцидент, и уведомление уйдёт во включённые каналы проекта. На графике метрики с агрегацией p95 появится пунктирная линия на отметке 500.
  6. Когда p95 опустится ниже 475 (500 × 0.95), инцидент закроется, и придёт второе уведомление — «решено».

Редактирование и выключение правила

Кнопка «Редактировать» в строке таблицы открывает модальное окно «Правка правила» с теми же полями, что и при создании, плюс флажок «Включено». Правка — только для оператора проекта, как и создание.

  • Изменение условия (метрика, агрегация, порог, окно, фильтры) вступает в силу со следующего цикла проверки: открытый инцидент правила пересчитывается по новому условию — закрывается сам, если оно больше не нарушено, либо продолжается. Новых уведомлений об открытии из-за правки не будет: инцидент тот же.
  • Выключение (снятый флажок «Включено») сразу и атомарно закрывает открытый инцидент правила — в той же транзакции, что сохраняет правило; инцидент остаётся в истории со статусом «Решён». Уведомление о восстановлении не отправляется: восстановления не было, правило выключил оператор. Выключенное правило оценщик не рассматривает вовсе, пока его не включат снова.
  • Включение обратно ничего не открывает задним числом — первый цикл проверки после включения решает по текущему значению агрегата.

Выключение — правильный способ временно замолчать правило, сохранив его настройки и историю инцидентов.

Удаление правила

Кнопка «Удалить» в строке таблицы правил удаляет его после подтверждения на отдельной странице. Вместе с правилом удаляются все его инциденты — открытые и закрытые (связь в базе каскадная): открытый инцидент не «закрывается», а исчезает, и уведомление о восстановлении по нему не отправляется. Нужно прекратить срабатывания, но сохранить историю — выключите правило, а не удаляйте.

Смотрите также

  • Метрики — что такое метрика, как её отправлять, детальный график.
  • Оповещения — каналы доставки, алерты по проблемам, лог неудачных доставок.