시계열 데이터의 다차원 알림 예제
시계열 데이터의 다차원 알림 예제 (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-0과 cpu-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)
- Grafana Alerting 시작하기 튜토리얼 – 다차원 알림 생성 및 라우팅
- 표 형식 데이터 알림 예제
- Grafana Alerting 소개