devops

Service Monitor 서비스 모니터 Target 등록 에러 본문

DevOps/Monitoring

Service Monitor 서비스 모니터 Target 등록 에러

vataops 2023. 9. 30. 00:13
반응형

대부분 쿠버네티스 기반 모니터링에 특화된 Prometheus Operator를 활용하여 job을 추가한다.

Prometheus Operator를 사용하면 일일이 kubectl patch를 통해 configmap에서 job을 추가하지 않고도 Service monitor 혹은 Pod monitor라는 CR로 쉽게 등록이 가능하다는 장점이 있다.

ServiceMonitor를 이용하여 등록된 Target 리스트

그러나 문제는 Service Monitor를 apply했는데도, Target에 등록조차 안되는 상황이 올때가 있다.

ServiceMonitor 리스트

kubectl get servicemonitor 를 확인하면 오브젝트가 정상적으로 apply된 상태임을 알 수 있다. 에러 메시지도 확인할 수 없는 상황.

사실 프로메테우스 오퍼레이터는 초기 배포 시 namespace와 label 키 값을 설렉터로 지정하여 특정 Service monitor만 읽어들인다. 그렇기 때문에 오퍼레이터의 셀렉터 label을 확인하고 Service monitor를 배포할 필요가 있다.

# redis-service-monitor.yaml

apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  labels:
    app: redis 
    release: prometheus-stack
  name: redis
  namespace: monitoring
spec:
  namespaceSelector:
    any: true
  selector:
    matchLabels:
      app.kubernetes.io/instance: wemixdev-dex
      app.kubernetes.io/name: prometheus-redis-exporter
  endpoints:
  - port: redis-exporter

위는 배포했던 Service monitor 중 하나다. label을 보면 app과 release라는 키가 설정되어있다. 나는 프로메테우스 오퍼레이터를 helm-chart로 배포했는데, 초기 배포할 때 serviceMonitorSelector로 선언된 release값은

Prometheus Operator's helm chart value.yaml

release: prometheus라고 선언되어있다. 해당 라벨 값의 Service monitor만 불러오기 때문에 위에서 release: prometheus-stack이라는 Service monitor는 읽어오지 못한 것이다.

Service monitor의 release label키를 일치시키게 했더니 이 문제는 해결되었다.

반응형
Comments