
공부하다보니 service monitor와 pod monitor에 대한 개념이 빈약하다고 느껴 정리를 해야겠다는 생각이 들었다.
각 개념을 설명하고 두 모니터의 차이를 비교해서 적을 것이다.
PodMonitor는 “파드 자체를 직접 선택해서(PodSelector)” 메트릭을 수집하는 리소스이다.
즉,
Pod 단위로 접근하므로 다음 특징을 갖는다.
ServiceMonitor는 “Service에 연결된 엔드포인트”를 통해 메트릭을 수집하는 리소스이다.
즉,
Prometheus가 직접 Pod를 바라보는 것이 아니라,
Service → Endpoints → Pod 로 이어지는 Kubernetes 기본 구조를 그대로 활용한다.
| 구분 | PodMonitor | ServiceMonitor |
|---|---|---|
| 선택 기준 | Pod label 직접 참조 | Service label을 통해 간접적으로 Pod 선택 |
| scrape 경로 | Pod IP 직접 접근 | Service → Endpoint → Pod 접근 |
| 서비스 필요 여부 | 필요 없음 | 반드시 Service 필요 |
| 대상 변경 안정성 | Pod IP 변하면 영향 큼 | Service가 IP 변화를 추상화함 |
| 사용 적합 상황 | 테스트, exporter sidecar, 서비스 없는 Pod | 운영 환경, 안정적 서비스 트래픽 구조 |
apiVersion: monitoring.coreos.com/v1
kind: PodMonitor
metadata:
name: myapp-podmonitor
namespace: monitoring
spec:
selector:
matchLabels:
app: myapp
namespaceSelector:
matchNames:
- default
podMetricsEndpoints:
- port: metrics
interval: 15s
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: myapp-servicemonitor
namespace: monitoring
spec:
selector:
matchLabels:
app: myapp
namespaceSelector:
matchNames:
- default
endpoints:
- port: metrics
interval: 15s
Pod Monitor은 Pod 자체를 직접 바라보는 모니터링 방식이며,
Service Monitor은 Service를 통해 안정적으로 Pod를 바라보는 방식이다.
둘 다 Prometheus Operator에서 사용되는 CRD이지만
대상이 무엇인지, 접근 경로를 어디를 기준으로 하는지에 따라 기술적으로 분명한 차이가 있다.
운영환경에서는 보통 ServiceMonitor가 더 적합하며,
개발환경이나, Service가 없는 Pod, 또는 Sidecar exporter를 붙인 구조는
PodMonitor가 더 유연하게 활용된다.
[프로메테우스 공식 깃허브 홈페이지 - Service Monitor, Pod Monitor]
https://github.com/prometheus-operator/prometheus-operator/blob/main/Documentation/getting-started/design.md#servicemonitor