PromQL의 함수형 표현식 구조와 평가 모델
PromQL은 명령형(SQL 스타일)이 아닌 함수형 쿼리 언어로 설계되었습니다. 각 표현식은 독립적으로 평가되어 중간값을 생성하며, 이 중간값이 다시 상위 표현식의 인자나 피연산자로 사용됩니다. 즉시 쿼리(instant query)는 특정 시점의 데이터를 반환하고, 범위 쿼리(range query)는 동일 간격의 여러 시점에서 즉시 쿼리를 반복 실행하는 방식으로 작동하므로, 두 모드 모두 동일한 표현식 평가 로직을 따릅니다.
데이터 타입과 벡터 선택자의 라벨 매칭 의미론
PromQL 표현식은 4가지 데이터 타입으로 평가됩니다: 즉시 벡터(동일 타임스탬프의 시계열 샘플), 범위 벡터(시간 범위의 샘플 집합), 스칼라(부동소수점), 문자열입니다. 즉시 벡터 선택자는 메트릭 이름과 레이블 조건(=, !=, =~, !~)으로 시계열을 필터링하며, 쿼리 평가 타임스탐프 이전의 가장 최근 샘플을 반환합니다. 범위 벡터 선택자는 [5m] 같은 시간 범위를 지정하여 그 윈도우 내 모든 샘플을 수집하며, 좌측 경계는 제외, 우측 경계는 포함하는 반개구간 의미론을 따릅니다.
이진 연산자와 벡터 간 레이블 매칭 전략
두 즉시 벡터 간 이진 연산(덧셈, 곱셈 등)은 기본적으로 동일한 레이블 집합을 가진 샘플끼리 1:1 매칭됩니다. on() 및 ignoring() 수정자로 매칭 대상 레이블을 제어하고, group_left/group_right 수정자로 다대일, 일대다 매칭을 활성화할 수 있습니다. 이러한 설계는 분산 환경에서 서로 다른 서비스의 메트릭을 정확하게 결합하는 데 필수적이며, 부정확한 매칭은 잘못된 집계 결과를 초래합니다.
스테일니스와 샘플 해상도 관리
Prometheus는 기본 5분의 lookback 기간을 설정하여 쿼리 평가 시점 이후의 데이터를 선택하지 않습니다. 시계열이 더 이상 내보내지지 않으면 '스테일'로 표시되어 결과에서 제외되며, 이는 동적 환경에서 종료된 서비스의 메트릭이 자동으로 그래프에서 사라지는 메커니즘입니다. 범위 쿼리에서 부동소수점 샘플과 네이티브 히스토그램 샘플이 혼재될 수 있고, 집계 함수는 호환되지 않는 히스토그램 버킷 레이아웃을 자동 조정합니다.