쿼리 함수
쿼리 함수 (Query functions)
PromQL에서 데이터를 가공하는 모든 함수 레퍼런스예요. 절댓값·반올림 같은 단순 숫자 함수부터 날짜/시간 처리, 네이티브 히스토그램 전용 함수, rate() 같은 핵심 속도 함수까지 빠짐없이 정리되어 있어요. 쿼리를 짤 때 "이런 걸 하고 싶은데 어느 함수를 써야 하지?" 하고 막힐 때 바로 찾아보는 사전 같은 문서랍니다.
몇 가지 함수는 기본 인자를 갖고 있어요. 예를 들어 year(v=vector(time()) instant-vector)처럼요. 이는 v라는 인스턴트 벡터 인자가 하나 있는데, 제공하지 않으면 vector(time()) 표현식의 값으로 기본 설정된다는 뜻이에요. 각 함수가 어떤 입력을 받고 어떤 결과를 내는지 설명과 함께 예시 코드까지 확인해 보세요.
출처: 문서
본문
일부 함수는 기본 인자를 가지며, 예를 들어 year(v=vector(time()) instant-vector)가 있어요. 즉 v라는 인스턴트 벡터 인자가 하나 있고, 제공되지 않으면 vector(time()) 표현식의 값으로 기본 설정된다는 뜻이에요.
abs()
abs(v instant-vector)는 입력 벡터의 모든 float 샘플을 절댓값으로 변환한 벡터를 반환해요. 입력 벡터의 히스토그램 샘플은 조용히 무시돼요.
absent()
absent(v instant-vector)는 전달된 벡터에 요소(float 또는 histogram 샘플)가 하나라도 있으면 빈 벡터를, 요소가 없으면 값이 1인 1-요소 벡터를 반환해요.
이는 주어진 메트릭 이름과 레이블 조합에 대한 시계열이 존재하지 않을 때 알림을 보내는 데 유용해요.
absent(nonexistent{job="myjob"})
# => {job="myjob"}
absent(nonexistent{job="myjob",instance=~".*"})
# => {job="myjob"}
absent(sum(nonexistent{job="myjob"}))
# => {}
처음 두 예시에서 absent()는 1-요소 출력 벡터의 레이블을 입력 벡터에서 도출하기 위해 똑똑하게 동작하려고 해요.
absent_over_time()
absent_over_time(v range-vector)는 전달된 범위 벡터에 요소(float 또는 histogram 샘플)가 하나라도 있으면 빈 벡터를, 요소가 없으면 값이 1인 1-요소 벡터를 반환해요.
이는 특정 시간 동안 주어진 메트릭 이름과 레이블 조합에 대한 시계열이 존재하지 않을 때 알림을 보내는 데 유용해요.
absent_over_time(nonexistent{job="myjob"}[1h])
# => {job="myjob"}
absent_over_time(nonexistent{job="myjob",instance=~".*"}[1h])
# => {job="myjob"}
absent_over_time(sum(nonexistent{job="myjob"})[1h:])
# => {}
처음 두 예시에서 absent_over_time()는 1-요소 출력 벡터의 레이블을 입력 벡터에서 도출하기 위해 똑똑하게 동작하려고 해요.
ceil()
ceil(v instant-vector)는 입력 벡터의 모든 float 샘플을 원래 값보다 크거나 같은 가장 가까운 정수로 올림한 벡터를 반환해요. 입력 벡터의 히스토그램 샘플은 조용히 무시돼요.
ceil(+Inf) = +Infceil(±0) = ±0ceil(1.49) = 2.0ceil(1.78) = 2.0
changes()
각 입력 시계열에 대해 changes(v range-vector)는 제공된 시간 범위 내에서 값이 변경된 횟수를 인스턴트 벡터로 반환해요. float 샘플 뒤에 histogram 샘플이 오거나 그 반대도 변경으로 간주돼요. counter histogram 샘플 뒤에 동일한 값의 gauge histogram 샘플이 오거나 그 반대는 변경으로 간주되지 않아요.
clamp()
clamp(v instant-vector, min scalar, max scalar)는 v의 모든 float 샘플 값을 하한 min, 상한 max로 고정(clamp)해요. 입력 벡터의 히스토그램 샘플은 조용히 무시돼요.
특수한 경우:
min > max이면 빈 벡터 반환min또는max가NaN이면 float 샘플을NaN으로 고정
clamp_max()
clamp_max(v instant-vector, max scalar)는 v의 모든 float 샘플 값을 상한 max로 고정해요. 입력 벡터의 히스토그램 샘플은 조용히 무시돼요.
clamp_min()
clamp_min(v instant-vector, min scalar)는 v의 모든 float 샘플 값을 하한 min으로 고정해요. 입력 벡터의 히스토그램 샘플은 조용히 무시돼요.
day_of_month()
day_of_month(v=vector(time()) instant-vector)는 v의 float 샘플을 타임스탬프(1970년 1월 1일 UTC 이후 초 수)로 해석하고 각 타임스탬프에 대한 월의 일(UTC 기준)을 반환해요. 반환 값은 1에서 31까지예요. 입력 벡터의 히스토그램 샘플은 조용히 무시돼요.
day_of_week()
day_of_week(v=vector(time()) instant-vector)는 v의 float 샘플을 타임스탬프로 해석하고 각 타임스탬프에 대한 주의 요일(UTC 기준)을 반환해요. 반환 값은 0에서 6까지이며, 여기서 0은 일요일을 뜻해요. 입력 벡터의 히스토그램 샘플은 조용히 무시돼요.
day_of_year()
day_of_year(v=vector(time()) instant-vector)는 v의 float 샘플을 타임스탬프로 해석하고 각 타임스탬프에 대한 연중 일수(UTC 기준)를 반환해요. 반환 값은 평년에는 1에서 365, 윤년에는 1에서 366까지예요. 입력 벡터의 히스토그램 샘플은 조용히 무시돼요.
days_in_month()
days_in_month(v=vector(time()) instant-vector)는 v의 float 샘플을 타임스탬프로 해석하고 각 타임스탬프가 속한 달의 일 수(UTC 기준)를 반환해요. 반환 값은 28에서 31까지예요. 입력 벡터의 히스토그램 샘플은 조용히 무시돼요.
delta()
delta(v range-vector)는 범위 벡터 v의 각 시계열 요소의 첫 번째와 마지막 값의 차이를 계산해 주어진 델타와 동일한 레이블을 가진 인스턴트 벡터를 반환해요. 델타는 범위 벡터 셀렉터에 지정된 전체 시간 범위를 덮도록 외삽되므로, 샘플 값이 모두 정수여도 정수가 아닌 결과를 얻을 수 있어요.
다음 예시 표현식은 지금과 2시간 전 CPU 온도의 차이를 반환해요:
delta(cpu_temp_celsius{host="zeus"}[2h])
delta는 히스토그램 샘플에도 동작하는데, 각 구성 요소(관측치의 sum과 count, 버킷)가 v의 첫 번째와 마지막 네이티브 히스토그램의 해당 구성 요소 간 차이가 되는 새 히스토그램을 계산해요. 다만 범위 내에 float 샘플과 histogram 샘플이 섞여 있는 v의 각 요소는 warn 레벨 어노테이션으로 표시되며 결과 벡터에서 생략돼요.
delta는 게이지에만 사용해야 해요(float와 히스토그램 모두).
deriv()
deriv(v range-vector)는 단순 선형 회귀를 사용해 범위 벡터 v의 각 float 시계열의 초당 도함수를 계산해요. 계산을 수행하려면 범위 벡터에 최소 두 개의 float 샘플이 있어야 해요. 범위 벡터에서 +Inf 또는 -Inf가 발견되면 계산된 기울기와 오프셋 값은 NaN이 돼요.
deriv는 게이지에만 사용해야 하며 float 샘플에서만 동작해요. histogram 샘플만 포함하는 범위 벡터의 요소는 완전히 무시돼요. float와 histogram 샘플이 섞여 있는 요소의 경우 float 샘플만 입력으로 사용되며 info 레벨 어노테이션으로 표시돼요.
end()
이 함수는 기능 플래그 --enable-feature=promql-experimental-functions로 활성화해야 해요.
end()는 현재 쿼리 범위 평가의 종료 타임스탬프를 1970년 1월 1일 UTC 이후 초 수로 반환해요. 인스턴트 쿼리의 경우 이는 평가 타임스탬프와 같아요.
double_exponential_smoothing()
이 함수는 기능 플래그 --enable-feature=promql-experimental-functions로 활성화해야 해요.
double_exponential_smoothing(v range-vector, sf scalar, tf scalar)는 v의 범위에 있는 각 float 시계열에 대해 평활화된 값을 생성해요. 평활화 계수 sf가 낮을수록 오래된 데이터에 더 많은 비중을 두고, 추세 계수 tf가 높을수록 데이터의 추세를 더 많이 고려해요. sf와 tf 모두 0과 1 사이여야 해요. 자세한 내용은 NIST Engineering Statistics Handbook을 참조하세요. 프로메테우스 V2에서 이 함수는 holt_winters라고 불렸어요. Holt-Winters 방법이 일반적으로 삼중 지수 평활화를 가리키기 때문에 혼란을 일으켰죠. 여기서 구현된 이중 지수 평활화는 "Holt Linear"라고도 불려요.
double_exponential_smoothing은 게이지에만 사용해야 하며 float 샘플에서만 동작해요. histogram 샘플만 포함하는 범위 벡터의 요소는 완전히 무시돼요. float와 histogram 샘플이 섞여 있는 요소의 경우 float 샘플만 입력으로 사용되며 info 레벨 어노테이션으로 표시돼요.
exp()
exp(v instant-vector)는 v의 모든 float 샘플에 대한 지수 함수를 계산해요. 히스토그램 샘플은 조용히 무시돼요. 특수한 경우는:
Exp(+Inf) = +InfExp(NaN) = NaN
floor()
floor(v instant-vector)는 입력 벡터의 모든 float 샘플을 원래 값보다 작거나 같은 가장 가까운 정수로 내림한 벡터를 반환해요. 입력 벡터의 히스토그램 샘플은 조용히 무시돼요.
floor(+Inf) = +Inffloor(±0) = ±0floor(1.49) = 1.0floor(1.78) = 1.0
histogram_avg()
histogram_avg(v instant-vector)는 v의 각 네이티브 히스토그램 샘플에 저장된 관측값의 산술 평균을 반환해요. float 샘플은 무시되며 반환된 벡터에 나타나지 않아요.
네이티브 히스토그램에서 5분 윈도우에 걸친 평균 요청 지속 시간을 계산하려면 histogram_avg를 아래처럼 사용해요:
histogram_avg(rate(http_request_duration_seconds[5m]))
이것은 다음 쿼리와 동일해요:
histogram_sum(rate(http_request_duration_seconds[5m]))
/
histogram_count(rate(http_request_duration_seconds[5m]))
histogram_count() 와 histogram_sum()
histogram_count(v instant-vector)는 v의 각 네이티브 히스토그램 샘플에 저장된 관측치 수를 반환해요. float 샘플은 무시되며 반환된 벡터에 나타나지 않아요.
마찬가지로 histogram_sum(v instant-vector)는 각 네이티브 히스토그램 샘플에 저장된 관측치의 합을 반환해요.
일련의 히스토그램 샘플에서 관측치의 rate(이 경우 "초당 요청 수"에 해당)를 계산하려면 histogram_count를 다음과 같이 사용해요:
histogram_count(rate(http_request_duration_seconds[10m]))
histogram_fraction()
histogram_fraction(lower scalar, upper scalar, b instant-vector)는 b에 포함된 각 클래식 또는 네이티브 히스토그램에 대해 제공된 lower와 upper 값 사이의 추정 관측치 비율을 반환해요. b의 float 샘플은 하나 이상의 클래식 히스토그램의 각 버킷에서 관측치 수로 간주되고, b의 네이티브 히스토그램 샘플은 각각 별도의 히스토그램으로 취급돼요. 이는 histogram_quantile()과 같은 방식으로 동작해요. (자세한 내용은 거기를 참조하세요.)
제공된 lower와 upper 값이 버킷 경계와 일치하지 않으면 계산된 비율은 histogram_quantile()과 동일한 보간 방법을 사용한 추정치예요. (자세한 내용은 거기를 참조하세요.) 특히 클래식 히스토그램에서는 어떤 버킷 경계에서도 너무 멀리 떨어진 lower 또는 upper 값을 실수로 고르기 쉬워서 오차 범위가 커질 수 있어요. 클래식 히스토그램과 함께 histogram_fraction()을 사용하는 것보다, 비율을 계산할 때 버킷 시리즈에 직접 연산하는 것이 더 견고한 접근인 경우가 많아요. 대표적인 예시로 Apdex 점수 계산을 참조하세요.
예를 들어 다음 표현식은 지난 1시간 동안 200ms 이하가 걸린 HTTP 요청의 비율을 계산해요:
histogram_fraction(0, 0.2, rate(http_request_duration_seconds[1h]))
추정의 오차는 기본 네이티브 히스토그램의 해상도와 제공된 경계가 히스토그램의 버킷 경계와 얼마나 밀접하게 정렬되는지에 따라 달라져요.
+Inf와 -Inf는 유효한 경계 값이에요. 예를 들어 위 식의 히스토그램에 음수 관측치(요청 지속 시간에서는 그럴 리 없지만)가 포함된다면, 0.2 이하의 모든 관측치를 포함하는 적절한 하한 경계는 0이 아니라 -Inf가 돼요.
제공된 경계가 포함인지 제외인지는 제공된 경계가 기본 네이티브 히스토그램의 버킷 경계와 정확히 정렬된 경우에만 관련이 있어요. 이 경우 동작은 히스토그램의 스키마 정의에 따라 달라져요. (일반적인 표준 지수 스키마는 모두 양수 값에 대해 위쪽 경계 포함, 아래쪽 경계 제외를 특징으로 하고, 음수 값은 그 반대예요.) 경계가 정확히 정렬되지 않으면 함수는 보간을 사용해 비율을 추정해요. 결과적인 불확실성 때문에 경계가 포함인지 제외인지는 무의미해져요.
표준 지수 버킷을 가진 네이티브 히스토그램의 특수한 경우: 이 경우 NaN 관측치는 모든 버킷의 밖에 있는 것으로 간주돼요. histogram_fraction(-Inf, +Inf, b)는 효과적으로 NaN이 아닌 관측치의 비율을 반환하므로 1보다 작을 수 있어요.
histogram_quantile()
histogram_quantile(φ scalar, b instant-vector)는 클래식 히스토그램 또는 네이티브 히스토그램에서 φ-분위수(0 ≤ φ ≤ 1)를 계산해요. (φ-분위수와 (클래식) 히스토그램 메트릭 타입 사용에 대한 자세한 설명은 히스토그램과 요약을 참조하세요.)
b의 float 샘플은 하나 이상의 클래식 히스토그램의 각 버킷에서 관측치 수로 간주돼요. 각 float 샘플은 le 레이블을 가져야 하며, 그 값은 버킷의 포함 상한을 나타내요. (그런 레이블이 없는 float 샘플은 조용히 무시돼요.) 나머지 레이블과 메트릭 이름은 각 클래식 히스토그램에 속한 버킷을 식별하는 데 사용돼요. 히스토그램 메트릭 타입은 _bucket 접미사와 적절한 레이블을 가진 시계열을 자동으로 제공해요.
b의 (네이티브) 히스토그램 샘플은 각각 분위수를 계산할 별도의 히스토그램으로 취급돼요.
이름 충돌이 발생하지 않는 한 b에는 클래식과 네이티브 히스토그램이 섞여 있을 수 있어요.
분위수 계산의 시간 윈도우를 지정하려면 rate() 함수를 사용해요.
예시: 히스토그램 메트릭 이름이 http_request_duration_seconds라고 해요(따라서 클래식 히스토그램의 버킷 메트릭 이름은 http_request_duration_seconds_bucket). 지난 10분 동안의 요청 지속 시간의 90번째 백분위수를 계산하려면, http_request_duration_seconds가 클래식 히스토그램인 경우 다음 표현식을 사용해요:
histogram_quantile(0.9, rate(http_request_duration_seconds_bucket[10m]))
네이티브 히스토그램인 경우 대신 다음 표현식을 사용해요:
histogram_quantile(0.9, rate(http_request_duration_seconds[10m]))
분위수는 http_request_duration_seconds의 각 레이블 조합에 대해 계산돼요. 집계하려면 rate() 함수 주위에 sum() 집계자를 사용해요. histogram_quantile()이 클래식 히스토그램을 다루려면 le 레이블이 필요하므로 by 절에 포함해야 해요. 다음 표현식은 클래식 히스토그램에 대한 90번째 백분위수를 job별로 집계해요:
histogram_quantile(0.9, sum by (job, le) (rate(http_request_duration_seconds_bucket[10m])))
네이티브 히스토그램을 집계할 때 표현식은 다음과 같이 단순해져요:
histogram_quantile(0.9, sum by (job) (rate(http_request_duration_seconds[10m])))
모든 클래식 히스토그램을 집계하려면 le 레이블만 지정해요:
histogram_quantile(0.9, sum by (le) (rate(http_request_duration_seconds_bucket[10m])))
네이티브 히스토그램에서는 by 절 없이 평소처럼 모든 것을 집계해요:
histogram_quantile(0.9, sum(rate(http_request_duration_seconds[10m])))
(일반적인 경우인) 분위수 값이 버킷 경계와 일치하지 않을 때 histogram_quantile() 함수는 분위수 값이 속한 버킷 내에서 분위수 값을 보간해요. 클래식 히스토그램, 사용자 정의 버킷 경계를 가진 네이티브 히스토그램, 그리고 다른 네이티브 히스토그램의 제로 버킷의 경우 버킷 내 관측치가 균일하게 분포한다고 가정해요(선형 보간이라고도 함). 표준 지수 버킷팅 스키마를 가진 네이티브 히스토그램의 0이 아닌 버킷의 경우, 버킷 내 샘플이 더 높은 해상도의 가상 히스토그램에서 버킷을 균일하게 채우는 방식으로 분포한다는 가정 하에 보간이 수행돼요. (이것은 지수 보간이라고도 불려요. 자세한 내용은 네이티브 히스토그램 사양을 참조하세요.)
b에 관측치가 0개면 NaN이 반환돼요. φ < 0이면 -Inf가 반환돼요. φ > 1이면 +Inf가 반환돼요. φ = NaN이면 NaN이 반환돼요.
클래식 히스토그램의 특수한 경우:
b에 버킷이 두 개보다 적으면NaN이 반환돼요- 가장 높은 버킷은 상한이
+Inf여야 해요. (그렇지 않으면NaN이 반환돼요) - 분위수가 가장 높은 버킷에 있으면 두 번째로 높은 버킷의 상한이 반환돼요
- 가장 낮은 버킷의 상한이 0보다 크면 가장 낮은 버킷의 하한은 0으로 가정돼요. 그 경우 해당 버킷 내에서 일반적인 선형 보간이 적용돼요. 그렇지 않으면 가장 낮은 버킷에 있는 분위수에 대해 가장 낮은 버킷의 상한이 반환돼요
네이티브 히스토그램의 특수한 경우:
- 표준 지수 버킷을 가진 네이티브 히스토그램에
NaN관측치가 있고 분위수가 기존 지수 버킷 중 하나에 속하면,NaN관측치를+Inf로 취급하기 때문에 결과가 더 높은 값 쪽으로 치우쳐요. 이는 info 레벨 어노테이션으로 표시돼요 - 표준 지수 버킷을 가진 네이티브 히스토그램에
NaN관측치가 있고 분위수가 기존 지수 버킷 모두 위에 속하면NaN이 반환돼요. 이는 info 레벨 어노테이션으로 표시돼요 - 유한 폭의 제로 버킷은 히스토그램에 양수 버킷에는 관측치가 있지만 음수 버킷에는 없으면 음수 관측치를 포함하지 않는 것으로 가정돼요
- 유한 폭의 제로 버킷은 히스토그램에 음수 버킷에는 관측치가 있지만 양수 버킷에는 없으면 양수 관측치를 포함하지 않는 것으로 가정돼요
histogram_quantile(0, v instant-vector)를 사용해 히스토그램에 저장된 추정 최소값을 얻을 수 있어요.
histogram_quantile(1, v instant-vector)를 사용해 히스토그램에 저장된 추정 최대값을 얻을 수 있어요.
클래식 히스토그램의 버킷은 누적적이에요. 따라서 다음이 항상 성립해야 해요:
- 버킷의 카운트는 단조 증가(엄격히 비감소)해야 해요
- 두 연속 버킷의 상한 사이에 관측치가 없으면 두 버킷의 카운트가 같아요
하지만 부동 소수점 정밀도 문제(예: sum(rate(...))로 버킷을 계산하면서 생긴 작은 불일치)나 잘못된 데이터가 이런 가정을 위반할 수 있어요. 그 경우 histogram_quantile은 의미 있는 결과를 반환할 수 없어요. 이 문제를 완화하기 위해 histogram_quantile은 연속 버킷 간의 아주 작은 상대적 차이가 부동 소수점 정밀도 오류 때문에 발생한다고 가정하고 무시해요. (두 버킷 간 차이를 무시하는 임계값은 두 버킷 합의 1조분의 1(1e-12)이에요.) 게다가 이 조정 후에도 비단조 버킷 카운트가 있으면 단조성을 강제하기 위해 이전 버킷의 값으로 증가시켜요. 후자는 입력 데이터에 실제 문제가 있다는 증거이며, 따라서 input to histogram_quantile needed to be fixed for monotonicity라고 읽히는 info 레벨 어노테이션으로 표시돼요. 이 어노테이션을 만나면 잘못된 데이터의 원인을 찾아 제거해야 해요.
histogram_quantiles()
이 함수는 기능 플래그 --enable-feature=promql-experimental-functions로 활성화해야 해요.
histogram_quantiles(v instant-vector, quantile_label string, φ_1 scalar, φ_2 scalar, ...)는 클래식 히스토그램 또는 네이티브 히스토그램에서 여러 개(1에서 10 사이)의 φ-분위수(0 ≤ φ ≤ 1)를 계산해요. 분위수 계산은 histogram_quantile()과 같은 방식으로 동작해요. 두 번째 인자(문자열)는 쿼리 결과에서 서로 다른 분위수를 식별하는 데 사용되는 레이블 이름을 지정해요.
histogram_quantiles(sum(rate(foo[1m])), "quantile", 0.9, 0.99)
# => {quantile="0.9"} 123
{quantile="0.99"} 128
histogram_stddev() 와 histogram_stdvar()
histogram_stddev(v instant-vector)는 v의 각 네이티브 히스토그램 샘플에 대한 관측치의 추정 표준 편차를 반환해요. 이 추정에서는 버킷의 모든 관측치가 버킷 경계의 평균 값을 가진다고 가정해요. 제로 버킷과 사용자 정의 경계를 가진 버킷의 경우 산술 평균이 사용돼요. 일반적인 지수 버킷의 경우 기하 평균이 사용돼요. float 샘플은 무시되며 반환된 벡터에 나타나지 않아요.
마찬가지로 histogram_stdvar(v instant-vector)는 v의 각 네이티브 히스토그램 샘플에 대한 관측치의 추정 분산을 반환해요.
hour()
hour(v=vector(time()) instant-vector)는 v의 float 샘플을 타임스탬프(1970년 1월 1일 UTC 이후 초 수)로 해석하고 각 타임스탬프에 대한 하루 중 시각(UTC 기준)을 반환해요. 반환 값은 0에서 23까지예요. 입력 벡터의 히스토그램 샘플은 조용히 무시돼요.
idelta()
idelta(v range-vector)는 범위 벡터 v의 마지막 두 샘플 간의 차이를 계산해 주어진 델타와 동일한 레이블을 가진 인스턴트 벡터를 반환해요. 두 샘플은 모두 float 샘플이거나 모두 histogram 샘플이어야 해요. 마지막 두 샘플 중 하나가 float이고 다른 하나가 histogram인 v의 요소는 warn 레벨 어노테이션으로 표시되며 결과 벡터에서 생략돼요.
idelta는 게이지에만 사용해야 해요(float와 히스토그램 모두).
increase()
increase(v range-vector)는 범위 벡터에 있는 시계열의 증가량을 계산해요. 단조성의 중단(예: 타깃 재시작으로 인한 카운터 리셋)은 자동으로 조정돼요. 증가량은 범위 벡터 셀렉터에 지정된 전체 시간 범위를 덮도록 외삽되므로, 카운터가 정수 증분으로만 증가해도 정수가 아닌 결과를 얻을 수 있어요.
다음 예시 표현식은 범위 벡터의 각 시계열에 대해 지난 5분 동안 측정된 HTTP 요청 수를 반환해요:
increase(http_requests_total{job="api-server"}[5m])
increase는 각 구성 요소(관측치의 sum과 count, 버킷)가 v의 첫 번째와 마지막 네이티브 히스토그램의 해당 구성 요소 간 증가량이 되는 새 히스토그램을 계산해 히스토그램 샘플에 동작해요. 다만 범위 내에 float 샘플과 histogram 샘플이 섞여 있는 v의 각 요소는 warn 레벨 어노테이션으로 표시되며 결과 벡터에서 생략돼요.
increase는 카운터에만 사용해야 해요(float와 히스토그램 모두). 지정된 시간 범위 윈도우 아래의 초 수를 곱한 rate(v)의 문법적 설탕(syntactic sugar)이며, 주로 사람이 읽기 쉽게 하기 위해 사용되어야 해요. 증가량이 초 단위로 일관되게 추적되도록 기록 규칙에서는 rate를 사용하세요.
info()
info 함수는 info 메트릭에서 레이블을 포함하는 UX를 개선하기 위한 실험이에요. 이 함수의 동작은 PromQL에서 제거되는 것을 포함해 향후 프로메테우스 버전에서 변경될 수 있어요. info는 기능 플래그 --enable-feature=promql-experimental-functions로 활성화해야 해요.
info(v instant-vector, [data-label-selector instant-vector])는 v의 각 시계열에 대해 일치하는 식별 레이블(자세한 내용은 아래)을 가진 모든 info 시리즈를 찾아, 그들의 데이터(즉, 비식별) 레이블의 합집합을 시계열에 추가해요. 두 번째 인자 data-label-selector는 선택 사항이에요. 실제 인스턴트 벡터가 아니라 그 구문의 부분집합을 사용해요. 중괄호({ ... })로 시작하고 끝나야 하며 레이블 매처만 포함할 수 있어요. 레이블 매처는 어떤 info 시리즈를 고려할지와 v에 어떤 데이터 레이블을 추가할지를 제한하는 데 사용돼요.
특정 타임스탬프에서 v의 특정 시계열에 대해 일치하는 info 시리즈가 없으면(예: info 시리즈가 stale해졌기 때문에) 동작은 데이터 레이블 매처에 따라 달라져요: data-label-selector에 빈 문자열과 일치하지 않는 매처가 있으면(예: {data=~".+"}), 필요한 강화(enrichment)를 쓸 수 없으므로 그 타임스탬프에서 해당 시계열은 결과에서 빠져요. 모든 매처가 빈 문자열과 일치하면(예: {data=~".*"}) 또는 data-label-selector가 제공되지 않으면 시계열은 강화 없이 반환돼요.
info 시리즈의 식별 레이블은 info 시리즈를 고유하게 식별하는 레이블의 부분집합이에요. 나머지 레이블은 데이터 레이블(비식별이라고도 함)로 간주돼요. (프로메테우스의 시계열 정체성 개념은 항상 모든 레이블을 포함한다는 점에 주의하세요. info 함수를 위해 우리는 info 시리즈 정체성을 기존 프로메테우스 관점과 다르게 "논리적으로" 정의해요.) info 시리즈의 식별 레이블은 그것을 일반(비-info) 시리즈에 조인하는 데 사용되는데, 즉 info 시리즈의 식별 레이블과 같은 레이블을 가진 시리즈예요. info 함수에 의해 일반 시리즈에 추가되는 데이터 레이블은 효과적으로 메타데이터 키-값 쌍을 인코딩해요. (이는 기존 프로메테우스 관점에서 데이터 레이블의 변경이 하나의 info 시리즈의 끝과 새 info 시리즈의 시작을 구성하는 반면, info 함수의 "논리적" 관점은 같은 info 시리즈가 다른 "데이터"를 가진 채 계속 존재한다는 것입니다.)
데이터 레이블을 추가하는 기존 방식은 때때로 "조인 쿼리"라고 불리며, 다음 예시로 설명돼요:
rate(http_server_request_duration_seconds_count[2m])
* on (job, instance) group_left (k8s_cluster_name)
target_info
쿼리의 핵심은 표현식 rate(http_server_request_duration_seconds_count[2m])예요. 하지만 info 메트릭에서 데이터 레이블을 추가하려면 사용자는 어떤 info 메트릭을 사용할지(target_info), 식별 레이블이 무엇인지(on (job, instance)), 어떤 데이터 레이블을 추가할지(group_left (k8s_cluster_name))를 지정하는 복잡하고(그다지 명확하지 않은) 구문을 사용해야 해요.
이 쿼리는 장황하고 쓰기 어려울 뿐만 아니라 "정체성 위기"에 부딪힐 수도 있어요: target_info의 데이터 레이블 중 하나라도 변경되면 프로메테우스는 그것을 시리즈의 변경으로 봐요(위에서 언급했듯 프로메테우스에는 비식별 레이블이라는 네이티브 개념이 없어요). 이전 target_info 시리즈가 제대로 stale로 표시되지 않으면(특정 수집 경로에서 발생할 수 있음) 위 쿼리는 충돌하는 일치 항목을 발견해 target_info의 이전 버전과 새 버전 모두와 일치하므로 최대 5m(룩백 델타) 동안 실패할 거예요.
info 함수는 이 충돌을 더 새로운 시리즈를 선호하는 방식으로 해결할 뿐만 아니라, 사용 가능한 info 시리즈와 그들의 식별 레이블을 알기 때문에 구문도 단순화해요. info 함수를 쓰면 예시 쿼리는 다음과 같아요:
info(
rate(http_server_request_duration_seconds_count[2m]),
{k8s_cluster_name=~".+"}
)
모든 데이터 레이블을 추가하는 일반적인 경우는 info 함수의 두 번째 인자를 완전히 생략해 달성할 수 있으며, 예시를 더욱 단순화해요:
info(rate(http_server_request_duration_seconds_count[2m]))
info는 보통 일치하는 모든 info 시리즈를 자동으로 찾지만, {__name__="target_info"} 같은 __name__ 레이블 매처를 제공해 제한할 수 있어요.
v에 data-label-selector(또는 그 인자가 지정되지 않은 경우 기본 target_info)와 일치하는 시계열이 있으면 info 시리즈로 취급되어 변경 없이 반환된다는 점에 주의하세요.
제약 사항 (Limitations)
현재 반복에서는 info가 기본적으로 이름이 target_info인 info 시리즈만 고려해요. 또한 식별 info 시리즈 레이블이 instance와 job이라고 가정해요. 다만 info는 __name__ 레이블 매처를 통해 다른 info 시리즈 이름도 지원해요. 예를 들어 target_info와 build_info를 모두 고려하도록 다음과 같이 명시적으로 말할 수 있어요: {__name__=~"(target|build)_info"}. 하지만 식별 레이블은 항상 instance와 job이어야 해요.
부정된 __name__ 매처만 제공되면(예: {__name__!="target_info"}), info는 .+_info와 일치하는 모든 메트릭을 고려한 다음 부정된 매처를 필터로 적용해요. 부정된 매처만으로는 어떤 info 메트릭을 고려할지 긍정적으로 식별할 수 없기 때문이에요.
이러한 제약 사항은 info 함수의 목적을 부분적으로 무산시켜요. 현재 단계에서는 이 접근이 실제로 얼마나 유용한지 알아내기 위한 실험이에요. info 함수의 최종 버전은 실제로 일치하는 모든 info 시리즈와 적절한 식별 레이블을 고려할 거예요.
irate()
irate(v range-vector)는 범위 벡터에 있는 시계열의 초당 인스턴트 rate 증가를 계산해요. 이것은 마지막 두 데이터 포인트에 기반해요. 단조성의 중단(예: 타깃 재시작으로 인한 카운터 리셋)은 자동으로 조정돼요. 두 샘플은 모두 float 샘플이거나 모두 histogram 샘플이어야 해요. 마지막 두 샘플 중 하나가 float이고 다른 하나가 histogram인 v의 요소는 warn 레벨 어노테이션으로 표시되며 결과 벡터에서 생략돼요.
irate는 카운터에만 사용해야 해요(float와 히스토그램 모두).
다음 예시 표현식은 범위 벡터의 각 시계열에 대해 가장 최근 두 데이터 포인트를 최대 5분 전까지 찾아 HTTP 요청의 초당 rate를 반환해요:
irate(http_requests_total{job="api-server"}[5m])
irate는 변동이 심하고 빠르게 움직이는 카운터를 그래프로 그릴 때만 사용해야 해요. 알림과 느리게 움직이는 카운터에는 rate를 사용하세요. rate의 짧은 변화가 FOR 절을 리셋할 수 있고 희귀한 스파이크로만 이루어진 그래프는 읽기 어렵기 때문이에요.
irate()를 집계 연산자(예: sum())나 시간에 걸쳐 집계하는 함수(_over_time로 끝나는 모든 함수)와 결합할 때는 항상 먼저 irate()를 취한 다음 집계하세요. 그렇지 않으면 irate()는 타깃이 재시작할 때 카운터 리셋을 감지할 수 없어요.
label_join()
v의 각 시계열에 대해 label_join(v instant-vector, dst_label string, separator string, src_label_1 string, src_label_2 string, ...)는 separator를 사용해 모든 src_labels의 값을 모두 이어 붙이고, 이어 붙인 값을 담은 dst_label 레이블을 가진 시계열을 반환해요. 이 함수에는 src_labels가 몇 개든 있을 수 있어요.
label_join은 float와 histogram 샘플에 같은 방식으로 동작해요.
이 예시는 각 시계열에 값이 a,b,c인 foo 레이블이 추가된 벡터를 반환해요:
label_join(up{job="api-server",src1="a",src2="b",src3="c"}, "foo", ",", "src1", "src2", "src3")
label_replace()
v의 각 시계열에 대해 label_replace(v instant-vector, dst_label string, replacement string, src_label string, regex string)는 정규식 regex를 레이블 src_label의 값과 대조해요. 일치하면 반환된 시계열의 dst_label 레이블 값은 입력의 원래 레이블과 함께 replacement의 확장이 돼요. 정규식의 캡처링 그룹은 $1, $2 등으로 참조할 수 있어요. 정규식의 명명된 캡처링 그룹은 $name으로 참조할 수 있어요(name은 캡처링 그룹 이름). 정규식이 일치하지 않으면 시계열은 변경 없이 반환돼요.
label_replace는 float와 histogram 샘플에 같은 방식으로 동작해요.
이 예시는 service 레이블에 값 a:c, foo 레이블에 값 a를 가진 시계열을 반환해요:
label_replace(up{job="api-server",service="a:c"}, "foo", "$1", "service", "(.*):.*")
이 두 번째 예시는 첫 번째 예시와 같은 효과를 가지며 명명된 캡처링 그룹의 사용을 보여줘요:
label_replace(up{job="api-server",service="a:c"}, "foo", "$name", "service", "(?P<name>.*):(?P<value>.*)")
max_of()
이 함수는 기능 플래그 --enable-feature=promql-experimental-functions로 활성화해야 해요.
max_of(a scalar, b scalar)는 두 스칼라 값 a와 b 중 더 큰 값을 반환해요.
min_of()
이 함수는 기능 플래그 --enable-feature=promql-experimental-functions로 활성화해야 해요.
min_of(a scalar, b scalar)는 두 스칼라 값 a와 b 중 더 작은 값을 반환해요.
ln()
ln(v instant-vector)는 v의 모든 float 샘플에 대한 자연 로그를 계산해요. 입력 벡터의 히스토그램 샘플은 조용히 무시돼요. 특수한 경우는:
ln(+Inf) = +Infln(0) = -Infln(x<0) = NaN
log2()
log2(v instant-vector)는 v의 모든 float 샘플에 대한 이진 로그를 계산해요. 입력 벡터의 히스토그램 샘플은 조용히 무시돼요. 특수한 경우는 ln과 동일해요.
log10()
log10(v instant-vector)는 v의 모든 float 샘플에 대한 십진 로그를 계산해요. 입력 벡터의 히스토그램 샘플은 조용히 무시돼요. 특수한 경우는 ln과 동일해요.
minute()
minute(v=vector(time()) instant-vector)는 v의 float 샘플을 타임스탬프로 해석하고 각 타임스탬프에 대한 시의 분(UTC 기준)을 반환해요. 반환 값은 0에서 59까지예요. 입력 벡터의 히스토그램 샘플은 조용히 무시돼요.
month()
month(v=vector(time()) instant-vector)는 v의 float 샘플을 타임스탬프로 해석하고 각 타임스탬프에 대한 연의 월(UTC 기준)을 반환해요. 반환 값은 1에서 12까지이며, 여기서 1은 1월을 뜻해요. 입력 벡터의 히스토그램 샘플은 조용히 무시돼요.
predict_linear()
predict_linear(v range-vector, t scalar)는 단순 선형 회귀를 사용해 범위 벡터 v를 기반으로 t초 후의 시계열 값을 예측해요. 계산을 수행하려면 범위 벡터에 최소 두 개의 float 샘플이 있어야 해요. 범위 벡터에서 +Inf 또는 -Inf가 발견되면 예측 값은 NaN이 돼요.
predict_linear는 게이지에만 사용해야 하며 float 샘플에서만 동작해요. histogram 샘플만 포함하는 범위 벡터의 요소는 완전히 무시돼요. float와 histogram 샘플이 섞여 있는 요소의 경우 float 샘플만 입력으로 사용되며 info 레벨 어노테이션으로 표시돼요.
range()
이 함수는 기능 플래그 --enable-feature=promql-experimental-functions로 활성화해야 해요.
range()는 현재 쿼리 범위 평가의 범위 기간을 초 단위로 반환하며 end() - start()와 동일해요. 인스턴트 쿼리의 경우 0을 반환해요.
rate()
rate(v range-vector)는 범위 벡터에 있는 시계열의 초당 평균 rate 증가를 계산해요. 단조성의 중단(예: 타깃 재시작으로 인한 카운터 리셋)은 자동으로 조정돼요. 또한 계산은 시간 범위의 끝까지 외삽하므로, 놓친 스크레이프나 스크레이프 주기와 범위 시간 기간의 불완전한 정렬을 허용해요.
다음 예시 표현식은 범위 벡터의 각 시계열에 대해 지난 5분 동안 HTTP 요청의 초당 평균 rate를 반환해요:
rate(http_requests_total{job="api-server"}[5m])
rate는 각 구성 요소(관측치의 sum과 count, 버킷)가 v의 첫 번째와 마지막 네이티브 히스토그램의 해당 구성 요소 간 증가 rate가 되는 새 히스토그램을 계산해 네이티브 히스토그램에 동작해요. 다만 범위 내에 float와 네이티브 히스토그램 샘플이 섞여 있는 v의 각 요소는 warn 레벨 어노테이션으로 표시되며 결과 벡터에서 생략돼요.
rate는 카운터에만 사용해야 해요(float와 히스토그램 모두). 알림과 느리게 움직이는 카운터를 그래프로 그리는 데 가장 적합해요.
rate()를 집계 연산자(예: sum())나 시간에 걸쳐 집계하는 함수(_over_time로 끝나는 모든 함수)와 결합할 때는 항상 먼저 rate()를 취한 다음 집계하세요. 그렇지 않으면 rate()는 타깃이 재시작할 때 카운터 리셋을 감지할 수 없어요.
resets()
각 입력 시계열에 대해 resets(v range-vector)는 제공된 시간 범위 내에서 카운터 리셋 횟수를 인스턴트 벡터로 반환해요. 두 연속 float 샘플 간 값의 감소는 카운터 리셋으로 해석돼요. 네이티브 히스토그램의 리셋은 더 복잡한 방식으로 감지돼요: 제로 버킷을 포함한 어떤 버킷에서든 감소, 관측치 수의 감소는 카운터 리셋을 구성하지만, 이전에 채워졌던 버킷의 소멸, 제로 버킷 폭의 감소, 또는 호환되지 않는 해상도 감소가 아닌 어떤 스키마 변경도 리셋을 구성해요.
resets는 카운터에만 사용해야 해요(float와 히스토그램 모두).
float 샘플 뒤에 histogram 샘플이 오거나 그 반대도 리셋으로 간주돼요. counter histogram 샘플 뒤에 gauge histogram 샘플이 오거나 그 반대도 리셋으로 간주돼요(단, 위에서 언급했듯 resets는 애초에 게이지에 사용해서는 안 된다는 점에 주의하세요).
round()
round(v instant-vector, to_nearest=1 scalar)는 v의 모든 요소의 샘플 값을 가장 가까운 정수로 반올림해요. 동률은 올려서 해결돼요. 선택적인 to_nearest 인자는 샘플 값이 반올림되어야 할 가장 가까운 배수를 지정할 수 있어요. 이 배수는 분수일 수도 있어요. 입력 벡터의 히스토그램 샘플은 조용히 무시돼요.
scalar()
float 샘플을 가진 요소를 하나만 포함하는 입력 벡터가 주어지면 scalar(v instant-vector)는 해당 float 샘플의 샘플 값을 스칼라로 반환해요. 입력 벡터에 float 샘플을 가진 요소가 정확히 하나가 아니면 scalar는 NaN을 반환해요. 입력 벡터의 히스토그램 샘플은 조용히 무시돼요.
sgn()
sgn(v instant-vector)는 모든 float 샘플 값을 부호로 변환한 벡터를 반환하는데, 다음으로 정의돼요: v가 양수이면 1, 음수이면 -1, 0과 같으면 0. 입력 벡터의 히스토그램 샘플은 조용히 무시돼요.
sort()
sort(v instant-vector)는 벡터 요소를 float 샘플 값으로 오름차순 정렬해 반환해요. 입력 벡터의 히스토그램 샘플은 조용히 무시돼요.
sort는 인스턴트 쿼리의 결과에만 영향을 준다는 점에 유의하세요. 범위 쿼리 결과는 항상 고정된 출력 순서를 가지기 때문이에요.
sort_desc()
sort와 같지만 내림차순으로 정렬해요.
sort_by_label()
이 함수는 기능 플래그 --enable-feature=promql-experimental-functions로 활성화해야 해요.
sort_by_label(v instant-vector, label string, ...)는 주어진 레이블의 값으로 오름차순 정렬된 벡터 요소를 반환해요. 이 레이블 값이 같으면 요소는 전체 레이블 세트로 정렬돼요. sort_by_label은 float와 histogram 샘플에 같은 방식으로 동작해요.
sort_by_label은 인스턴트 쿼리의 결과에만 영향을 준다는 점에 유의하세요. 범위 쿼리 결과는 항상 고정된 출력 순서를 가지기 때문이에요.
sort_by_label은 자연 정렬 순서를 사용해요.
sort_by_label_desc()
이 함수는 기능 플래그 --enable-feature=promql-experimental-functions로 활성화해야 해요.
sort_by_label과 같지만 내림차순으로 정렬해요.
sqrt()
sqrt(v instant-vector)는 v의 모든 float 샘플의 제곱근을 계산해요. 입력 벡터의 히스토그램 샘플은 조용히 무시돼요.
start()
이 함수는 기능 플래그 --enable-feature=promql-experimental-functions로 활성화해야 해요.
start()는 현재 쿼리 범위 평가의 시작 타임스탬프를 1970년 1월 1일 UTC 이후 초 수로 반환해요. 인스턴트 쿼리의 경우 이는 평가 타임스탬프와 같아요.
start_timestamp()
start_timestamp(v instant-vector)는 주어진 벡터의 각 샘플의 시작 타임스탬프를 1970년 1월 1일 UTC 이후 초 수로 반환해요. float와 histogram 샘플에 같은 방식으로 동작해요.
이 함수는 인스턴트 벡터에 직접 사용되고 use-start-timestamps 기능 플래그가 활성화된 경우에만 동작해요. 그렇지 않고 표현식에 사용되거나 use-start-timestamps가 비활성화되면 빈 결과를 반환해요.
step()
이 함수는 기능 플래그 --enable-feature=promql-experimental-functions로 활성화해야 해요.
step()은 쿼리 해상도 스텝을 초 수로 반환해요. 인스턴트 쿼리의 경우 0을 반환해요.
time()
time()는 1970년 1월 1일 UTC 이후 초 수를 반환해요. 이것은 실제로 현재 시간이 아니라 표현식이 평가될 시간을 반환한다는 점에 유의하세요.
timestamp()
timestamp(v instant-vector)는 주어진 벡터의 각 샘플의 타임스탬프를 1970년 1월 1일 UTC 이후 초 수로 반환해요. float와 histogram 샘플에 같은 방식으로 동작해요.
vector()
vector(s scalar)는 스칼라 s를 float 샘플로 변환하고 레이블이 없는 단일 요소 인스턴트 벡터로 반환해요.
year()
year(v=vector(time()) instant-vector)는 주어진 각 시간에 대한 연도(UTC 기준)를 반환해요. 입력 벡터의 히스토그램 샘플은 조용히 무시돼요.
_over_time() 함수들
다음 함수들은 주어진 범위 벡터의 각 시리즈를 시간에 걸쳐 집계하고, 시리즈별 집계 결과를 가진 인스턴트 벡터를 반환해요:
avg_over_time(range-vector): 지정된 구간의 모든 float 또는 histogram 샘플의 평균값(자세한 내용은 아래)min_over_time(range-vector): 지정된 구간의 모든 float 샘플의 최소값max_over_time(range-vector): 지정된 구간의 모든 float 샘플의 최대값sum_over_time(range-vector): 지정된 구간의 모든 float 또는 histogram 샘플의 합(자세한 내용은 아래)count_over_time(range-vector): 지정된 구간의 모든 샘플의 개수quantile_over_time(scalar, range-vector): 지정된 구간의 모든 float 샘플의 φ-분위수(0 ≤ φ ≤ 1)stddev_over_time(range-vector): 지정된 구간의 모든 float 샘플의 모표준편차stdvar_over_time(range-vector): 지정된 구간의 모든 float 샘플의 모분산last_over_time(range-vector): 지정된 구간의 가장 최근 샘플first_over_time(range-vector): 지정된 구간의 가장 오래된 샘플present_over_time(range-vector): 지정된 구간의 어떤 시리즈에 대해서든 값 1
기능 플래그 --enable-feature=promql-experimental-functions가 설정되면 다음 추가 함수를 사용할 수 있어요:
mad_over_time(range-vector): 지정된 구간의 모든 float 샘플의 중앙값 절대 편차ts_of_min_over_time(range-vector): 지정된 구간의 모든 float 샘플 중 최소값을 가진 마지막 float 샘플의 타임스탬프ts_of_max_over_time(range-vector): 지정된 구간의 모든 float 샘플 중 최대값을 가진 마지막 float 샘플의 타임스탬프ts_of_last_over_time(range-vector): 지정된 구간의 마지막 샘플의 타임스탬프ts_of_first_over_time(range-vector): 지정된 구간의 첫 번째 샘플의 타임스탬프
지정된 구간의 모든 값은 구간 전체에 걸쳐 균등하게 간격이 없어도 집계에서 동일한 가중치를 가진다는 점에 유의하세요.
이 함수들은 히스토그램에 다음과 같은 방식으로 동작해요:
count_over_time,first_over_time,last_over_time,present_over_time()는 float와 histogram 샘플에 같은 방식으로 동작해요avg_over_time()와sum_over_time()는 해당 집계 연산자에 대응하는 방식으로 histogram 샘플에 동작해요. 시리즈가 범위 내에 float 샘플과 histogram 샘플을 섞어 포함하면 해당 결과는 출력 벡터에서 완전히 제거돼요. 그런 제거는 warn 레벨 어노테이션으로 표시돼요- 다른 모든 함수는 histogram 샘플을 다음 방식으로 무시해요: histogram 샘플만 포함하는 입력 범위는 출력에서 조용히 제거돼요. 히스토그램과 float 샘플이 섞인 범위의 경우 float 샘플만 처리되고 histogram 샘플의 생략은 info 레벨 어노테이션으로 표시돼요
first_over_time(m[1m])는 m offset 1m과 다른데, 전자는 1m 범위 내에서 m의 첫 번째 샘플을 선택하지만 m offset 1m은 1m 오프셋 밖이자 앞의 룩백 구간 내에서 가장 최근 샘플을 선택하기 때문이에요. 이는 선택된 샘플이 범위 스텝 내에 있도록 보장하기 위해 범위 쿼리에서 first_over_time(m[step()])과 함께 사용할 때 특히 유용해요.
삼각 함수 (Trigonometric Functions)
삼각 함수는 라디안 단위로 동작해요. 입력 벡터의 히스토그램 샘플은 무시해요.
acos(v instant-vector):v의 모든 float 샘플의 아크코사인 계산 (특수 경우)acosh(v instant-vector):v의 모든 float 샘플의 역쌍곡코사인 계산 (특수 경우)asin(v instant-vector):v의 모든 float 샘플의 아크사인 계산 (특수 경우)asinh(v instant-vector):v의 모든 float 샘플의 역쌍곡사인 계산 (특수 경우)atan(v instant-vector):v의 모든 float 샘플의 아크탄젠트 계산 (특수 경우)atanh(v instant-vector):v의 모든 float 샘플의 역쌍곡탄젠트 계산 (특수 경우)cos(v instant-vector):v의 모든 float 샘플의 코사인 계산 (특수 경우)cosh(v instant-vector):v의 모든 float 샘플의 쌍곡코사인 계산 (특수 경우)sin(v instant-vector):v의 모든 float 샘플의 사인 계산 (특수 경우)sinh(v instant-vector):v의 모든 float 샘플의 쌍곡사인 계산 (특수 경우)tan(v instant-vector):v의 모든 float 샘플의 탄젠트 계산 (특수 경우)tanh(v instant-vector):v의 모든 float 샘플의 쌍곡탄젠트 계산 (특수 경우)
도와 라디안 사이 변환에 유용한 것들:
deg(v instant-vector):v의 모든 float 샘플을 라디안에서 도로 변환pi(): pi 반환rad(v instant-vector):v의 모든 float 샘플을 도에서 라디안으로 변환
더 알아보기 (Learn more)
- 연산자(Operators) — 벡터 매칭과 집계 연산자,
_over_time집계와의 관계 - 쿼리 예시(Query examples) —
rate,topk같은 함수를 실제 쿼리에서 쓰는 예시 - 지표 유형(Metric types) — 히스토그램·카운터·게이지 등 함수가 다루는 데이터의 의미
- 히스토그램과 요약 실무 — φ-분위수와 Apdex 점수 계산 실무
- 네이티브 히스토그램 사양 — 지수 보간과 버킷 내부 동작