예측 기반 알림

예측 기반 알림 (Alerting on forecasts)

예측(forecast)은 신호의 미래 상태, 예를 들어 다음 달 예상 디스크 공간 사용량을 예측해요. 일반적인 예측 사용 사례에는 용량 계획, 디스크·메모리 고갈 예측, 추세 기반 경고가 있어요. 표준 알림 규칙은 신호의 현재 상태를 평가하지만, 예측 기반 알림은 예측된 미래 값을 임계값 조건과 비교해 이런 일이 발생하기 전에 조치를 취할 수 있게 해줘요.

출처: 문서

본문

다양한 예측 도구가 다양한 예측 접근 방식을 제공하며, 신호의 동작에 따라 선택해요. 여기서는 두 유형의 예측으로 알림을 만드는 예시를 보여줘요: 선형 예측(predict_linear)과 계절성 예측(Grafana Cloud Machine Learning).

predict_linear로 선형 예측

신호가 비교적 꾸준한 추세를 따를 때 PromQL predict_linear 함수로 미래 값을 예측할 수 있어요. predict_linear는 레인지 벡터의 값에 대해 선형 회귀를 수행하고 결과 추세를 미래로 외삽해요. 함수는 두 인자를 받아요:

predict_linear(<range-vector>, <seconds>)

예:

predict_linear(<metric>[14d], 7 * 24 * 3600)

이것은 지난 14일 데이터로 선형 추세를 계산하고 현재 평가 시점 7일 후의 값을 예측해요.

predict_linear의 작동 방식

계산은 단순 선형 회귀에 기반해요. 과거 데이터에서 기울기(slope)를 계산하고 그 기울기를 미래로 외삽해요:

predicted_value = value_at_evaluation_time + slope * time

결과는 전체 미래 기간을 다루는 예측 시리즈가 아니라, 요청한 미래 시점의 단일 예측 값이에요.

predict_linear를 사용할 때

predict_linear는 디스크 사용량이 꾸준히 증가하는 것처럼 비교적 꾸준한 추세를 따르는 신호에 유용해요. 일일·주간 주기 같은 강한 반복 패턴이 있는 신호에는 적합하지 않아요. 직선 투영이 신호의 정상 동작을 반영하지 못하는 값을 만들 수 있기 때문이에요. 또한 predict_linear는 현재 추세가 계속된다고 가정하므로, 갑작스러운 신호 변화는 외삽된 추세를 부정확하게 만들 수 있어요.

예측된 미래 값에 대한 알림

알림 규칙에서 예측 값을 직접 임계값과 비교할 수 있어요:

predict_linear(<metric>[14d], 7 * 24 * 3600) > 85

이것은 7일 후의 예측 값이 85를 초과하는지 평가해요.

다음 예시는 PostgreSQL 영구 볼륨 클레임(PVC)의 디스크 사용량을 예측하는 데 predict_linear를 사용해요:

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
)

쿼리 동작: 지난 14일의 사용량 데이터를 시계열로 취하고, PVC별 최대 사용 비율을 계산한 뒤, 7일 후의 값을 예측해요.

팁: 이 알림 예시를 Grafana Play에서 탐색할 수 있어요. 알림 설명: PVC가 지난 14일 사용량에 기반해 7일 내 85% 이상 사용 용량에 도달할 것으로 예측됨. 볼륨이 임계값에 도달하기 전에 디스크 증가를 검토하고 용량 확장을 계획하세요.

Grafana Cloud Machine Learning으로 계절성 예측

신호가 일일·주간 트래픽 주기 같은 반복 패턴을 따를 때 선형 예측은 미래 동작을 정확히 나타낼 수 없어요. 이런 경우 Grafana Machine Learning 예측을 사용해 추세와 계절성을 고려한 예측을 생성할 수 있어요. 미래 특정 시점의 단일 값을 반환하는 predict_linear와 달리, Grafana Machine Learning 예측은 예측 기간에 걸친 일련의 예측 값을 생성하고, 예측의 불확실성을 나타내는 상한·하한도 제공해요.

각 예측은 다음 Prometheus 메트릭을 생성해요: <forecast_metric_name>:predicted(예측 값), <forecast_metric_name>:actual(실제 값), <forecast_metric_name>:anomalous(이상 징후), 그리고 예측 상한(yhat_upper)/하한(yhat_lower).

예측이 grafanacloud-ml-metrics Prometheus 데이터 소스에 저장되므로 예측 메트릭을 알림 규칙에서 직접 사용해 다음을 감지할 수 있어요: 신호가 미래 시간 창 내 임계값을 초과할 것으로 예상되는지, 실제 상태가 예측 범위를 벗어나는지.

미래 예측에 대한 알림

predict_linear 예시처럼, 예측 알림은 신호가 미래 시간 창 내 임계값을 초과할 것으로 예상되는지 감지할 수 있어요. 이 예시에서 알림 쿼리는 중앙 예측이 아니라 상한 예측 경계(yhat_upper)를 사용해요. 이는 예측 불확실성을 고려해 더 보수적인 용량 계획 신호를 제공해요.

<forecast_metric_name>:predicted{ml_forecast="yhat_upper"} over the next 7 days > 80%

이 예시에서 예측은 최대 15일의 미래 예측 데이터를 제공해요. maximum 함수 값을 사용해 다음 7일 중 어느 시점에 예측이 임계값을 초과할 것으로 예상되면 알림이 발화하도록 해요.

실제 상태가 예측 범위를 벗어날 때 알림

예측 기반 알림은 현재 신호가 예측에서 벗어날 때도 감지할 수 있어요. 이전 예시들은 미래 상황을 감지하지만, 이 경우의 핵심 차이는 현재 값을 예측 범위와 비교해 어댑티브하게 알림을 만든다는 점이에요. 알림을 위해 각 예측은 실제 값이 예측 구간 내일 때 0을 반환하는 이상(anomalous) 메트릭(<forecast_metric_name>:anomalous)을 생성해요. 이 메트릭을 예측 알림에서 직접 사용할 수 있어요.

# Fires when the actual value is outside the prediction interval
<forecast_metric_name>:anomalous
예기치 않게 높은 값에만 알림

실제 값이 예측 상한을 초과할 때만 발화하도록 알림을 구성할 수도 있어요. 이 경우 알림 규칙이 <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"}

참고: 어댑티브 알림은 신호가 시간에 따라 변하고 고정 임계값이 의미 있는 편차를 놓치거나 정상 동작 변화 중 알림을 생성할 때 유용해요. 예를 들어 트래픽이 업무 시간에는 높고 야간에는 낮을 수 있어요. 현재 값을 예측 범위와 비교하면 이런 반복 패턴에 적응해요.

더 알아보기

Grafana Cloud Machine Learning으로 예측과 알림에 대해 더 알아보려면 다음을 참고하세요.

더 알아보기 (Learn more)