Выявление аномалий

Автоматическое выявление аномалий в Proto Observability Platform: что такое базовая линия, какие метрики профилируются автоматически, какие встроенные правила алертинга по ним работают и как добавить собственные метрики в профилирование через конфигурацию.

На этой странице:

Что это такое

Выявление аномалий — механизм Proto Observability Platform, который с помощью машинного обучения (ML) автоматически строит базовую линию (ожидаемый диапазон значений, baseline) для ключевых показателей каждого сервиса и ключевой транзакции. Базовая линия учитывает суточную и недельную сезонность и постоянно переобучается на свежих данных, поэтому не требует ручной настройки порогов — она подстраивается под нормальное поведение каждого сервиса.

Аномалией считается выход фактического значения за верхнюю границу ожидаемого диапазона. Базовую линию рассчитывает сервис proto-metric-analyzer.

Базовая линия по трём ключевым показателям сервиса Скриншот: базовая линия (серая область — ожидаемый диапазон) и фактические значения (линия) для вызовов, ошибок и времени отклика.

Для каждой профилируемой метрики платформа публикует сопутствующий набор метрик базовой линии с суффиксом _prophet и лейблом value_type: yhat — прогноз, yhat_lower и yhat_upper — нижняя и верхняя границы ожидаемого диапазона. На этих метриках строятся встроенные правила алертинга. Подробнее о метриках базовой линии — Метрики и выражения для правил.

Какие метрики профилируются

Из коробки базовая линия рассчитывается для следующих метрик:

КатегорияМетрикаПоказатель
Сервисыservices_callsколичество вызовов
Сервисыservices_calldurationвремя отклика
Сервисыservices_errorcallspercдоля вызовов с ошибками
Ключевые транзакцииcalls_keybusinesstransactioncountколичество вызовов
Ключевые транзакцииcalls_keybusinesstransactiondurationвремя отклика
Ключевые транзакцииcalls_keybusinesstransactionerrorpercдоля вызовов с ошибками
Хостыsystem_cpu_idleпростой CPU
Хостыsystem_mem_usableдоступная память

Для каждой из этих метрик автоматически публикуется набор метрик базовой линии <метрика>_prophet. Встроенные правила алертинга есть для метрик сервисов и ключевых транзакций (см. ниже). Для системных метрик базовая линия публикуется, но встроенного правила нет — при необходимости создайте собственное.

Встроенные правила выявления аномалий

Из коробки доступны правила алертинга в группе ANOMALY (критичность WARNING, срабатывание при выполнении условия в течение 7 минут). Каждое правило сравнивает фактическое значение метрики с верхней границей её базовой линии:

ПравилоМетрикаКогда срабатывает
Аномалия в количестве вызововservices_callsфактическое число вызовов выше ожидаемого диапазона
Аномалия во времени откликаservices_calldurationвремя отклика выше ожидаемого
Аномалия в количестве ошибокservices_errorcallspercдоля ошибок выше ожидаемой
Аномалия в количестве вызовов ключевой транзакцииcalls_keybusinesstransactioncountто же для ключевой транзакции
Аномалия во времени отклика ключевой транзакцииcalls_keybusinesstransactiondurationто же для ключевой транзакции
Аномалия в проценте ошибок ключевой транзакцииcalls_keybusinesstransactionerrorpercто же для ключевой транзакции

Встроенные правила в группе ANOMALY Скриншот: список правил, отфильтрованный по группе ANOMALY.

Все правила односторонние — срабатывают только при превышении верхней границы (value_type="yhat_upper") и только при наличии трафика. Дополнительные условия по трафику подавляют ложные срабатывания при простое сервиса и в период первичного обучения модели. Схема выражения:

sum(services_calls) by (service, service_id, service_group)
  > sum(services_calls_prophet{value_type="yhat_upper"}) by (service, service_id, service_group)
  and avg(services_calls) by (service, service_id, service_group) > 0

Эти правила встроенные: их нельзя редактировать или удалить, но можно отключить или создать копию и настроить уже копию — см. Настройка оповещений → Работа с правилами.

Как добавить метрики в профилирование

Список профилируемых метрик задаётся в конфигурации сервиса proto-metric-analyzer через переменные окружения — изменение кода не требуется. Доступны две переменные:

  • POBP_ADDITIONAL_METRICS_LIST — рекомендуемый способ расширения. Список метрик через ;, который добавляется к стандартному набору (с дедупликацией).
  • POBP_METRICS_LIST — полностью заменяет стандартный набор (тогда нужно перечислить и стандартные метрики, и новые).

В элементе списка можно указать селектор лейблов, например up{app="payments"} — каждая подходящая серия профилируется отдельно.

Пример для docker-compose (добавить APDEX сервисов и свою метрику):

services:
  proto-metric-analyzer:
    environment:
      POBP_ADDITIONAL_METRICS_LIST: "services_apdex;my_custom_metric"

После применения для новой метрики автоматически появятся метрики базовой линии <метрика>_prophet.

Дополнительные параметры

Поведение профилирования настраивается переменными окружения сервиса proto-metric-analyzer:

ПеременнаяПо умолчаниюНазначение
POBP_ROLLING_TRAINING_WINDOW_SIZE7dобъём истории для обучения модели
POBP_RETRAINING_INTERVAL_MINUTES120как часто переобучается модель
POBP_Z_THRESHOLD3.0чувствительность: ширина доверительного интервала (меньше — чувствительнее)
POBP_DIRECTION_DEFAULTbothнаправление аномалии: up / down / both

Что дальше