Alerting on forecasts
Прогноз предсказывает будущее состояние сигнала, например ожидаемое использование дискового пространства в течение следующего месяца. Типичные случаи использования прогнозов включают:
- Планирование ёмкости: Обнаруживайте, когда ожидается, что такие ресурсы, как дисковое пространство, память, CPU или соединения с базой данных, приблизятся к своим лимитам.
- Планирование спроса и бизнеса: Анализируйте ожидаемый спрос, расходы, производство или другие бизнес-метрики.
Стандартные правила оповещения оценивают текущее состояние сигнала. Оповещение на основе прогноза сравнивает предсказанное будущее значение с условием порога, позволяя вам действовать до того, как это произойдёт.
Различные инструменты прогнозирования предлагают разные подходы к прогнозированию, которые часто выбираются исходя из поведения сигнала.
- Линейные прогнозы используются для сигналов, которые следуют относительно стабильному тренду.
- Сезонные прогнозы лучше подходят для сигналов с повторяющимися паттернами, такими как суточный или недельный трафик.
Следующие примеры показывают, как создавать оповещения с использованием обоих типов прогнозов.
Linear forecast with predict_linear
Когда сигнал следует относительно стабильному тренду, вы можете использовать функцию PromQL predict_linear, чтобы предсказать его будущее значение.
predict_linear выполняет линейную регрессию по значениям в range-векторе и экстраполирует полученный тренд в будущее. Функция принимает два аргумента:
predict_linear(<range-vector>, <seconds>)
<range-vector>предоставляет исторические данные, используемые для расчёта тренда.<seconds>задаёт, насколько далеко в будущее делать прогноз, в секундах.
Например:
predict_linear(<metric>[14d], 7 * 24 * 3600)
Это использует данные за последние 14 дней для расчёта линейного тренда и предсказывает значение через 7 дней от текущего времени оценки.
How predict_linear works
Расчёт основан на простой линейной регрессии. Он вычисляет наклон по историческим данным и экстраполирует этот наклон в будущее:
predicted_value = value_at_evaluation_time + slope * time
Результат — одно предсказанное значение в запрошенный будущий момент времени, а не прогнозный ряд, охватывающий весь будущий период.
When to use predict_linear
predict_linear полезен, когда сигнал следует относительно стабильному тренду, например постоянно увеличивающееся использование диска.
Он не подходит для сигналов с ярко выраженными повторяющимися паттернами. Например, если сигнал следует суточным или недельным циклам, прямолинейная проекция может дать значения, не отражающие нормальное поведение сигнала.
Ещё одна особенность в том, что predict_linear предполагает продолжение текущего тренда. Внезапное изменение сигнала может сделать экстраполированный тренд неточным и привести к неточному прогнозу.
Alert on a future predicted value
Вы можете сравнить предсказанное значение с порогом непосредственно в правиле оповещения:
predict_linear(<metric>[14d], 7 * 24 * 3600) > 85
Это оценивает, превышает ли предсказанное значение через семь дней от текущего момента значение 85.
Следующий пример использует predict_linear для прогнозирования использования диска для persistent volume claim PostgreSQL:
predict_linear(
max by (persistentvolumeclaim) (
100 * (
1 - kubelet_volume_stats_available_bytes{persistentvolumeclaim="<id>"}
/
kubelet_volume_stats_capacity_bytes{persistentvolumeclaim="<id>"}
)
)[14d:1h],
7 * 24 * 3600
)
Запрос работает следующим образом:
- Он вычисляет процент использования диска для тома.
predict_linearиспользует предыдущие14дней использования диска, чтобы предсказать значение через7дней в будущем.- Подзапрос
[14d:1h]оценивает исторические данные с интервалом в1час. Такое разрешение достаточно для прогноза на длительный период. - Правило оповещения использует условие порога, которое срабатывает, когда предсказанное использование превышает
85%. - Правило оповещения оценивается каждые
12часов, поскольку использование диска изменяется относительно медленно.
Tip
Вы можете изучить этот пример оповещения в Grafana Play.
Описание оповещения: По прогнозу PVC достигнет более 85 % использованной ёмкости в течение следующих 7 дней на основе последних 14 дней использования. Проверьте рост дискового пространства и спланируйте расширение ёмкости до того, как том достигнет порога.
Seasonal forecast with Grafana Cloud Machine Learning
Когда сигнал следует повторяющимся паттернам, таким как суточные или недельные циклы трафика, линейный прогноз не может точно представить его будущее поведение.
В таких случаях вы можете использовать прогнозирование Grafana Machine Learning для создания прогноза, учитывающего тренды и сезонность.
В отличие от predict_linear, который возвращает одно предсказанное значение в конкретной точке будущего, прогноз Grafana Machine Learning создаёт ряд предсказанных значений за прогнозный период. Он также предоставляет верхнюю и нижнюю границы, представляющие неопределённость прогноза.
Каждый прогноз создаёт следующие метрики Prometheus:
<forecast_metric_name>:predicted{ml_forecast="yhat"}: Предсказанное значение, отображаемое синей линией.<forecast_metric_name>:predicted{ml_forecast="yhat_upper"}: Верхняя граница интервала предсказания, отображаемая как верхний край синей полосы.<forecast_metric_name>:predicted{ml_forecast="yhat_lower"}: Нижняя граница интервала предсказания, отображаемая как нижний край синей полосы.<forecast_metric_name>:actual: Текущее значение сигнала, отображаемое зелёной линией.
Поскольку прогноз хранится в источнике данных Prometheus grafanacloud-ml-metrics, вы можете использовать метрики прогноза непосредственно в правилах оповещения, чтобы обнаруживать:
- Когда ожидается, что прогноз превысит порог в любой момент в будущем.
- Когда текущий сигнал отклоняется от ожидаемого прогнозного диапазона.
Alert on a future prediction
Как и в примере с predict_linear, оповещение по прогнозу может обнаруживать, ожидается ли превышение сигналом порога в течение будущего временного окна.
В этом примере запрос оповещения использует верхнюю границу прогноза (yhat_upper), а не центральное предсказание. Это учитывает неопределённость прогноза и даёт более консервативный сигнал для планирования ёмкости.
<forecast_metric_name>:predicted{ml_forecast="yhat_upper"} over the next 7 days > 80%
В этом примере прогноз предоставляет до 15 дней данных о будущем предсказании. Используется максимальное значение функции, так что оповещение срабатывает, если ожидается превышение прогнозом порога в любой момент в течение следующих 7 дней.
Tip
Вы можете изучить этот пример оповещения в Grafana Play.
Alert when the actual state is outside the forecast
Оповещение на основе прогноза также может обнаруживать, когда текущий сигнал отклоняется от предсказания.
В предыдущих примерах оповещения по прогнозу обнаруживают потенциальные будущие ситуации: они срабатывают, когда ожидается, что сигнал превысит порог в какой-то момент в будущем. Ключевые отличия в этом случае:
- Оповещение не ищет будущее превышение порога. Вместо этого оно сравнивает текущее значение с прогнозным диапазоном и срабатывает, когда фактическое значение выходит за пределы прогнозного диапазона.
- Прогноз действует как адаптивная базовая линия. В то время как стандартное правило оповещения оценивает сигнал относительно фиксированного порога, правило оповещения на основе прогноза оценивает сигнал относительно прогноза, который может изменяться во времени в зависимости от сезонных паттернов.
Для оповещений каждый прогноз создаёт аномальную метрику (anomalous metric) (<forecast_metric_name>:anomalous), которая возвращает 0, когда фактическое значение находится в пределах интервала предсказания. Вы можете использовать эту метрику непосредственно в оповещении по прогнозу:
# Fires when the actual value is outside the prediction interval
<forecast_metric_name>:anomalous
Alert only on unexpectedly high values
Вы также можете настроить оповещение так, чтобы оно срабатывало только тогда, когда фактическое значение превышает предсказанную верхнюю границу.
В этом случае правило оповещения также может запрашивать <forecast_metric_name>:anomalous, которое возвращает 1, когда фактическое значение выше верхней границы, и -1, когда оно ниже нижней границы:
<forecast_metric_name>:anomalous == 1
Либо вы можете сравнить фактическое значение напрямую с предсказанной верхней границей:
<forecast_metric_name>:actual >
ignoring (ml_forecast) <forecast_metric_name>:predicted{ml_forecast="yhat_upper"}
Tip
Вы можете изучить похожий пример оповещения в Grafana Play.
Note
Адаптивные оповещения полезны, когда сигнал изменяется во времени, а фиксированный порог пропустил бы значимые отклонения или генерировал бы оповещения во время нормальных изменений в поведении.
Например, трафик может быть выше в рабочие часы и ниже ночью. Сравнение текущего значения с прогнозным диапазоном адаптируется к этим повторяющимся паттернам.
Learn more
Дополнительную информацию о прогнозировании и оповещениях с помощью Grafana Cloud Machine Learning см. в разделах: