26S02f

QK·5일 전

PromQL의 clamp_min(v instant-vector, min scalar) 함수는 첫 번째 인자로 Instant Vector를 요구합니다.

scalar(...) 함수로 감싼 결과는 벡터가 아닌 Scalar 타입으로 변환되기 때문에 clamp_min(scalar(...), 1) 구문에서 해당 파싱 에러가 발생합니다. 또한 벡터와 벡터 간의 나눗셈에는 scalar() 변환이 불필요합니다.


1. 에러가 발생한 수식 패턴

  • 오류 원인 구문:
... / clamp_min(scalar(count(...)), 1)

scalar()가 스칼라를 반환하는데, clamp_min이 이를 벡터로 인식하지 못해 파싱 단계에서 실패합니다.


2. 수정 방법

scalar()를 제거하고 순수 벡터 상태에서 clamp_min을 적용하거나, 스칼라 연산 대신 벡터 간 나눗셈 그룹 수정자(group_left)를 매핑합니다.

Pod당 정규화 수식 수정 (패널 2, 4)

  • 기존:
topk(10, sum by (bucket) (rate(minio_api_requests_total{...}[5m])) / clamp_min(scalar(count(count by (instance) (minio_api_requests_total{...}))), 1))
  • 수정안:
topk(10, 
  sum by (bucket) (rate(minio_api_requests_total{namespace=~"$namespace", bucket=~"$bucket", api=~"(?i).*(list).*"}[5m])) 
  / 
  clamp_min(count(count by (instance) (minio_api_requests_total{namespace=~"$namespace"})), 1)
)

또는 scalar() 값을 유지하며 단일 분모로 나눌 경우:

topk(10, 
  sum by (bucket) (rate(minio_api_requests_total{namespace=~"$namespace", bucket=~"$bucket", api=~"(?i).*(list).*"}[5m])) 
  / 
  scalar(clamp_min(count(count by (instance) (minio_api_requests_total{namespace=~"$namespace"})), 1))
)

API 소요 시간 수식 수정 (패널 1, 2)

  • ListObjectsV2 평균 소요 시간 (초):
sum by (bucket) (rate(minio_api_requests_duration_total{namespace=~"$namespace", bucket=~"$bucket", api=~"(?i).*(list).*"}[5m])) 
/ 
clamp_min(sum by (bucket) (rate(minio_api_requests_total{namespace=~"$namespace", bucket=~"$bucket", api=~"(?i).*(list).*"}[5m])), 0.001)
  • 쓰기 계열 Lock 점유 API 평균 소요 시간 (초):
topk(10, 
  sum by (bucket, api) (rate(minio_api_requests_duration_total{namespace=~"$namespace", bucket=~"$bucket", api=~"(?i).*(put|multipart|delete|complete).*"}[5m])) 
  / 
  clamp_min(sum by (bucket, api) (rate(minio_api_requests_total{namespace=~"$namespace", bucket=~"$bucket", api=~"(?i).*(put|multipart|delete|complete).*"}[5m])), 0.001)
)

3. 적용 가이드

JSON 파일 내에 존재하는 모든 scalar( 문자열을 검색하여 제거하고 저장하면, 파싱 에러 없이 정상적으로 쿼리가 실행됩니다.

profile
engineer

0개의 댓글