ArgoCD¶
Argo CD 서비스 상태, 애플리케이션 상태, 로그 및 트레이스 정보를 수집
구성¶
사전 조건¶
- K8S 환경 설치
- ArgoCD 설치
- DataKit 설치
Argo CD 모니터링¶
Argo CD는 Prometheus 프로토콜로 지표를 노출하며, 이 지표를 통해 Argo CD 서비스 상태와 애플리케이션 상태를 모니터링할 수 있습니다. Argo CD는 주로 세 가지 유형의 지표를 노출합니다.
- Application Controller Metrics: 애플리케이션 수, Argo CD 상태 등 Argo CD 애플리케이션 관련 지표입니다.
- API Server Metrics: 요청 수, 응답 코드 등 Argo CD API 요청 지표입니다.
- Repo Server Metrics: Git 요청 수, Git 요청 응답 시간 등 Repo Server 관련 지표입니다.
수집기 설정¶
Argo CD 지표 수집¶
datakit.yaml파일의ConfigMap아래에kubernetesprometheus.conf를 추가합니다.
kubernetesprometheus.conf: |-
[inputs.kubernetesprometheus]
[[inputs.kubernetesprometheus.instances]]
role = "service"
namespaces = ["argocd"]
selector = "app.kubernetes.io/name=argocd-server-metrics"
scrape = "true"
scheme = "http"
port = "__kubernetes_service_port_metrics_targetport"
path = "/metrics"
params = ""
[inputs.kubernetesprometheus.instances.custom]
measurement = "argocd-server"
job_as_measurement = false
[inputs.kubernetesprometheus.instances.custom.tags]
svc_name = "__kubernetes_service_name"
pod_name = "__kubernetes_service_target_name"
pod_namespace = "__kubernetes_service_target_namespace"
[[inputs.kubernetesprometheus.instances]]
role = "service"
namespaces = ["argocd"]
selector = "aapp.kubernetes.io/name=argocd-metrics"
scrape = "true"
scheme = "http"
port = "__kubernetes_service_port_metrics_targetport"
path = "/metrics"
params = ""
[inputs.kubernetesprometheus.instances.custom]
measurement = "argocd"
job_as_measurement = false
[inputs.kubernetesprometheus.instances.custom.tags]
svc_name = "__kubernetes_service_name"
pod_name = "__kubernetes_service_target_name"
pod_namespace = "__kubernetes_service_target_namespace"
[[inputs.kubernetesprometheus.instances]]
role = "service"
namespaces = ["argocd"]
selector = "app.kubernetes.io/name=argocd-notifications-controller-metrics"
scrape = "true"
scheme = "http"
port = "__kubernetes_service_port_metrics_targetport"
path = "/metrics"
params = ""
[inputs.kubernetesprometheus.instances.custom]
measurement = "argocd-application-controller"
job_as_measurement = false
[inputs.kubernetesprometheus.instances.custom.tags]
svc_name = "__kubernetes_service_name"
pod_name = "__kubernetes_service_target_name"
pod_namespace = "__kubernetes_service_target_namespace"
[inputs.kubernetesprometheus.global_tags]
instance = "__kubernetes_mate_instance"
host = "__kubernetes_mate_host"
kubernetesprometheus.conf를 DataKit의/usr/local/datakit/conf.d/kubernetesprometheus/kubernetesprometheus.conf아래에 마운트합니다.
- mountPath: /usr/local/datakit/conf.d/kubernetesprometheus/kubernetesprometheus.conf
name: datakit-conf
subPath: kubernetesprometheus.conf
readOnly: true
- 다음 명령을 실행하여 DataKit을 재시작합니다.
Argo CD 트레이스 수집¶
datakit.yaml파일을 수정하여 OpenTelemetry 트레이스 수집기를 켭니다.
apiVersion: v1
kind: ConfigMap
metadata:
name: datakit-conf
namespace: datakit
data:
#### opentelemetry
opentelemetry.conf: |-
[[inputs.opentelemetry]]
[inputs.opentelemetry.http]
enable = true
http_status_ok = 200
[inputs.opentelemetry.grpc]
trace_enable = true
metric_enable = true
addr = "0.0.0.0:4317"
apiVersion: apps/v1
kind: DaemonSet
metadata:
labels:
app: daemonset-datakit
name: datakit
namespace: datakit
spec:
...
template:
...
spec:
...
containers:
...
volumeMounts:
...
- mountPath: /usr/local/datakit/conf.d/opentelemetry/opentelemetry.conf
name: datakit-conf
subPath: opentelemetry.conf
...
- DataKit 서비스 OpenTelemetry Svc의 포트를 엽니다.
apiVersion: v1
kind: Service
metadata:
name: datakit-service
namespace: datakit
spec:
selector:
app: daemonset-datakit
ports:
- name: datakit
protocol: TCP
port: 9529
targetPort: 9529
- name: opentelemetry
protocol: TCP
port: 4317
targetPort: 4317
- Argo CD의
ConfigMap인argocd-cmd-params-cm.yaml파일을 수정해otlp.address주소를 추가하면 Argo CD의 트레이스를 수집할 수 있습니다.
apiVersion: v1
kind: ConfigMap
metadata:
labels:
app.kubernetes.io/name: argocd-cmd-params-cm
app.kubernetes.io/part-of: argocd
name: argocd-cmd-params-cm
namespace: argocd
data:
otlp.address: datakit-service.datakit:4317
- 다음 명령을 실행하여 Argo CD 서비스를 재시작합니다.
Argo CD 로그 수집¶
DataKit은 기본적으로 컨테이너의 표준 출력 로그를 수집하므로 별도 수집 설정이 필요하지 않습니다.
지표¶
argocd-server¶
| Metric | Description |
|---|---|
process_start_time_seconds |
API Server에서 유닉스 epoch 이후 프로세스 시작 시각(초) |
go_goroutines |
현재 API Server에 존재하는 goroutines 수 |
grpc_server_handled_total |
성공 여부와 관계없이 서버에서 완료된 RPC의 총 수 |
grpc_server_started_total |
서버에서 시작된 RPC의 총 수 |
go_memstats_alloc_bytes |
API Server에서 할당되어 현재도 사용 중인 힙 바이트 수 |
argocd-application-controller¶
| Metric | Description |
|---|---|
argocd_app_info |
애플리케이션 정보입니다. Argo CD에서 애플리케이션 상태를 반영하는 syncstatus 및 healthstatus 같은 태그를 포함합니다. metric 값은 고정입니다 |
go_memstats_heap_alloc_bytes |
Application Controller에서 할당되어 현재도 사용 중인 힙 바이트 수 |
process_cpu_seconds_total |
Application Controller에서 사용한 사용자 및 시스템 CPU 시간의 총합(초) |
argocd_app_reconcile_count |
애플리케이션 reconcile 횟수 |
argocd_app_reconcile_bucket |
지속 시간 구간별 애플리케이션 reconciliation 수 |
workqueue_depth |
Workqueue 깊이 |
argocd_kubectl_exec_total |
Kubectl 실행 횟수 |
argocd_app_k8s_request_total |
실행된 Kubernetes 요청 수 |
argocd_kubectl_exec_pending |
대기 중인 Kubectl 실행 수 |
argocd-repo-server¶
| Metric | Description |
|---|---|
argocd_git_request_total |
Git Ls-Remote 요청 수 |
argocd_git_request_duration_seconds_bucket |
Git Ls-Remote 요청 성능 |
더 많은 지표는 ArgoCD 공식 문서를 참고하세요