Kubernetes 환경에서 pod, node 등에 대한 메트릭 말고도, 특정 어플리케이션에 대한 메트릭이 있습니다.
ArgoCD를 예를 들면, 언제 마지막으로 싱크했는지, 현재 등록된 application은 몇개인지, 상태는 어떤지 등 ArgoCD에서 노출시키는 메트릭들이 존재합니다.
이런 식으로 각 어플리케이션에서 개별적으로 노출시키는 메트릭은 ServiceMonitor를 사용하여 prometheus로 수집할 수 있습니다.
이 ServiceMonitor라는 것은 prometheus에서 만든 Custom Resource Definition으로, 이 정의를 기반으로 새로운 ServiceMonitor를 생성하면 prometheus-operator가 이 정보를 prometheus.yml에 추가하고, 이를 prometheus가 확인해서 해당 서비스로부터 메트릭을 수집할 수 있는 것입니다.
잘 만들어진 오픈소스들은 각각 표출하는 메트릭이 존재하고, prometheus와 연동하기 위해서 각 오픈소스의 Helm chart에서 Service monitor를 enable, disable 하도록 해줍니다.
이 문서는 ArgoCD를 예시로 하지만, 이러한 방법은 다른 오픈소스에서도 Servicemonitor를 지원한다면 동일하게 적용될 수 있습니다.
Install argocd
helm repo add
helm repo add argo https://argoproj.github.io/argo-helm
helm repo update
helm fetch
helm fetch argo/argo-cd
tar xzf argo-cd*
Modify values.yaml
values.yaml에 나열된 항목들 (argocd를 구성하는 컴포넌트들)의 metric을 enabled: true
그 metric 아래의 serviceMonitor에
- enabled: true
- additionalLabels: 아래에 release: prom-stack
💡 namespace는 어디에 위치하든 잘 인식되는 것 확인했으므로, 관리 목적으로 각 서비스가 위치한 곳이 놓거나 아니면 monitoring namespace에 다 모아두는 것도 가능
📌 kube-prometheus-stack 설치시, values에서 prometheus.prometheusSpec.serviceMonitorSelectorNilUsesHelmValues: false 로 지정해두면, servicemonitor 설정시 label에 release를 적지 않아도 됩니다.
prometheus 구성할 때, release 한 이름을 additional label에 넣어줘야 prometheus에서 해당 service monitor를 인식
prometheus의 release 이름이 생각나지 않는다면, 이미 존재하는 service monitor에서 확인 필요
kukbectl get servicemonitor <service monitor name> -n <namespace> -o yaml

helm install
helm install argocd <argocd chart> -n argocd --create-namespace
Result

Service Monitor

Prometheus - Targets

ISSUE : Redis exporter - Image pull error
갑자기 argocd의 redis metric을 노출시키는 기능의 pod인 redis-exporter가 image pull이 안되는 문제가 발생
argocd values.yaml - redis - metric - image - tag를 변경해보면서 테스트해봤으나 진전이 없었음
repository 자체가 잘못되었다고 가정하고,
kubectl run test --image=bitnami/redis-exporter:latest 명령어를 실행해보니 제대로 작동
그래서 아래와 같이 수정했고, prometheus의 target으로 잘 잡히는 것 확인

( 아래의 github issue는 똑같은 장애에 대한 issue이고, 여기에 해결 방법을 올려놓은 상태 )
https://github.com/argoproj/argo-helm/issues/1234
ISSUE : dex server
dex server의 metric을 활성화시켜서 service monitor도 생기고, dev server의 service에 메트릭 포트 (5558)도 열렸는데, prometheus에서 target 연결 실패
해결해보려고 했는데 실패
dex server가 인증 관련 서버로 알고 있어서, 일단은 metric을 enable: false 로 변경했음
추후 dex server를 활용하게 된다면, 이 이슈 원인파악 및 해결 필요
Result
Argocd

Argo rollout

'Monitoring' 카테고리의 다른 글
Grafana transform (0) | 2023.09.04 |
---|---|
Metric Join (0) | 2023.09.04 |
LGTM 특장점 (0) | 2023.09.04 |
Prometheus alertmanager (0) | 2023.08.31 |
Prometheus를 push 방식으로 쓰기 (0) | 2023.08.31 |