인프런 커뮤니티 질문&답변

eodahee님의 프로필 이미지
eodahee

작성한 질문수

실습으로 배우는 프로메테우스 - {{ x86-64, arm64 }}

6.4.복잡한 PromQL을 손쉽게 조회하도록 해주는 기록 규칙(Recording Rules)

Recording Rules에 label matcher 활용하기

해결된 질문

작성

·

325

·

수정됨

1

안녕하세요. 강의 잘 듣고 있습니다!

혹시 Recording Rules에 label matcher를 동적으로 사용하는 방법도 있을까요?(실무에 적용하려면 필요한 방법 같아 질문드립니다.)

label에 대한 value들이 매우 많은 상황이라면 expr은 거의 동일하기 때문에 여러 rule를 생성하는 것은 옳지 않은 것 같습니다.

예를들어 아래와 같은 방식입니다.

record : container:memory_working_set:topk3{pod=~"$pod"}
expr : topk(3, sum(container_memory_working_set_bytes{pod=~"$pod"}/1024/1024) by (pod))

답변 1

1

문성주님의 프로필 이미지
문성주
지식공유자

안녕하세요. eodahee 님

결론을 먼저 말씀드리자면 기록 규칙(record rule)에 레이블 매처를 사용할 수 있는 방법은 없습니다.

이렇게 말씀드린 이유는 아래 문서에서 말하는 내용을 근거로 합니다.

문서 내용을 요약하여서 설명 드리면, 기록 규칙은 프로메테우스 서버를 통해서 쿼리를 실행할 때, 기록 규칙을 통해 미리 사전에 계산된 메트릭을 조회하여 프로메테우스 서버의 부하를 낮추기 위해서 사용합니다.

따라서, 문의 주신 내용에 따라서 레이블 셀렉터를 생성해서 expr을 쓸 경우에는 모든 조건에 대해서 기록 규칙을 작성해야 합니다.

record : container:memory_working_set:topk3{pod=~"$pod"}
expr : topk(3, sum(container_memory_working_set_bytes{pod=~"$pod"}/1024/1024) by (pod))

여기서 질문자 님께서 우려하시는 부분이 기록 규칙을 만들기 위해서 특정 패턴에 부합하는 조건을 모두 기록 규칙을 작성해야 하는가? 로 보여집니다.

이 문제를 해결하기 위해서 오픈소스 커뮤니티에서는 데이터 템플리팅 언어(Data Templating Language)를 사용합니다.

대표적으로 구글이 제공하는 jsonnetcuelang이라고 하는 언어가 존재합니다.

부가적으로 저희가 실습에서 사용하는 helm 또한 데이터 템플리팅 도구로 볼 수 있습니다.

이러한 언어로 생성되어야 하는 기록 규칙에 대한 패턴을 작성해서 expr과 record를 생성(Generate) 하는 과정을 통해 번거로움을 해소할 수 있습니다.

대표적으로 오픈소스 커뮤니티에서는 위에 설명 드린 데이터 템플리팅 언어로 mixin을 제공하여 이와 같은 구성의 번거로움 과정을 해결하는 사례가 있습니다.

궁금증을 해결하시는데 도움이 되었으면 좋겠습니다.

오늘 하루도 즐거운 하루 보내시기 바랍니다.

감사합니다.

문성주 드림

eodahee님의 프로필 이미지
eodahee
질문자

아하 데이터 템플리팅 언어로 해결 가능하군요..! 좋은 답변 감사드립니다🙂

남은 강의도 열심히 공부하겠습니다!

eodahee님의 프로필 이미지
eodahee

작성한 질문수

질문하기