Prometheus Recording Rule - offset의 함정

Hansu Kim·2022년 10월 25일
0

Prometheus를 사용하면, 사용자 요구에 따라 다양한 통계 데이터들을 수집해 제공해야한다.

그리고 가끔씩은, 수집할 데이터가 명확하지 않은 상황에서 요구사항만 존재하는 경우가 있다.

또는 수집할 데이터가 명시되었어도, 데이터를 가공하여 제공하는 경우가 생긴다.

그 경우 사용되는 것이 Recording Rule이다.

Recording Rule을 사용하며, Cross-service Federation 환경에서는 Scrape interval과 Rule evaluation interval이 같을 경우, Rule evaluation시 대상이 되는 Time series가 존재하지 않을 수 있다.

그 경우, incremental data의 증가값 연산 시에는 offset을 통해 마이너스 연산을 할 경우, Prometheus는 현재 타임시리즈의 메트릭값을 가장 최근 값으로 대체하여 계산하는 것으로 추정되고, 대체하여 연산될 경우, 결과값이 예상과는 다르게 나올 수 있다.

(내 경우, recording rule을 사용하여 일부 incremental data를 offset을 사용하여 일부 recording rule 결과값이 0으로 처리됐었다.)

incremental data의 증가분 연산시에는 increase() 함수와 range vector를 사용해야 하지만, scrape interval과 동일한 range vector는 사용할 수 없다. (단위 시간 내에 타임시리즈가 한개만 존재하게 되기 때문)

주절주절 두서없이 정리용으로 생각을 적었는데, 핵심만 정리하자면 다음과 같다.

  1. 사용자에게 제공할 메트릭은 recording rule을 통해 제공하는 것이 좋다.
  2. recording rule을 통해 메트릭을 제공할 경우, scrape interval은 rule evaluation보다 더 짧은 간격으로 해서 단위시간당 연산을 매끄럽게 할 수 있는 것이 좋다. ( scrape interval 곱하기 N = rule evaluation time 이 되도록 설정하는 것이 매끄러워보인다. )
  3. recording rule 사용시, offset 연산은 정확성에 문제가 있을 수 있으니 유의하며 사용하자

0개의 댓글