모니터 평가에서의 as_count()
모니터 평가에서의 as_count() (as_count() in Monitor Evaluations)
as_count() 와 as_rate() 수정자를 사용하는 쿼리는 계산 방식이 달라서 모니터 평가에서 서로 다른 결과를 낼 수 있어요. as_count() 수정자를 하나 이상 포함하는 모니터는 별도의 평가 경로를 사용하며, 이 경로는 연산과 시간 집계가 수행되는 순서를 바꿔요.
출처: 문서
본문
오류율 예제 (Error rate example)
requests.error와 requests.total 메트릭을 사용해 5분 동안의 오류율을 모니터링한다고 가정해볼게요. 5분 시간 프레임에 대해 정렬된(align된) 시계열 포인트로 단일 평가를 수행한다고 생각해보세요:
분자(Numerator): sum:requests.error{*}
| Timestamp | Value |
|:--------------------|:------|
| 2018-03-13 11:00:30 | 1 |
| 2018-03-13 11:01:30 | 2 |
| 2018-03-13 11:02:40 | 3 |
| 2018-03-13 11:03:30 | 4 |
| 2018-03-13 11:04:40 | 5 |
분모(Denominator): sum:requests.total{*}
| Timestamp | Value |
|:--------------------|:------|
| 2018-03-13 11:00:30 | 10 |
| 2018-03-13 11:01:30 | 10 |
| 2018-03-13 11:02:40 | 10 |
| 2018-03-13 11:03:30 | 10 |
| 2018-03-13 11:04:40 | 10 |
계산하는 2가지 방법
이 쿼리를 classic_eval_path 라고 부르겠어요:
sum(last_5m): sum:requests.error{*}.as_rate() / sum:requests.total{*}.as_rate()
그리고 이 쿼리는 as_count_eval_path 라고 부르겠어요:
sum(last_5m): sum:requests.error{*}.as_count() / sum:requests.total{*}.as_count()
경로에 따른 평가 결과를 비교해볼게요:
| 경로 (Path) | 동작 (Behavior) | 확장된 표현식 (Expanded expression) | 결과 (Result) |
|---|---|---|---|
classic_eval_path |
나눗셈 이후에 집계 함수 적용 | (1/10 + 2/10 + 3/10 + 4/10 + 5/10) | 1.5 |
as_count_eval_path |
나눗셈 이전에 집계 함수 적용 | (1+2+3+4+5) / (10+10+10+10+10) | 0.3 |
위 두 평가는 모두 수학적으로 올바르다는 점을 참고해요. 의도에 맞는 방법을 선택하면 돼요.
classic_eval_path 를 이렇게 시각화하면 이해하기 쉬워요:
sum(last_5m):error/total
그리고 as_count_eval_path 는 이렇게요:
sum(last_5m):error
-----------------
sum(last_5m):total
일반적으로 avg 시간 집계와 .as_rate() 를 쓰는 것이 합리적이지만, 오류율에는 sum 집계와 .as_count() 를 권장해요. sum 이외의 집계 방법은 .as_count() 와 함께 사용하는 것이 타당하지 않으며(사용할 수도 없고) 그래요.
게이지 메트릭과 pct_change() (Gauge metrics and pct_change())
평가 경로는 pct_change() 같은 롤업 의존 함수와 함께 사용할 때 게이지 메트릭에도 영향을 줘요. as_count() 없이 모니터는 classic 평가 경로를 사용하는데, 이 경로에서는 pct_change()가 버킷별로 계산되고 그 값들이 평가 창 전체에 걸쳐 합산돼요. 희소한 게이지 메트릭의 경우 이 값이 -100%보다 훨씬 낮아질 수 있어요.
| 경로 (Path) | 평가 순서 (Evaluation order) | 희소 게이지 메트릭에 미치는 영향 (Effect on sparse gauge metrics) |
|---|---|---|
classic_eval_path (as_count() 없음) |
pct_change()가 버킷별로 적용된 후, 값이 창 전체에 걸쳐 합산됨 |
큰 음수 값이 나올 수 있음 (예: -1,500%) |
as_count_eval_path |
시계열이 먼저 버킷화·집계된 후, pct_change()가 창 수준에서 적용됨 |
의도한 창 수준의 결과가 나옴 |
게이지 메트릭에 count 스타일 평가 경로를 사용하려면 쿼리에 as_count()를 추가하면 돼요.
궁금한 점이 있다면 Datadog 지원 팀에 문의해요.