Ops/Monitoring

[Prometheus] Vector와 Scalar란?

록흐 2025. 12. 17. 12:00
반응형

 

Vector는 방향 + 크기, Scalar는 크기 이다. 

 

메트릭에서 '방향'의 개념은 라벨(Label)이다. 

Vector는 라벨(방향) + 값(크기), Scalar는 값(크기)이다.  

 

 

나의 경우, K8s 파드의 메모리 사용률을 확인하기 위해 아래 PromQL을 작성하였는데, 값이 출력되지 않았다. 

 

PromQL ( Vector / Vector )

container_memory_working_set_bytes{namespace="$namespace", container="$container"} 
/ 
(
sum(kube_pod_container_resource_limits{namespace="$namespace", container="$container"})  / 
count(kube_pod_container_resource_limits{namespace="$namespace", container="$container"})
) * 100

 

위 PromQL은  '파드별 메모리 사용량 / 파드에 할당된 메모리 limit 값 ' 이다.

 

파드별 메모리 사용량은 파드에 따라 달라지므로, 파드레이블과 값이 있어야 하는 Vector 값

파드의 메모리 limit 값은 같은 Deployment의 파드면 동일하므로 고정된 Scalar 값이다. 

 

그런데 

분자도 벡터, 분모도 벡터로 계산하여 라벨이 서로 일치하지 않아 결과가 출력되지 않은 것이다. 

Vector 간 연산은 라벨이 서로 일치하는 것끼리의 계산이기 때문이다. 

 

 

PromQL ( Vector / Scalar )

container_memory_working_set_bytes{namespace="$namespace", container="$container"} 
/ 
scalar(
sum(kube_pod_container_resource_limits{namespace="$namespace", container="$container"})  / 
count(kube_pod_container_resource_limits{namespace="$namespace", container="$container"})
) * 100

 

 

그래서 위처럼 PromQL을 수정하니 정상 출력이 되었다. 

반응형