콘텐츠로 이동

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을 재시작합니다.
kubectl delete -f datakit.yaml
kubectl apply -f datakit.yaml

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의 ConfigMapargocd-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 서비스를 재시작합니다.
kubectl apply -f argocd-cmd-params-cm.yaml 

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에서 애플리케이션 상태를 반영하는 syncstatushealthstatus 같은 태그를 포함합니다. 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 공식 문서를 참고하세요

문서 평가

이 페이지가 도움이 되었나요?