ArgoCD 헬름차트 메트릭 노출 및 서비스 모니터 활성화
프로젝트 진행 중에 온프레미스를 개발 및 테스트 환경으로 사용하기 위해 설정들을 체계화 하여 구축하는 과정에서,
argocd 설치 시 네임스페이스를 우리가 원하는대로 지정하기 위해 직접 헬름 차트를 수정하여 설치하였다.
이전에 작성했던 글은 온프레미스로 사용할 서버를 받기 전에 EKS에서 구축했던 실습(이라고 하자)이다.
[관측가능성] 프로메테우스로 ArgoCD 메트릭 수집하기
[관측가능성] 프로메테우스로 ArgoCD 메트릭 수집하기
프로메테우스 이용하여 ArgoCD 메트릭 수집하기⚙️ 구현 환경Amazon EKS 클러스터 1. 프로메테우스 설치1) Prometheus 네임스페이스 생성kubectl create namespace monitoring2) Prometheus 설치monitoring 네임스페이
ynslee627.tistory.com
ISSUE 1️⃣ : 메트릭 노출 서비스 생성 안 됨
기존에 사용하던 방식으로 설치했을 때에는 argocd-server-metrics 서비스가 기본적으로 생성이 되어 있었는데, 헬름차트를 이용해서 설치하니 생기지 않는 문제가 발생하였다.
구글링해보니, 헬름차트를 이용하여 argocd를 설치할 때는 메트릭 수집 설정 부분을 수정해줘야 한다고 한다.
결론적으로는 직접 헬름차트에 들어가서 metric 부분을 찾아 수정하였더니 메트릭 서비스가 생성되었다.
헬름 차트에서 직접 메트릭을 수집할 서비스들을 찾다 보니, 너무 많았다.
그러나, 모든 메트릭을 수집하는 것은 매우 불필요하다고 생각했다.
ArgoCD의 주요 메트릭만을 수집하기 위해서는 어떤 컴포넌트로부터 어떤 메트릭을 얻을 수 있는지 알아보았다.
나는 아래의 두 컴포넌트의 메트릭을 수집하기로 결정하였다.
예전에 헬름차트를 직접 수정하지 않고 설치했을 때 자동으로 생성되었던 argocd-server-metrics 서비스는 API Server의 메트릭을 노출시키는 서비스였다.
컴포넌트 | 역할 및 수집 가능한 주요 메트릭 |
Application Controller | 애플리케이션 상태를 지속적으로 동기화하고 리소스를 관리하는 역할 - 예: 동기화 상태, 헬스체크, 리소스 사용량 |
API Server | 사용자 요청을 처리하고 UI와 CLI에서 사용하는 API를 제공 - 예: API 호출 통계, 인증 요청 |
🪄 metric 노출 & 서비스 모니터 설정 활성화:
values.yaml 파일에서 metric 노출 부분을 활성화해줘야 한다.
Command[Ctrl] + f 로 'metrics:'를 검색해서 찾아서 metrics.enabled 부분을 true로 수정한다.
metrics:
enabled: true
이렇게 메트릭 노출을 활성화 시키고 나서, 서비스 모니터를 생성하여 프로메테우스 오퍼레이터가 메트릭을 수집할 수 있도록 해야 한다.
기존에는 서비스 모니터 파일을 직접 작성하여 생성했지만, 헬름 차트를 이용하여 서비스 모니터 생성을 자동화하면 관리가 더 간편할 것이라고 생각하여 서비스 모니터 생성 부분도 활성화하였다.
metrics:
serviceMonitor:
# -- Enable a prometheus ServiceMonitor
enabled: true
Application Controller
controller: 안에 있는 metrics 부분을 찾아서 true로 수정한다.
controller:
metrics:
enabled: true
API Server
server.metrics.enabled 부분을 찾아서 false로 되어 있는 것을 true로 수정한다.
server:
metrics:
enabled: true
< 변경 사항 >
✅ 메트릭 노출 활성화
✅ 서비스 모니터 생성 활성화
서비스모니터 부분에서 namespace의 default값은 "monitoring"이다.
우리가 사용하는 프로메테우스 네임스페이스는 "str-monitoring"이기 때문에 namespace를 직접 지정하였다.
📌 헬름차트 변경사항 적용
helm upgrade --install <argocd release-name> <헬름차트 경로> -f <values.yaml 경로> -n <배포할 네임스페이스>
helm upgrade --install argocd Application/cicd/argocd_helm/argo-cd -f Application/cicd/argocd_helm/argo-cd/values.yaml -n str-argocd
메트릭 노출 서비스 확인
kubectl get svc -n str-argocd
application contoller, server 모두 -metrics가 붙은 이름으로 생성된 것을 확인할 수 있다.
ISSUE 2️⃣ : 서비스 모니터 생성 안 됨
메트릭 노출은 잘 설정되었는데,, 서비스 모니터가 생성되지 않았다.
🔴 원인: 네임스페이스가 없는 줄 알고 앞에 썼는데, 뒤에 ""로 설정되어 있었다.
뒤에서 설정된 값이 앞의 값을 덮어쓰기 때문에, 내가 설정한 네임스페이스에 서비스모니터가 생성되지 않았던 것..!
뒤에 이게 있었다..
# -- Prometheus ServiceMonitor namespace
namespace: "" # monitoring
🪄 해결: 위에서 중복된 설정을 지운다.
serviceMonitor:
# -- Enable a prometheus ServiceMonitor
enabled: true
# -- Prometheus ServiceMonitor interval
interval: 30s
# -- Prometheus ServiceMonitor scrapeTimeout. If empty, Prometheus uses the global scrape timeout unless it is less than the target's scrape interval value in which the latter is used.
scrapeTimeout: ""
# -- When true, honorLabels preserves the metric’s labels when they collide with the target’s labels.
honorLabels: false
# -- Prometheus [RelabelConfigs] to apply to samples before scraping
relabelings: []
# -- Prometheus [MetricRelabelConfigs] to apply to samples before ingestion
metricRelabelings: []
# -- Prometheus ServiceMonitor selector
selector: {}
# -- Prometheus ServiceMonitor scheme
scheme: "http" # 통신 프로토콜
# -- Prometheus ServiceMonitor tlsConfig
tlsConfig: {}
# -- Prometheus ServiceMonitor namespace
namespace: "str-monitoring" # Prometheus가 설치된 네임스페이스에 맞게 설정
# -- Prometheus ServiceMonitor labels
additionalLabels:
release: prometheus # Prometheus 인스턴스가 감지할 수 있도록 라벨 추가
# -- Prometheus ServiceMonitor annotations
annotations: {}
서비스모니터가 생성이 되었다!!!
그런데 이름이 argocd 서비스와 너무 헷갈릴 것 같아서 서비스 모니터 이름을 수정하였다.
수정 방법은 다음과 같다.
헬름차트 템플릿의 servicemonitor.yaml 파일에서 name 부분에 '-service-monitor'을 덧붙였다.
이렇게 하면 기본적으로 설정된 이름에 서비스모니터라는 이름이 붙게 된다.
다음과 같이 메트릭을 노출시키는 서비스와 서비스 모니터가 생성된 것을 확인할 수 있다.
- str-argocd: argocd가 설치된 네임스페이스
- str-monitoring: 프로메테우스가 설치된 네임스페이스
프로메테우스 웹 UI에서 타겟이 잘 돌아가는 것도 확인할 수 있다.
그라파나 대시보드에서 확인
그라파나 대시보드에서도 ArgoCD 관련 메트릭을 잘 가져와서 시각화하는 것을 확인할 수 있다.