Обнаружение аномалий и прогнозирование

Переключайте службы с помощью раскрывающегося списка Версия. Дополнительные сведения о навигации.
Область применения: ✅ Microsoft Fabric ✅ Azure Data Explorer ✅ Azure Monitor ✅ Microsoft Sentinel

Облачные службы и устройства Интернета вещей создают данные телеметрии, используемые для мониторинга работоспособности служб, производственных процессов и тенденций использования. Анализ временных рядов помогает выявить отклонения от базового шаблона каждой метрики.

Язык запросов Kusto (KQL) включает встроенную поддержку создания, управления и анализа нескольких временных рядов. Используйте KQL для создания и анализа тысяч временных рядов в секундах для мониторинга практически в реальном времени.

В этой статье описываются возможности обнаружения аномалий и прогнозирования временных рядов KQL. Функции используют надежную, хорошо известную модель декомпозиции, которая разлагает каждый временной ряд на сезонные, тренды и остаточные компоненты. Обнаруживайте аномалии, выявляя выбросы в остаточном компоненте. Прогнозирование путем экстраполации сезонных и трендовых компонентов. KQL добавляет автоматическое обнаружение сезонности, устойчивый анализ выбросов и векторизованную реализацию, которая обрабатывает тысячи временных рядов за считанные секунды.

Предпосылки

  • Используйте учетную запись Майкрософт или удостоверение пользователя Microsoft Entra. Вам не нужна подписка Azure.
  • Ознакомьтесь с возможностями временных рядов в анализе временных рядов.

Модель декомпозиции временных рядов

Собственная реализация KQL для прогнозирования временных рядов и обнаружения аномалий использует хорошо известную модель декомпозиции. Используйте эту модель для временных рядов с периодическим поведением и поведением тренда( например, трафиком службы, пульсами компонентов и периодическими измерениями Интернета вещей), чтобы прогнозировать будущие значения и обнаруживать аномалии. Регрессия предполагает, что оставшаяся часть является случайной после удаления сезонных компонентов и компонентов тренда. Прогнозируйте будущие значения из сезонных и трендовых компонентов (базовая линия) и игнорируйте остаточные значения. Обнаружение аномалий путем выполнения анализа остаточного компонента. Используйте функцию series_decompose() для создания модели декомпозиции. Он разлагает каждый временный ряд на сезонные, тенденции, остатки и базовые компоненты.

Пример: декомпозировать внутренний трафик веб-службы:

let min_t = datetime(2017-01-05);
let max_t = datetime(2017-02-03 22:00);
let dt = 2h;
demo_make_series2
| make-series num=avg(num) on TimeStamp from min_t to max_t step dt by sid 
| where sid == 'TS1'   // Select a single time series for cleaner visualization
| extend (baseline, seasonal, trend, residual) = series_decompose(num, -1, 'linefit')  // Decompose each time series into seasonal, trend, residual, and baseline (seasonal + trend)
| render timechart with(title='Web app traffic for one month, decomposition', ysplit=panels)

Снимок экрана: декомпозиция временных рядов, показывающая исходные ряды и панели для сезонных, тенденций, остатков и базовых компонентов в диаграмме времени.

  • Исходный временный ряд помечен как число (красным).
  • Процесс автоматически определяет сезонность с помощью series_periods_detect() функции и извлекает сезонный шаблон (фиолетовый).
  • Вычитайте сезонный паттерн из исходного временного ряда, а затем выполните линейную регрессию, используя функцию series_fit_line(), чтобы найти компонент тренда (светло-синий).
  • Функция вычитает тенденцию, а оставшаяся часть — остаточный компонент (зеленый).
  • Наконец, добавьте сезонные и трендовые компоненты, чтобы создать базовые показатели (синий).

Обнаружение аномалий временных рядов

