쿼리와 조건
쿼리와 조건 (Queries and conditions)
Grafana에서 쿼리는 MySQL·PostgreSQL 같은 데이터베이스, Prometheus·InfluxDB 같은 시계열 데이터베이스, Amazon CloudWatch·Azure Monitor 같은 서비스 등 데이터 소스로부터 데이터를 가져오고 변환해요. 알림 규칙은 데이터 소스에서 가져올 데이터를 지정하는 쿼리, 규칙이 fire되기 위해 충족돼야 하는 조건, 가져온 데이터에 변환을 적용하는 **표현식(선택)**으로 구성됩니다.
출처: 문서
본문
Grafana의 쿼리는 데이터 소스에서 데이터를 가져와 변환합니다. 알림 규칙은 다음 구성 요소를 정의합니다.
- 데이터 소스에서 가져올 데이터를 지정하는 쿼리(데이터 소스 유형에 따라 문법이 다름)
- 규칙이 fire되기 전에 충족되어야 하는 조건
- 가져온 데이터에 변환을 수행하는 선택적 표현식
Alerting은 주기적으로 쿼리와 표현식을 실행해 조건을 평가합니다. 조건이 위반되면 각 시계열마다 알림 인스턴스가 트리거됩니다.
데이터 소스 쿼리
Alerting 쿼리는 Grafana 패널에서 사용하는 쿼리와 동일하지만, Grafana 관리 알림은 Alerting이 활성화된 데이터 소스를 쿼리하는 것으로 제한됩니다. 각 데이터 소스의 쿼리 편집기는 고유한 기능을 활용하는 맞춤형 UI를 제공합니다. 쿼리 편집기·문법에 대한 자세한 내용은 Query and transform data를 참고하세요.
Alerting은 두 가지 유형의 데이터로 작업할 수 있습니다.
- 시계열 데이터 — 쿼리가 시계열 컬렉션을 반환하며, 각 시리즈는 알림 조건 평가를 위해 단일 숫자 값으로 축소되어야 합니다.
- 표 형식 데이터 — 쿼리가 오직 하나의 숫자 열만 있는 테이블 형식으로 데이터를 반환해야 합니다. 각 행은 그 열에 알림 조건 평가에 사용되는 값이 있어야 합니다.
각 시계열 또는 테이블 행은 별도의 알림 인스턴스로 평가됩니다.
알림 조건 (Alert condition)
알림 조건은 값이 지정된 비교를 만족하는지에 따라 알림이 fire되는지 결정하는 쿼리나 표현식입니다. 알림 트리거를 결정하는 조건은 하나만 있을 수 있습니다. 쿼리된 데이터가 조건을 만족하면 Grafana는 알림을 fire합니다.
Default options를 사용할 때 When 입력이 쿼리 데이터를 축소하고, 마지막 입력이 임계값 조건을 정의합니다. Advanced options를 사용할 때는 쿼리·표현식 중 하나를 알림 조건으로 선택해야 합니다.
고급 옵션: 표현식 (Expressions)
표현식은 Grafana 관리 알림과 Advanced options가 활성화된 경우에만 사용할 수 있습니다. 표현식은 쿼리된 데이터에 계산, 변환, 집계를 수행합니다. 수학 연산, 함수, 논리 표현식으로 기존 메트릭을 수정합니다.
표현식 쿼리로 두 값 사이의 백분율 변화 계산, 로그·삼각 함수 적용, 특정 시간 범위·차원에 걸친 데이터 집계, 다양한 시나리오를 처리하기 위한 조건부 로직 구현 등을 할 수 있습니다.
Reduce
선택한 시간 범위 내의 시계열 값을 단일 숫자로 집계합니다. 하나 이상의 시계열을 받아 각 시리즈를 단일 숫자로 변환하며, 이를 알림 조건에서 비교할 수 있습니다. 집계 함수는 Min, Max, Mean, Median, Sum, Count, Last입니다. 자세한 내용은 Reduce 문서를 참고하세요.
Math
시계열 데이터와 숫자에 자유 형식 수학 함수/연산을 수행합니다. 예: $A + 1 또는 $A * 100. 비교 대상 쿼리가 결과에 여러 시리즈를 가지면, 서로 다른 쿼리의 시리즈는 같은 라벨을 가질 때 일치(조인)됩니다.
- $A가 {host="web01"} 30, {host="web02"} 20을 반환
- $B가 {host="web01"} 10, {host="web02"} 0을 반환
- $A + $B는 {host="web01"} 40, {host="web02"} 20을 반환
이 경우 라벨이 일치하는 시리즈만 조인되어 연산됩니다. Math의 다양한 데이터 유형 처리 시나리오는 Math 문서를 참고하세요.
Math 표현식으로 알림 조건을 정의할 수도 있습니다. 예:
$B > 70— B 값(쿼리 또는 표현식)이 70보다 크면 fire$B < $C * 100— B 값이 C 값에 100을 곱한 것보다 작으면 fire
Resample
시간 범위를 새 타임스탬프 집합에 맞춰 재정렬합니다. 타임스탬프가 정렬되지 않는 다른 데이터 소스의 시계열 데이터를 비교할 때 유용합니다. 자세한 내용은 Resample 문서를 참고하세요.
SQL
MySQL과 유사한 문법으로 이전 쿼리·표현식의 결과를 변환합니다. 행 필터링, 여러 쿼리 데이터 조인, 알림 조건 평가 전 결과 집계에 유용합니다. 자세한 내용은 SQL expressions 문서를 참고하세요.
Threshold
이전 쿼리·표현식의 단일 숫자(예: $A, $B)를 지정된 조건과 비교합니다. 알림 조건 정의에 자주 사용됩니다. 사용 가능한 임계값 함수:
- Is above:
$A > 5 - Is below:
$B < 3 - Is equal to:
$A == 2 - Is not equal to:
$B =! 4 - Is above or equal to:
$A >= 8 - Is below or equal to:
$B <= 16 - Is within range:
$A > 0 AND $A < 10 - Is outside range:
$B < 0 OR $B > 100 - Is within range included:
$A >= 0 AND $A <= 10 - Is outside range included:
$B <= 0 OR $B >= 100
임계값은 조건이 거짓이면 0, 참이면 1을 반환합니다. 임계값이 알림 조건이면 1을 반환할 때 알림이 fire됩니다.
Recovery threshold
flapping 알림의 노이즈를 줄이기 위해 회복 임계값을 설정해 알림이 회복 임계값을 넘은 후에만 Normal/Recovering 상태로 돌아가게 할 수 있습니다. Flapping은 쿼리 값이 임계값 위아래를 반복적으로 오가며 자주 상태가 바뀌어 fire-resolve-fire 알림이 이어지는 상황입니다.
예: 지연 시간 임계값 1000ms로 알림을 만들고 값이 1000 주변을 오가면(980→1010→990→1020 등) 각각이 알림을 트리거할 수 있습니다. 회복 임계값을 900ms로 설정하면 지연 시간이 900ms 아래로 내려갈 때만 알림이 resolve됩니다.
- 980→1010: firing 알림 트리거
- 1010→990: 알림 resolve 안 함, firing 유지
- 990→1020: firing 유지
회복 임계값은 불필요한 상태 변화를 줄이고 알림 노이즈를 감소시킵니다.
Classic condition (legacy)
Classic 조건은 호환성을 위해 주로 존재하며 가능하면 피해야 합니다. Classic 조건은 시계열 데이터가 알림 조건과 일치하는지 확인하며, 조건을 만족하는 시계열 수와 무관하게 항상 하나의 알림 인스턴스만 생성합니다.
| 조건 연산자 | 동작 |
|---|---|
and |
앞뒤 두 조건이 모두 참이어야 전체 조건이 참. |
or |
앞뒤 조건 중 하나가 참이면 전체 조건이 참. |
logic-or |
logic-or 앞의 조건이 참이면 후속 조건을 평가하지 않고 즉시 전체가 참. 예: TRUE and TRUE logic-or FALSE and FALSE는 앞 조건이 TRUE를 반환하므로 TRUE. |
다음 집계 함수도 사용 가능합니다.
| 함수 | 동작 |
|---|---|
avg |
값의 평균 표시 |
min |
가장 낮은 값 표시 |
max |
가장 높은 값 표시 |
sum |
모든 값의 합 표시 |
count |
결과의 값 수 세기 |
last |
마지막 값 표시 |
median |
중앙값 표시 |
diff |
최신 값과 가장 오래된 값의 차이 표시 |
diff_abs |
diff의 절댓값 표시 |
percent_diff |
최신 값과 가장 오래된 값 차이의 백분율 표시 |
percent_diff_abs |
percent_diff의 절댓값 표시 |
count_non_null |
결과 집합에서 null이 아닌 값 수 표시 |