토리맘의 한글라이즈 프로젝트 logo 토리맘의 한글라이즈 프로젝트

프로메테우스 공식 레퍼런스를 한글로 번역한 문서입니다.

전체 목차는 여기에 있습니다.


recording rule에 일관적인 네이밍 체계를 사용하면 rule이 의미하는 바를 한 눈에 쉽게 파악할 수 있다. 뿐만 아니라 정확하지 않은 계산이나 무의미한 계산식도 눈에 들어오게 되서 실수를 방지할 수 있다.

이 페이지는 데이터를 올바르게 집계하는 방법을 정리한 문서이며, 한 가지 네이밍 컨벤션을 제안한다.

목차


Naming and aggregation

Recording rule은 일반적인 포맷 level:metric:operations를 따라야 한다. level은 집계 수준, 즉 rule에서 출력하는 레이블들을 나타낸다. metric은 메트릭 이름으로, 카운터에서 rate()irate()을 사용할 때 _total을 잘라내는 것 외에는 변경하지 않는다. operations는 이 메트릭에 적용한 연산 목록이며, 나중에 적용하는 연산을 앞에 표기한다.

메트릭 이름을 변경하지 않고 그대로 유지하면, 이 메트릭이 무엇인지도 파악하기 쉽고 코드에서도 쉽게 찾을 수 있다.

표현식에 sum()과 같은 연산을 사용할 때는 operations에선 _sum을 생략해서 깔끔하게 유지한다. 연계되는 연산들은 하나로 합칠 수 있다 (ex. min_minmin과 동일하다).

어떤 연산을 사용할지 잘 모르겠다면 sum을 사용해라. 무언가를 나눠서 비율을 계산하는 경우 메트릭 이름 사이엔 _per_를 넣고, operations에는 ratio를 넣어라.

비율을 집계할 때는 분자와 분모를 따로따로 합산한 다음에 나눠야 한다. 미리 계산한 비율이나 평균을 가지고 평균을 다시 계산해선 안 된다. 이는 통계적으로 유효하지 않다.

Summary에서 관측한 크기의 평균값을 계산하기 위해 _count_sum을 집계하고 나눠줄 땐 비율로 취급하긴 힘들 거다. 그보단 메트릭 이름에선 _count_sum suffix를 제외하고 operation의 ratemean으로 바꿔라. 이렇게하면 해당 기간 동안에 관측한 평균 크기를 나타낼 수 있다.

전부 하나로 집계해버리는 레이블들에는 전부 without 절을 지정해라. 이렇게 하면 job과 같은 다른 레이블들은 모두 보존할 수 있기 때문에, 충돌은 최소화하고 더 유용한 메트릭과 alert를 제공할 수 있다.


Examples

들여쓰기 스타일 중 두 벡터 사이에서 자체적으로 줄을 바꾸고 연산자를 내어쓰기한 스타일에 유의해라. Yaml에선 이 스타일을 가능하게 하기 위해 들여쓰기 지시자indentation indicator를 이용한 블록 인용구를 사용한다 (ex. |2).

path 레이블을 가지고 있는 요청들을 초단위로 집계한다.

- record: instance_path:requests:rate5m
  expr: rate(requests_total{job="myjob"}[5m])

- record: path:requests:rate5m
  expr: sum without (instance)(instance_path:requests:rate5m{job="myjob"})

요청에 실패한 비율을 계산하고, job 레벨까지 실패 비율을 집계한다:

- record: instance_path:request_failures:rate5m
  expr: rate(request_failures_total{job="myjob"}[5m])

- record: instance_path:request_failures_per_requests:ratio_rate5m
  expr: |2
      instance_path:request_failures:rate5m{job="myjob"}
    /
      instance_path:requests:rate5m{job="myjob"}

# 분자와 분모를 각각 합산한 다음 나눠서 path 레벨의 비율을 계산한다.
- record: path:request_failures_per_requests:ratio_rate5m
  expr: |2
      sum without (instance)(instance_path:request_failures:rate5m{job="myjob"})
    /
      sum without (instance)(instance_path:requests:rate5m{job="myjob"})

# 계측 레이블이나 인스턴스를 구별하는 레이블들은 남아있지 않으므로
# level에는 'job'을 사용한다.
- record: job:request_failures_per_requests:ratio_rate5m
  expr: |2
      sum without (instance, path)(instance_path:request_failures:rate5m{job="myjob"})
    /
      sum without (instance, path)(instance_path:requests:rate5m{job="myjob"})

Summary에서 일정 기간 동안 관측한 지연 시간의 평균을 계산한다:

- record: instance_path:request_latency_seconds_count:rate5m
  expr: rate(request_latency_seconds_count{job="myjob"}[5m])

- record: instance_path:request_latency_seconds_sum:rate5m
  expr: rate(request_latency_seconds_sum{job="myjob"}[5m])

- record: instance_path:request_latency_seconds:mean5m
  expr: |2
      instance_path:request_latency_seconds_sum:rate5m{job="myjob"}
    /
      instance_path:request_latency_seconds_count:rate5m{job="myjob"}

# 분자와 분모를 각각 합산한 다음 나눈다.
- record: path:request_latency_seconds:mean5m
  expr: |2
      sum without (instance)(instance_path:request_latency_seconds_sum:rate5m{job="myjob"})
    /
      sum without (instance)(instance_path:request_latency_seconds_count:rate5m{job="myjob"})

전체 인스턴스와 path의 평균 쿼리 비율은 avg() 함수를 이용해 계산한다:

- record: job:request_latency_seconds_count:avg_rate5m
  expr: avg without (instance, path)(instance:request_latency_seconds_count:rate5m{job="myjob"})

입력 메트릭명과 출력 메트릭명을 비교해보면, 집계할 땐 without 절에 있는 레이블들은 출력 메트릭의 level에선 제거된다는 점을 알 수 있다. 따로 집계하지 않을 땐 입출력 메트릭의 level은 항상 동일하다. 그렇지 않은 경우 rule을 만들 때 실수했을 가능성이 크다.


Next :
When to use the Pushgateway
Pushgateway를 사용해야 하는 곳과 그렇지 않은 곳

전체 목차는 여기에 있습니다.

<< >>

TOP