LabHub

PCA — 프로메테우스 인증 어소시에이트 · PromQL · 실습

PromQL 쿼리 여덟 개 쓰기

LabHub 에서 이어서 보기

목표

PromQL 쿼리 여덟 개를 파일로 작성하면서, rate 의 순서·le 보존·최소 트래픽 게이트 같은 실전 규율을 손에 붙입니다. 시험 비중이 28% 로 가장 큰 도메인이고, 여기서 나오는 실수는 대부분 에러 없이 틀린 답을 돌려주는 종류입니다.

왜 중요한가

PromQL 이 어려운 이유는 문법이 아니라 틀려도 조용하다는 점입니다. sumrate 바깥에 두지 않으면 값이 낮게 나오고, by (le) 를 빼먹으면 분위수가 아니라 아무 숫자가 나오고, 최소 트래픽 게이트가 없으면 새벽 저트래픽 구간마다 유령 알림이 납니다. 셋 다 대시보드에서는 정상으로 보입니다. 그래서 쿼리는 "동작하는가"가 아니라 "어떤 조건에서 거짓말하는가"를 기준으로 검토해야 합니다. 이 실습은 그 검토 항목을 쿼리 하나하나에 심어 둡니다.

단계

1. /root/pca-promql/01-request-rate.promql 에 라우트별 초당 요청률을 씁니다. 메트릭은 http_requests_total, 윈도는 [5m], 집계 레이블은 route 입니다.
2. /root/pca-promql/02-error-ratio.promql 에 라우트별 5xx 에러율을 씁니다. 분자는 status_class="5xx" 로 필터한 rate, 분모는 전체 rate, 양쪽 모두 by (route) 로 집계해 나눕니다.
3. /root/pca-promql/03-p99-route.promql 에 라우트별 p99 지연을 씁니다. histogram_quantile(0.99, ...) 안에서 http_request_duration_seconds_bucket[5m] rate 를 걸고 by (le, route) 로 집계합니다.
4. /root/pca-promql/04-cardinality-topk.promql 에 시계열이 가장 많은 메트릭 상위 10개를 뽑는 쿼리를 씁니다. topk(10, ...) 안에서 count by (__name__) 을 쓰고, 대상 셀렉터는 {__name__=~".+"} 입니다.
5. /root/pca-promql/05-disk-predict.promql 에 디스크 소진 예측을 씁니다. predict_linear(node_filesystem_avail_bytes{mountpoint="/data"}[6h], 4 * 3600) < 0 에, 현재 여유 비율이 < 0.2 라는 조건(node_filesystem_avail_bytesnode_filesystem_size_bytes 로 나눈 값)을 and 로 묶습니다.
6. /root/pca-promql/06-nan-guard.promql 에 저트래픽 가드가 붙은 에러율 알림 표현식을 씁니다. 2단계와 같은 비율이 > 0.01 이고, 동시에 sum(rate(http_requests_total[5m])) by (route) > 1and 로 묶습니다.
7. /root/pca-promql/07-scrape-health.promql 에 스크레이프 건강 확인을 씁니다. up{job="checkout-api"} == 0absent(up{job="checkout-api"})or 로 묶습니다.
8. /root/pca-promql/08-burn-rate.promql 에 다중 윈도 번 레이트를 씁니다. job:slo_errors:ratio_rate1h{job="checkout-api"} > (14.4 * 0.001), job:slo_errors:ratio_rate5m{job="checkout-api"} > (14.4 * 0.001), job:http_requests:rate5m{job="checkout-api"} > 1 세 항을 and 로 묶습니다.

참고

단계 8개

  1. 라우트별 초당 요청률
  2. 라우트별 5xx 에러율
  3. 라우트별 p99 지연
  4. 카디널리티 상위 10개 진단
  5. 디스크 소진 예측
  6. 저트래픽 유령 알림 막기
  7. 스크레이프 건강 확인
  8. 다중 윈도 번 레이트