series_decompose_anomalies() Функция находит аномальные точки в наборе временных рядов. Эта функция вызывает series_decompose() для создания модели декомпозиции, а затем запускает series_outliers() на остаточном компоненте. series_outliers() вычисляет оценки аномалий для каждой точки остаточного компонента с помощью метода Тьюки по обнаружению выбросов. Оценки аномалий выше 1,5 или ниже -1,5 указывают на незначительное повышение или снижение. Аномалии с оценкой выше 3,0 или ниже -3,0 указывают на сильную аномалию.

Следующий запрос позволяет обнаруживать аномалии во внутреннем трафике веб-службы:

let min_t = datetime(2017-01-05);
let max_t = datetime(2017-02-03 22:00);
let dt = 2h;
demo_make_series2
| make-series num=avg(num) on TimeStamp from min_t to max_t step dt by sid 
| where sid == 'TS1'   //  select a single time series for a cleaner visualization
| extend (anomalies, score, baseline) = series_decompose_anomalies(num, 1.5, -1, 'linefit')
| render anomalychart with(anomalycolumns=anomalies, title='Web app. traffic of a month, anomalies') //use "| render anomalychart with anomalycolumns=anomalies" to render the anomalies as bold points on the series charts.

Обнаружение аномалий временных рядов.

  • Исходный временной ряд (в красном).
  • Базовый компонент (сезонный + тренд) (синим цветом).
  • Аномальные точки (в фиолетовом) поверх исходного временного ряда. Аномальные точки значительно отклоняются от ожидаемых исходных значений.

Прогнозирование временных рядов

Функция series_decompose_forecast() прогнозирует будущие значения набора временных рядов. Эта функция вызывает series_decompose() для построения модели декомпозиции, а затем для каждого временного ряда экстраполирует базовый компонент в будущее.

Следующий запрос позволяет прогнозировать трафик веб-службы следующей недели:

let min_t = datetime(2017-01-05);
let max_t = datetime(2017-02-03 22:00);
let dt = 2h;
let horizon=7d;
demo_make_series2
| make-series num=avg(num) on TimeStamp from min_t to max_t+horizon step dt by sid 
| where sid == 'TS1'   //  select a single time series for a cleaner visualization
| extend forecast = series_decompose_forecast(num, toint(horizon/dt))
| render timechart with(title='Web app. traffic of a month, forecasting the next week by Time Series Decomposition')

Прогнозирование временных рядов.

  • Исходная метрика (красным цветом). Будущие значения отсутствуют и имеют значение 0 по умолчанию.
  • Экстраполируйте базовый компонент (в синем) для прогнозирования значений следующей недели.

Масштабируемость

Синтаксис языка запросов Kusto позволяет одному вызову обрабатывать несколько временных рядов. Его уникальная оптимизированная реализация обеспечивает быструю производительность, которая имеет решающее значение для эффективного обнаружения аномалий и прогнозирования при мониторинге тысяч счетчиков в сценариях почти в реальном времени.

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

let min_t = datetime(2017-01-05);
let max_t = datetime(2017-02-03 22:00);
let dt = 2h;
let horizon=7d;
demo_make_series2
| make-series num=avg(num) on TimeStamp from min_t to max_t+horizon step dt by sid
| extend offset=case(sid=='TS3', 4000000, sid=='TS2', 2000000, 0)   //  add artificial offset for easy visualization of multiple time series
| extend num=series_add(num, offset)
| extend forecast = series_decompose_forecast(num, toint(horizon/dt))
| render timechart with(title='Web app. traffic of a month, forecasting the next week for 3 time series')

Масштабируемость временных рядов.

Сводка

В этом документе подробно описаны собственные функции KQL для обнаружения аномалий и прогнозирования временных рядов. Каждый исходный временный ряд разлагается на сезонные, тенденции и остаточные компоненты для обнаружения аномалий и /или прогнозирования. Эти функции можно использовать для сценариев мониторинга практически в режиме реального времени, таких как обнаружение ошибок, прогнозное обслуживание и прогнозирование нагрузки.