<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Документация Proto Observability Platform – Holt-Winters</title><link>/docs/tags/holt-winters/</link><description>Recent content in Holt-Winters on Документация Proto Observability Platform</description><generator>Hugo -- gohugo.io</generator><language>ru</language><atom:link href="/docs/tags/holt-winters/index.xml" rel="self" type="application/rss+xml"/><item><title>Alerting: Выявление аномалий</title><link>/docs/alerting/anomaly-detection/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/alerting/anomaly-detection/</guid><description>
&lt;p>На этой странице:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="#%d1%87%d1%82%d0%be-%d1%8d%d1%82%d0%be-%d1%82%d0%b0%d0%ba%d0%be%d0%b5">Что это такое&lt;/a>&lt;/li>
&lt;li>&lt;a href="#%d0%b0%d0%bb%d0%b3%d0%be%d1%80%d0%b8%d1%82%d0%bc%d1%8b-%d0%bf%d1%80%d0%be%d0%b3%d0%bd%d0%be%d0%b7%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d1%8f">Алгоритмы прогнозирования&lt;/a>
&lt;ul>
&lt;li>&lt;a href="#%d0%bf%d0%b5%d1%80%d0%b5%d0%be%d0%bf%d1%80%d0%b5%d0%b4%d0%b5%d0%bb%d0%b5%d0%bd%d0%b8%d0%b5-%d0%bc%d0%be%d0%b4%d0%b5%d0%bb%d0%b8-%d0%b4%d0%bb%d1%8f-%d0%be%d1%82%d0%b4%d0%b5%d0%bb%d1%8c%d0%bd%d0%be%d0%b9-%d0%bc%d0%b5%d1%82%d1%80%d0%b8%d0%ba%d0%b8">Переопределение модели для отдельной метрики&lt;/a>&lt;/li>
&lt;li>&lt;a href="#%d0%bd%d0%b0%d0%bf%d1%80%d0%b0%d0%b2%d0%bb%d0%b5%d0%bd%d0%b8%d0%b5-%d0%b0%d0%bd%d0%be%d0%bc%d0%b0%d0%bb%d0%b8%d0%b8">Направление аномалии&lt;/a>&lt;/li>
&lt;li>&lt;a href="#%d0%be%d0%b1%d1%83%d1%87%d0%b5%d0%bd%d0%b8%d0%b5-%d0%b8-%d0%bf%d1%80%d0%be%d0%b3%d1%80%d0%b5%d0%b2">Обучение и прогрев&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;a href="#%d0%bc%d0%b5%d1%82%d1%80%d0%b8%d0%ba%d0%b8-%d0%b1%d0%b0%d0%b7%d0%be%d0%b2%d0%be%d0%b9-%d0%bb%d0%b8%d0%bd%d0%b8%d0%b8-%d0%b8-%d1%81%d0%b8%d0%b3%d0%bd%d0%b0%d0%bb%d1%8b-%d0%b0%d0%bd%d0%be%d0%bc%d0%b0%d0%bb%d0%b8%d0%b9">Метрики базовой линии и сигналы аномалий&lt;/a>&lt;/li>
&lt;li>&lt;a href="#%d0%ba%d0%b0%d0%ba%d0%b8%d0%b5-%d0%bc%d0%b5%d1%82%d1%80%d0%b8%d0%ba%d0%b8-%d0%bf%d1%80%d0%be%d1%84%d0%b8%d0%bb%d0%b8%d1%80%d1%83%d1%8e%d1%82%d1%81%d1%8f">Какие метрики профилируются&lt;/a>&lt;/li>
&lt;li>&lt;a href="#%d0%b2%d1%81%d1%82%d1%80%d0%be%d0%b5%d0%bd%d0%bd%d1%8b%d0%b5-%d0%bf%d1%80%d0%b0%d0%b2%d0%b8%d0%bb%d0%b0-%d0%b2%d1%8b%d1%8f%d0%b2%d0%bb%d0%b5%d0%bd%d0%b8%d1%8f-%d0%b0%d0%bd%d0%be%d0%bc%d0%b0%d0%bb%d0%b8%d0%b9">Встроенные правила выявления аномалий&lt;/a>&lt;/li>
&lt;li>&lt;a href="#%d0%bf%d0%be%d0%b4%d0%b0%d0%b2%d0%bb%d0%b5%d0%bd%d0%b8%d0%b5-%d0%bb%d0%be%d0%b6%d0%bd%d1%8b%d1%85-%d1%81%d1%80%d0%b0%d0%b1%d0%b0%d1%82%d1%8b%d0%b2%d0%b0%d0%bd%d0%b8%d0%b9">Подавление ложных срабатываний&lt;/a>&lt;/li>
&lt;li>&lt;a href="#%d0%ba%d0%b0%d0%ba-%d0%b4%d0%be%d0%b1%d0%b0%d0%b2%d0%b8%d1%82%d1%8c-%d0%bc%d0%b5%d1%82%d1%80%d0%b8%d0%ba%d0%b8-%d0%b2-%d0%bf%d1%80%d0%be%d1%84%d0%b8%d0%bb%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5">Как добавить метрики в профилирование&lt;/a>&lt;/li>
&lt;li>&lt;a href="#%d0%b4%d0%be%d0%bf%d0%be%d0%bb%d0%bd%d0%b8%d1%82%d0%b5%d0%bb%d1%8c%d0%bd%d1%8b%d0%b5-%d0%bf%d0%b0%d1%80%d0%b0%d0%bc%d0%b5%d1%82%d1%80%d1%8b">Дополнительные параметры&lt;/a>&lt;/li>
&lt;li>&lt;a href="#%d1%87%d1%82%d0%be-%d0%b4%d0%b0%d0%bb%d1%8c%d1%88%d0%b5">Что дальше&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="что-это-такое">Что это такое&lt;/h2>
&lt;p>&lt;strong>Выявление аномалий&lt;/strong> — механизм Proto Observability Platform, который с помощью машинного обучения (ML) автоматически строит &lt;strong>базовую линию&lt;/strong> (ожидаемый диапазон значений, baseline) для ключевых показателей каждого сервиса и ключевой транзакции. Базовая линия учитывает суточную и недельную сезонность и постоянно переобучается на свежих данных, поэтому &lt;strong>не требует ручной настройки порогов&lt;/strong> — она подстраивается под нормальное поведение каждого сервиса.&lt;/p>
&lt;p>Аномалией считается выход фактического значения за границы ожидаемого диапазона; по умолчанию контролируются обе границы, направление настраивается — см. &lt;a href="#%d0%bd%d0%b0%d0%bf%d1%80%d0%b0%d0%b2%d0%bb%d0%b5%d0%bd%d0%b8%d0%b5-%d0%b0%d0%bd%d0%be%d0%bc%d0%b0%d0%bb%d0%b8%d0%b8">Направление аномалии&lt;/a>. Базовую линию рассчитывает сервис &lt;code>proto-metric-analyzer&lt;/code>.&lt;/p>
&lt;p>&lt;img src="images/baseline.png" alt="Базовая линия по трём ключевым показателям сервиса">
&lt;em>Скриншот: базовая линия (серая область — ожидаемый диапазон) и фактические значения (линия) для вызовов, ошибок и времени отклика.&lt;/em>&lt;/p>
&lt;h2 id="алгоритмы-прогнозирования">Алгоритмы прогнозирования&lt;/h2>
&lt;p>Прогноз для каждой метрики строится одним из трёх взаимозаменяемых алгоритмов. Алгоритм задаётся глобально и может быть переопределён для отдельной метрики.&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Имя модели&lt;/th>
&lt;th>Алгоритм&lt;/th>
&lt;th>Особенности&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>stl_zscore&lt;/code>&lt;/td>
&lt;td>Сезонно-трендовое разложение методом Loess (STL) с оценкой отклонения по остаткам (z-score)&lt;/td>
&lt;td>&lt;strong>Используется по умолчанию.&lt;/strong> Устойчив к выбросам, дёшев по ресурсам, поддерживает адаптивную дисперсию по времени суток&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>holtwinters&lt;/code>&lt;/td>
&lt;td>Тройное экспоненциальное сглаживание (Holt-Winters, &lt;code>ExponentialSmoothing&lt;/code>)&lt;/td>
&lt;td>Хорошо описывает плавный тренд с устойчивой сезонностью, поддерживает адаптивную дисперсию по времени суток&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>prophet&lt;/code>&lt;/td>
&lt;td>Аддитивная модель Prophet с суточной и недельной сезонностью&lt;/td>
&lt;td>Собственный механизм оценки неопределённости; полезен на длинных рядах с выраженными сезонными эффектами и пропусками данных&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>Модель по умолчанию для всех метрик задаётся переменной &lt;code>POBP_MODEL_DEFAULT&lt;/code> (по умолчанию &lt;code>stl_zscore&lt;/code>).&lt;/p>
&lt;h3 id="переопределение-модели-для-отдельной-метрики">Переопределение модели для отдельной метрики&lt;/h3>
&lt;p>Переменная &lt;code>POBP_MODEL_OVERRIDES&lt;/code> задаёт модель и, необязательно, направление аномалии для конкретных метрик. Формат записи — &lt;code>метрика:модель&lt;/code> либо &lt;code>метрика:модель:направление&lt;/code>, записи разделяются &lt;code>;&lt;/code>:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="nt">services&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">proto-metric-analyzer&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">environment&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">POBP_MODEL_DEFAULT&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;stl_zscore&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">POBP_MODEL_OVERRIDES&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;service_resp_time:stl_zscore:up;service_error_sum:stl_zscore:up;service_calls_sum:stl_zscore:down&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Неизвестное имя модели приводит к ошибке конфигурации при запуске; некорректное значение направления записывается в журнал как предупреждение, и для этой метрики применяется значение &lt;code>POBP_DIRECTION_DEFAULT&lt;/code> (переопределение модели при этом сохраняется).&lt;/p>
&lt;h3 id="направление-аномалии">Направление аномалии&lt;/h3>
&lt;p>Фильтр направления определяет, какая сторона выхода за границы диапазона считается аномалией:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Значение&lt;/th>
&lt;th>Что отмечается как аномалия&lt;/th>
&lt;th>Типичное применение&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>up&lt;/code>&lt;/td>
&lt;td>только превышение верхней границы&lt;/td>
&lt;td>время отклика, доля ошибок&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>down&lt;/code>&lt;/td>
&lt;td>только падение ниже нижней границы&lt;/td>
&lt;td>количество вызовов, доля успешных операций&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>both&lt;/code>&lt;/td>
&lt;td>обе стороны&lt;/td>
&lt;td>значение по умолчанию&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>Значение по умолчанию задаётся переменной &lt;code>POBP_DIRECTION_DEFAULT&lt;/code>, для отдельной метрики — третьим элементом в &lt;code>POBP_MODEL_OVERRIDES&lt;/code>.&lt;/p>
&lt;h3 id="обучение-и-прогрев">Обучение и прогрев&lt;/h3>
&lt;p>Каждая модель переобучается на &lt;strong>скользящем окне&lt;/strong> истории (&lt;code>POBP_ROLLING_TRAINING_WINDOW_SIZE&lt;/code>, по умолчанию &lt;code>7d&lt;/code>) с интервалом &lt;code>POBP_RETRAINING_INTERVAL_MINUTES&lt;/code> (по умолчанию 120 минут) и строит прогноз на горизонт &lt;code>POBP_FORECAST_HORIZON_MINUTES&lt;/code>. Горизонт должен с запасом перекрывать интервал переобучения плюс фактическую длительность цикла обучения: на больших каталогах метрик полное переобучение может занимать часы, и если горизонт исчерпается раньше следующего цикла, прогноз перестанет обновляться. Число одновременно обучаемых моделей ограничено &lt;code>POBP_PARALLELISM&lt;/code>, длительность обучения одной модели — &lt;code>POBP_TRAINING_TIMEOUT_SECONDS&lt;/code>.&lt;/p>
&lt;p>Модели &lt;code>stl_zscore&lt;/code> и &lt;code>holtwinters&lt;/code> не выполняют подгонку, пока не накоплено &lt;strong>не менее двух полных суточных циклов&lt;/strong> данных минутного разрешения (около 2 суток). До этого момента модель считается необученной, а публикация её прогноза пропускается — это защищает от «схлопнутого» коридора, который на короткой истории давал бы поток ложных срабатываний.&lt;/p>
&lt;div class="alert alert-info" role="alert">
&lt;h4 class="alert-heading">Историческое имя метрик&lt;/h4>
Метрики базовой линии публикуются с суффиксом &lt;code>_prophet&lt;/code> независимо от выбранного алгоритма. Суффикс сохранён для обратной совместимости с существующими дашбордами и правилами алертинга и &lt;strong>не означает&lt;/strong>, что расчёт выполняется моделью Prophet.
&lt;/div>
&lt;h2 id="метрики-базовой-линии-и-сигналы-аномалий">Метрики базовой линии и сигналы аномалий&lt;/h2>
&lt;p>Для каждой профилируемой метрики платформа публикует сопутствующий набор значений в метрике &lt;code>&amp;lt;метрика&amp;gt;_prophet&lt;/code>, различаемых лейблом &lt;code>value_type&lt;/code>:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>&lt;code>value_type&lt;/code>&lt;/th>
&lt;th>Тип&lt;/th>
&lt;th>Назначение&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>yhat&lt;/code>&lt;/td>
&lt;td>значение&lt;/td>
&lt;td>прогноз (центр ожидаемого диапазона)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>yhat_lower&lt;/code>&lt;/td>
&lt;td>значение&lt;/td>
&lt;td>нижняя граница ожидаемого диапазона&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>yhat_upper&lt;/code>&lt;/td>
&lt;td>значение&lt;/td>
&lt;td>верхняя граница ожидаемого диапазона&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>anomaly&lt;/code>&lt;/td>
&lt;td>0/1&lt;/td>
&lt;td>мгновенный признак аномалии в текущей точке&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>anomaly_severity&lt;/code>&lt;/td>
&lt;td>0.0–…&lt;/td>
&lt;td>степень отклонения от границы диапазона&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>anomaly_window_fraction&lt;/code>&lt;/td>
&lt;td>0.0–1.0&lt;/td>
&lt;td>доля аномальных точек в скользящем окне&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>anomaly_windowed&lt;/code>&lt;/td>
&lt;td>0/1&lt;/td>
&lt;td>&lt;strong>рекомендуемый сигнал для правил алертинга&lt;/strong>: поднимается, только когда доля аномальных точек в окне достигла порога&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>_stale&lt;/code>&lt;/td>
&lt;td>1&lt;/td>
&lt;td>прогноз устарел — модель давно не переобучалась или горизонт исчерпан&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>Подробнее о метриках базовой линии — &lt;a href="../metrics-and-expressions/">Метрики и выражения для правил&lt;/a>.&lt;/p>
&lt;h2 id="какие-метрики-профилируются">Какие метрики профилируются&lt;/h2>
&lt;p>Из коробки базовая линия рассчитывается для следующих метрик:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Категория&lt;/th>
&lt;th>Метрика&lt;/th>
&lt;th>Показатель&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Сервисы&lt;/td>
&lt;td>&lt;code>services_calls&lt;/code>&lt;/td>
&lt;td>количество вызовов&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Сервисы&lt;/td>
&lt;td>&lt;code>services_callduration&lt;/code>&lt;/td>
&lt;td>время отклика&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Сервисы&lt;/td>
&lt;td>&lt;code>services_errorcallsperc&lt;/code>&lt;/td>
&lt;td>доля вызовов с ошибками&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Ключевые транзакции&lt;/td>
&lt;td>&lt;code>calls_keybusinesstransactioncount&lt;/code>&lt;/td>
&lt;td>количество вызовов&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Ключевые транзакции&lt;/td>
&lt;td>&lt;code>calls_keybusinesstransactionduration&lt;/code>&lt;/td>
&lt;td>время отклика&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Ключевые транзакции&lt;/td>
&lt;td>&lt;code>calls_keybusinesstransactionerrorperc&lt;/code>&lt;/td>
&lt;td>доля вызовов с ошибками&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Хосты&lt;/td>
&lt;td>&lt;code>system_cpu_idle&lt;/code>&lt;/td>
&lt;td>простой CPU&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Хосты&lt;/td>
&lt;td>&lt;code>system_mem_usable&lt;/code>&lt;/td>
&lt;td>доступная память&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>Для каждой из этих метрик автоматически публикуется набор метрик базовой линии &lt;code>&amp;lt;метрика&amp;gt;_prophet&lt;/code>. Встроенные правила алертинга есть для метрик &lt;strong>сервисов&lt;/strong> и &lt;strong>ключевых транзакций&lt;/strong> (см. ниже). Для системных метрик базовая линия публикуется, но встроенного правила нет — при необходимости создайте собственное.&lt;/p>
&lt;h2 id="встроенные-правила-выявления-аномалий">Встроенные правила выявления аномалий&lt;/h2>
&lt;p>Из коробки доступны правила алертинга в группе &lt;code>ANOMALY&lt;/code> (критичность &lt;code>WARNING&lt;/code>, срабатывание при выполнении условия в течение 7 минут). Каждое правило сравнивает фактическое значение метрики с верхней границей её базовой линии:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Правило&lt;/th>
&lt;th>Метрика&lt;/th>
&lt;th>Когда срабатывает&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Аномалия в количестве вызовов&lt;/td>
&lt;td>&lt;code>services_calls&lt;/code>&lt;/td>
&lt;td>фактическое число вызовов выше ожидаемого диапазона&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Аномалия во времени отклика&lt;/td>
&lt;td>&lt;code>services_callduration&lt;/code>&lt;/td>
&lt;td>время отклика выше ожидаемого&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Аномалия в количестве ошибок&lt;/td>
&lt;td>&lt;code>services_errorcallsperc&lt;/code>&lt;/td>
&lt;td>доля ошибок выше ожидаемой&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Аномалия в количестве вызовов ключевой транзакции&lt;/td>
&lt;td>&lt;code>calls_keybusinesstransactioncount&lt;/code>&lt;/td>
&lt;td>то же для ключевой транзакции&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Аномалия во времени отклика ключевой транзакции&lt;/td>
&lt;td>&lt;code>calls_keybusinesstransactionduration&lt;/code>&lt;/td>
&lt;td>то же для ключевой транзакции&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Аномалия в проценте ошибок ключевой транзакции&lt;/td>
&lt;td>&lt;code>calls_keybusinesstransactionerrorperc&lt;/code>&lt;/td>
&lt;td>то же для ключевой транзакции&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>&lt;img src="images/anomaly-rules-list.png" alt="Встроенные правила в группе ANOMALY">
&lt;em>Скриншот: список правил, отфильтрованный по группе &lt;code>ANOMALY&lt;/code>.&lt;/em>&lt;/p>
&lt;p>Все правила &lt;strong>односторонние&lt;/strong> — срабатывают только при превышении верхней границы (&lt;code>value_type=&amp;quot;yhat_upper&amp;quot;&lt;/code>) и только при наличии трафика. Дополнительные условия по трафику подавляют ложные срабатывания при простое сервиса и в период первичного обучения модели. Схема выражения:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-promql" data-lang="promql">&lt;span class="line">&lt;span class="cl">&lt;span class="k">sum&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="nv">services_calls&lt;/span>&lt;span class="o">)&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">by&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="nv">service&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="nv">service_id&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="nv">service_group&lt;/span>&lt;span class="o">)&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="o">&amp;gt;&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">sum&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="nv">services_calls_prophet&lt;/span>&lt;span class="p">{&lt;/span>&lt;span class="nl">value_type&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="p">&amp;#34;&lt;/span>&lt;span class="s">yhat_upper&lt;/span>&lt;span class="p">&amp;#34;}&lt;/span>&lt;span class="o">)&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">by&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="nv">service&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="nv">service_id&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="nv">service_group&lt;/span>&lt;span class="o">)&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="ow">and&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">avg&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="nv">services_calls&lt;/span>&lt;span class="o">)&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">by&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="nv">service&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="nv">service_id&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="nv">service_group&lt;/span>&lt;span class="o">)&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">&amp;gt;&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Эти правила встроенные: их нельзя редактировать или удалить, но можно &lt;strong>отключить&lt;/strong> или &lt;strong>создать копию&lt;/strong> и настроить уже копию — см. &lt;a href="../configuration/#%d1%80%d0%b0%d0%b1%d0%be%d1%82%d0%b0-%d1%81-%d0%bf%d1%80%d0%b0%d0%b2%d0%b8%d0%bb%d0%b0%d0%bc%d0%b8">Настройка оповещений → Работа с правилами&lt;/a>.&lt;/p>
&lt;div class="alert alert-info" role="alert">
&lt;h4 class="alert-heading">Собственные правила — по оконному сигналу&lt;/h4>
&lt;p>Встроенные правила используют сравнение с границей диапазона, поэтому реагируют на одиночную аномальную точку. В собственных правилах предпочтительнее опираться на готовый оконный сигнал — он на порядок устойчивее к шуму:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-promql" data-lang="promql">&lt;span class="line">&lt;span class="cl">&lt;span class="k">max&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="nv">services_calls_prophet&lt;/span>&lt;span class="p">{&lt;/span>&lt;span class="nl">value_type&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="p">&amp;#34;&lt;/span>&lt;span class="s">anomaly_windowed&lt;/span>&lt;span class="p">&amp;#34;}&lt;/span>&lt;span class="o">)&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">by&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="nv">service&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="nv">service_id&lt;/span>&lt;span class="o">)&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">&amp;gt;&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;/div>
&lt;h2 id="подавление-ложных-срабатываний">Подавление ложных срабатываний&lt;/h2>
&lt;p>Помимо условий по трафику во встроенных правилах, в самом расчёте базовой линии работают четыре механизма.&lt;/p>
&lt;p>&lt;strong>Оконный сигнал аномалии.&lt;/strong> Отдельная аномальная точка почти всегда шум. Платформа ведёт скользящее окно длиной &lt;code>POBP_ANOMALY_WINDOW_MINUTES&lt;/code> (по умолчанию 30 минут), считает в нём долю аномальных точек (&lt;code>value_type=&amp;quot;anomaly_window_fraction&amp;quot;&lt;/code>) и поднимает флаг &lt;code>anomaly_windowed&lt;/code>, только когда доля достигла &lt;code>POBP_ANOMALY_WINDOW_FRACTION_THRESHOLD&lt;/code> (по умолчанию &lt;code>0.3&lt;/code>). Мгновенный флаг &lt;code>anomaly&lt;/code> при этом сохраняется для совместимости.&lt;/p>
&lt;p>&lt;strong>Защита от «отравления» модели.&lt;/strong> При переобучении точки ранее обнаруженных аномалий маскируются, чтобы прошлый инцидент не был усвоен моделью как нормальное поведение (&lt;code>POBP_MASK_ANOMALIES_IN_TRAINING&lt;/code>, по умолчанию включено). Если маскирование затронуло бы более &lt;code>POBP_MASK_CAP_FRACTION&lt;/code> обучающей выборки (по умолчанию 10 %), оно пропускается с предупреждением в журнале — это защищает метрики с длительной аварией от обучения на пустых данных.&lt;/p>
&lt;p>&lt;strong>Адаптивная дисперсия по времени суток.&lt;/strong> При включённом &lt;code>POBP_ADAPTIVE_VARIANCE&lt;/code> (по умолчанию включено) разброс остатков считается отдельно для каждого интервала суток размером &lt;code>POBP_VARIANCE_BUCKET_MINUTES&lt;/code> (по умолчанию 60 минут). Коридор автоматически расширяется в шумные часы и сужается в спокойные. Механизм применяется к моделям &lt;code>stl_zscore&lt;/code> и &lt;code>holtwinters&lt;/code>; &lt;code>prophet&lt;/code> использует собственную оценку неопределённости и не затрагивается.&lt;/p>
&lt;p>&lt;strong>Контроль прогрева.&lt;/strong> Пока не накоплено двух полных суточных циклов данных, модели &lt;code>stl_zscore&lt;/code> и &lt;code>holtwinters&lt;/code> не публикуют прогноз (см. &lt;a href="#%d0%be%d0%b1%d1%83%d1%87%d0%b5%d0%bd%d0%b8%d0%b5-%d0%b8-%d0%bf%d1%80%d0%be%d0%b3%d1%80%d0%b5%d0%b2">Обучение и прогрев&lt;/a>).&lt;/p>
&lt;p>Общая чувствительность задаётся множителем &lt;code>POBP_Z_THRESHOLD&lt;/code> (по умолчанию &lt;code>3.0&lt;/code>) — он применяется единообразно ко всем трём моделям: для &lt;code>stl_zscore&lt;/code> и &lt;code>holtwinters&lt;/code> это множитель среднеквадратичного отклонения остатков, для &lt;code>prophet&lt;/code> из него выводится ширина доверительного интервала. Уменьшение значения повышает чувствительность и число срабатываний, увеличение — снижает.&lt;/p>
&lt;h2 id="как-добавить-метрики-в-профилирование">Как добавить метрики в профилирование&lt;/h2>
&lt;p>Список профилируемых метрик задаётся в конфигурации сервиса &lt;code>proto-metric-analyzer&lt;/code> через переменные окружения — &lt;strong>изменение кода не требуется&lt;/strong>. Доступны две переменные:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>&lt;code>POBP_ADDITIONAL_METRICS_LIST&lt;/code>&lt;/strong> — рекомендуемый способ расширения. Список метрик через &lt;code>;&lt;/code>, который &lt;strong>добавляется&lt;/strong> к стандартному набору (с дедупликацией).&lt;/li>
&lt;li>&lt;strong>&lt;code>POBP_METRICS_LIST&lt;/code>&lt;/strong> — полностью &lt;strong>заменяет&lt;/strong> стандартный набор (тогда нужно перечислить и стандартные метрики, и новые).&lt;/li>
&lt;/ul>
&lt;p>В элементе списка можно указать селектор лейблов, например &lt;code>up{app=&amp;quot;payments&amp;quot;}&lt;/code> — каждая подходящая серия профилируется отдельно.&lt;/p>
&lt;p>Пример для &lt;code>docker-compose&lt;/code> (добавить APDEX сервисов и свою метрику):&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="nt">services&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">proto-metric-analyzer&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">environment&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">POBP_ADDITIONAL_METRICS_LIST&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;services_apdex;my_custom_metric&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>После применения для новой метрики автоматически появятся метрики базовой линии &lt;code>&amp;lt;метрика&amp;gt;_prophet&lt;/code>.&lt;/p>
&lt;div class="alert alert-warning" role="alert">
&lt;h4 class="alert-heading">Базовая линия — это не алерт&lt;/h4>
&lt;p>Профилирование метрики &lt;strong>не создаёт правило алертинга автоматически&lt;/strong>. Чтобы получать оповещения по новой метрике, добавьте собственное правило (см. &lt;a href="../configuration/#%d1%81%d0%be%d0%b7%d0%b4%d0%b0%d0%bd%d0%b8%d0%b5-%d0%bf%d1%80%d0%b0%d0%b2%d0%b8%d0%bb%d0%b0">Создание правила&lt;/a>), сравнив метрику с её верхней границей:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-promql" data-lang="promql">&lt;span class="line">&lt;span class="cl">&lt;span class="k">sum&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="nv">my_custom_metric&lt;/span>&lt;span class="o">)&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">by&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="nv">service&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="nv">service_id&lt;/span>&lt;span class="o">)&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="o">&amp;gt;&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">sum&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="nv">my_custom_metric_prophet&lt;/span>&lt;span class="p">{&lt;/span>&lt;span class="nl">value_type&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="p">&amp;#34;&lt;/span>&lt;span class="s">yhat_upper&lt;/span>&lt;span class="p">&amp;#34;}&lt;/span>&lt;span class="o">)&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">by&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="nv">service&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="nv">service_id&lt;/span>&lt;span class="o">)&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>или воспользовавшись оконным сигналом:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-promql" data-lang="promql">&lt;span class="line">&lt;span class="cl">&lt;span class="k">max&lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="nv">my_custom_metric_prophet&lt;/span>&lt;span class="p">{&lt;/span>&lt;span class="nl">value_type&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="p">&amp;#34;&lt;/span>&lt;span class="s">anomaly_windowed&lt;/span>&lt;span class="p">&amp;#34;}&lt;/span>&lt;span class="o">)&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">by&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">(&lt;/span>&lt;span class="nv">service&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="nv">service_id&lt;/span>&lt;span class="o">)&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">&amp;gt;&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;/div>
&lt;h2 id="дополнительные-параметры">Дополнительные параметры&lt;/h2>
&lt;p>Поведение профилирования настраивается переменными окружения сервиса &lt;code>proto-metric-analyzer&lt;/code>.&lt;/p>
&lt;p>&lt;strong>Выбор модели и направления&lt;/strong>&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Переменная&lt;/th>
&lt;th style="text-align:center">По умолчанию&lt;/th>
&lt;th>Назначение&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>POBP_MODEL_DEFAULT&lt;/code>&lt;/td>
&lt;td style="text-align:center">&lt;code>stl_zscore&lt;/code>&lt;/td>
&lt;td>модель по умолчанию: &lt;code>stl_zscore&lt;/code>, &lt;code>holtwinters&lt;/code> или &lt;code>prophet&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>POBP_MODEL_OVERRIDES&lt;/code>&lt;/td>
&lt;td style="text-align:center">—&lt;/td>
&lt;td>модель и направление для отдельных метрик: &lt;code>метрика:модель[:направление]&lt;/code>, через &lt;code>;&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>POBP_DIRECTION_DEFAULT&lt;/code>&lt;/td>
&lt;td style="text-align:center">&lt;code>both&lt;/code>&lt;/td>
&lt;td>направление аномалии по умолчанию: &lt;code>up&lt;/code> / &lt;code>down&lt;/code> / &lt;code>both&lt;/code>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>&lt;strong>Обучение&lt;/strong>&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Переменная&lt;/th>
&lt;th style="text-align:center">По умолчанию&lt;/th>
&lt;th>Назначение&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>POBP_ROLLING_TRAINING_WINDOW_SIZE&lt;/code>&lt;/td>
&lt;td style="text-align:center">&lt;code>7d&lt;/code>&lt;/td>
&lt;td>объём истории для обучения модели&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>POBP_RETRAINING_INTERVAL_MINUTES&lt;/code>&lt;/td>
&lt;td style="text-align:center">&lt;code>120&lt;/code>&lt;/td>
&lt;td>как часто переобучается модель&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>POBP_FORECAST_HORIZON_MINUTES&lt;/code>&lt;/td>
&lt;td style="text-align:center">&lt;code>max(240, интервал × 3)&lt;/code>&lt;/td>
&lt;td>горизонт прогноза; должен с запасом перекрывать интервал переобучения и длительность цикла обучения&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>POBP_PARALLELISM&lt;/code>&lt;/td>
&lt;td style="text-align:center">&lt;code>2&lt;/code>&lt;/td>
&lt;td>сколько моделей обучается одновременно; верхний предел зависит от числа ядер контейнера&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>POBP_TRAINING_TIMEOUT_SECONDS&lt;/code>&lt;/td>
&lt;td style="text-align:center">&lt;code>300&lt;/code>&lt;/td>
&lt;td>предельная длительность обучения одной модели&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>&lt;strong>Чувствительность и подавление ложных срабатываний&lt;/strong>&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Переменная&lt;/th>
&lt;th style="text-align:center">По умолчанию&lt;/th>
&lt;th>Назначение&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>POBP_Z_THRESHOLD&lt;/code>&lt;/td>
&lt;td style="text-align:center">&lt;code>3.0&lt;/code>&lt;/td>
&lt;td>чувствительность: множитель сигмы, единый для всех трёх моделей (меньше — чувствительнее)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>POBP_ANOMALY_WINDOW_MINUTES&lt;/code>&lt;/td>
&lt;td style="text-align:center">&lt;code>30&lt;/code>&lt;/td>
&lt;td>длина скользящего окна для оконного сигнала&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>POBP_ANOMALY_WINDOW_FRACTION_THRESHOLD&lt;/code>&lt;/td>
&lt;td style="text-align:center">&lt;code>0.3&lt;/code>&lt;/td>
&lt;td>доля аномальных точек в окне, при которой поднимается &lt;code>anomaly_windowed&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>POBP_MASK_ANOMALIES_IN_TRAINING&lt;/code>&lt;/td>
&lt;td style="text-align:center">&lt;code>True&lt;/code>&lt;/td>
&lt;td>маскировать ранее обнаруженные аномалии перед переобучением&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>POBP_MASK_CAP_FRACTION&lt;/code>&lt;/td>
&lt;td style="text-align:center">&lt;code>0.10&lt;/code>&lt;/td>
&lt;td>предельная доля обучающей выборки, которую разрешено маскировать&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>POBP_ADAPTIVE_VARIANCE&lt;/code>&lt;/td>
&lt;td style="text-align:center">&lt;code>True&lt;/code>&lt;/td>
&lt;td>считать разброс отдельно по интервалам суток (&lt;code>stl_zscore&lt;/code>, &lt;code>holtwinters&lt;/code>)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>POBP_VARIANCE_BUCKET_MINUTES&lt;/code>&lt;/td>
&lt;td style="text-align:center">&lt;code>60&lt;/code>&lt;/td>
&lt;td>размер интервала суток для адаптивной дисперсии; допустимо от 5 до 360&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;div class="alert alert-info" role="alert">
&lt;h4 class="alert-heading">Версия&lt;/h4>
Параметры &lt;code>POBP_Z_THRESHOLD&lt;/code> и &lt;code>POBP_DIRECTION_DEFAULT&lt;/code>, оконный сигнал аномалии, защита от «отравления» модели и адаптивная дисперсия по времени суток доступны начиная с версии 201.
&lt;/div>
&lt;h2 id="что-дальше">Что дальше&lt;/h2>
&lt;ul>
&lt;li>&lt;a href="../">Алертинг в Proto Observability Platform&lt;/a> — обзор модуля алертинга.&lt;/li>
&lt;li>&lt;a href="../configuration/">Настройка оповещений&lt;/a> — создание каналов, политик и правил, работа с правилами.&lt;/li>
&lt;li>&lt;a href="../metrics-and-expressions/">Метрики и выражения для правил&lt;/a> — метрики сервисов и метрики базовой линии &lt;code>_prophet&lt;/code>.&lt;/li>
&lt;li>&lt;a href="../../guides/slo/">Управление SLO&lt;/a> — цели уровня обслуживания и правила по скорости сжигания бюджета ошибок.&lt;/li>
&lt;/ul></description></item></channel></rss>