시계열 데이터의 다차원 알림 예제

시계열 데이터의 다차원 알림 예제 (Example of multi-dimensional alerts on time series data)

이 예제는 하나의 알림 규칙이 여러 알림 인스턴스(라벨 집합·시계열마다 하나씩)를 생성하는 방법을 보여줘요. 이를 다차원 알림(multi-dimensional alerting)이라 해요 — 하나의 규칙, 많은 알림 인스턴스. 동적 환경에서 여러 CPU, 컨테이너, 호스트별 가용성 같은 컴포넌트 그룹을 모니터링할 때 흔한 패턴이에요.

출처: 문서

본문

Prometheus에서 각 고유 라벨 조합은 별개의 시계열을 정의해요. Grafana Alerting도 같은 모델을 써요: 각 라벨 집합을 독립적으로 평가하고, 각 시리즈에 대해 별도의 알림 인스턴스를 만들어요. 개별 규칙이나 집계 알림을 정의하는 대신 각 차원에 알림을 걸어 특정 문제를 감지하고 그 세부 정보를 알림에 포함할 수 있어요.

예를 들어 쿼리가 CPU마다 하나의 시리즈를 반환한다고 해요:

cpu 라벨 값 CPU 사용률(%)
cpu-0 95
cpu-1 30
cpu-2 85

> 80 임계값이면 cpu-0cpu-2에 두 개의 알림 인스턴스가 발화해요.

예제 개요

CPU 사용량이 80%를 넘을 때 알리고, 각 CPU 코어를 독립적으로 추적하고 싶다고 해요. 다음과 같은 Prometheus 쿼리를 쓸 수 있어요:

sum by(cpu) (
  rate(node_cpu_seconds_total{mode!="idle"}[1m])
)

이 쿼리는 지난 1분 평균의 CPU 코어별 활성 사용률을 반환해요.

CPU 코어 활성 사용률
cpu-0 95
cpu-1 30
cpu-2 85

Grafana Alerting이 쿼리를 평가하면 반환된 각 시리즈에 대해 개별 알림 인스턴스를 만들어요:

알림 인스턴스
{cpu="cpu-0"} 95
{cpu="cpu-1"} 30
{cpu="cpu-2"} 85

$A > 80 같은 임계값 조건으로 각 인스턴스를 개별적으로 평가하고, 조건이 충족된 곳에서만 알림이 발화해요:

알림 인스턴스 상태
{cpu="cpu-0"} 95 Firing
{cpu="cpu-1"} 30 Normal
{cpu="cpu-2"} 85 Firing

다차원 알림은 집계 데이터(전체 CPU 사용량 같은)에 알림을 걸 때 놓칠 수 있는 개별 컴포넌트의 문제를 표면화해요. 각 인스턴스는 고유 라벨 집합으로 식별되는 특정 컴포넌트를 대상으로 해서 더 구체적이고 실행 가능해요. 예를 들어 알림 규칙에 영향을 받은 CPU를 식별하는 summary 애노테이션을 설정할 수 있어요:

High CPU usage on {{$labels.cpu}}

앞선 예제에서 두 발화 인스턴스는 다음 같은 요약을 표시해요:

  • High CPU usage on cpu-0
  • High CPU usage on cpu-2

TestData로 시도해 보기

여러 무작위 시계열을 생성할 수 있는 TestData 데이터 소스로 다차원 알림을 빠르게 실험할 수 있어요:

  • Connections 메뉴로 TestData 데이터 소스를 추가해요.
  • Alerting으로 이동해 알림 규칙을 만들어요.
  • 데이터 소스로 TestData를 선택해요.
  • TestData 시나리오를 설정해요. Scenario: Random Walk, Labels: cpu=cpu-$seriesIndex, Series count: 3, Min: 70, Max: 100, Spread: 2.

비교를 위한 시계열 데이터 축소

이 예제는 선택된 시간 범위에 걸친 값을 가진 세 개의 시계열을 반환해요. 각 시리즈에 알림을 걸려면 시계열을 알림 조건이 평가할 수 있는 단일 값으로 축소(reduce) 해야 해요. Grafana Alerting은 여러 축소 방법을 제공해요:

  • 데이터 소스 쿼리 함수: 앞선 예제는 Prometheus sum 함수로 rate 결과를 cpu별로 합쳐 CPU 코어당 단일 값을 만들었어요.
  • Reduce 표현식: 쿼리·조건 섹션에서 시계열 데이터를 집계하는 Reduce 표현식을 제공해요. Default 모드에서는 When 입력으로 reducer(last, mean, min 등)를 선택하고, 임계값이 그 축소된 값을 비교해요. Advanced 모드에서는 임계값(알림 조건)을 정의하기 전에 Reduce 표현식(예: last(), mean())을 추가할 수 있어요.

이 예제는 데모 목적으로 Advanced 모드의 Reduce 표현식을 사용해요:

  • 쿼리 패널 오른쪽 위의 Advanced mode를 토글해 추가 표현식을 활성화해요.
  • mean() 같은 함수로 각 시계열을 단일 값으로 축소하는 Reduce 표현식을 추가해요.
  • $reducer > 80 같은 임계값(Threshold)으로 알림 조건을 정의해요.
  • Preview를 클릭해 알림 규칙을 평가해요. 알림 조건이 각 인스턴스의 축소된 값을 평가하고 각 인스턴스가 Firing인지 Normal인지 보여줘요.

더 알아보기 (Learn more)