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)
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)
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( 문자열을 검색하여 제거하고 저장하면, 파싱 에러 없이 정상적으로 쿼리가 실행됩니다.