写点什么

Argo CD 可观测性最佳实践

作者:观测云
  • 2024-01-26
    上海
  • 本文字数:2475 字

    阅读完需:约 8 分钟

Argo CD 可观测性最佳实践

什么是 Argo CD?

Argo CD 是一个开源的 CD(Continuous Delivery)工具,能够帮助您在 Kubernetes 环境中进行持续交付。Argo CD 的主要功能是将配置文件同步到 Kubernetes 集群中并确保应用程序正确运行。Argo CD 可以自动检测应用程序的变化并自动同步应用程序配置文件。此外,它还支持各种 CI / CD 工具(如 Jenkins,GitLab 等)和 Kubernetes 平台的其它工具集成,从而实现全生命周期的自动化。Argo CD 还提供了一个可视化的控制台,并且能够通过 API 和 CLI 进行操作、管理。

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:Repo Server 相关指标,例如 Git 请求数、Git 响应时间等。


Argo CD 指标详情可参考官方文档: https://docs.guance.com/integrations/argocd/#metric


Argo CD 日志均通过 Kubernetes 控制台输出,日志基本格式如下:


time="2023-06-15T15:00:50Z" level=info msg="Generating self-signed TLS certificate for this session"
复制代码


Argo CD 2.4 #7539 加入了 OpenTelemetry 协议的支持,可通过暴露的 otlp 地址来获取链路数据。

Argo CD 可观测性接入方案

准备工作

登录观测云控制台,选择「集成」-「DataKit」-「Kubernetes」或「Kubernetes(Helm)」,按照指引安装 DataKit 采集器,并打开 Opentelemetry 采集器:


修改 ConfigMap:


apiVersion: v1kind: ConfigMapmetadata:  name: datakit-conf  namespace: datakitdata:  #### 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"
复制代码


挂载配置至容器中 ,添加 env 配置,ENV_INPUT_CONTAINER_ENABLE_AUTO_DISCOVERY_OF_PROMETHEUS_SERVICE_MONITORS,打开 Service Monitor 自动发现,用于收集 Argo CD 指标。


apiVersion: apps/v1kind: DaemonSetmetadata:  labels:    app: daemonset-datakit  name: datakit  namespace: datakitspec:  ...  template:    ...    spec:      ...      containers:      - env:        ...        - name: ENV_INPUT_CONTAINER_ENABLE_AUTO_DISCOVERY_OF_PROMETHEUS_SERVICE_MONITORS          value: "true"        ...        volumeMounts:        ...        - mountPath: /usr/local/datakit/conf.d/opentelemetry/opentelemetry.conf          name: datakit-conf          subPath: opentelemetry.conf        ...
复制代码


修改 datakit.yaml,Service 打开 4317 端口。


apiVersion: v1kind: Servicemetadata:  name: datakit-service  namespace: datakitspec:  selector:    app: daemonset-datakit  ports:    - name: datakit      protocol: TCP      port: 9529      targetPort: 9529    - name: opentelemetry      protocol: TCP      port: 4317      targetPort: 4317
复制代码

指标

利用 Prometheus-Operator CRD 方式采集 Argo CD 指标,配置步骤如下:


1)安装 Prometheus-Operator


git clone https://github.com/coreos/prometheus-operator.gitcd prometheus-operatorkubectl create -f bundle.yamlkubectl get pod -n default
复制代码


2)创建 ServiceMonitor


  • argocd-metrics.yaml


apiVersion: monitoring.coreos.com/v1kind: ServiceMonitormetadata:  name: argocd-metrics  labels:    release: prometheus-operator  namespace: argocdspec:  selector:    matchLabels:      app.kubernetes.io/name: argocd-metrics  endpoints:  - port: metrics
复制代码


  • argocd-server-metrics.yaml


apiVersion: monitoring.coreos.com/v1kind: ServiceMonitormetadata:  name: argocd-server-metrics  labels:    release: prometheus-operator  namespace: argocdspec:  selector:    matchLabels:      app.kubernetes.io/name: argocd-server-metrics  endpoints:  - port: metrics
复制代码


  • argocd-repo-server.yaml


apiVersion: monitoring.coreos.com/v1kind: ServiceMonitormetadata:  name: argocd-repo-server-metrics  labels:    release: prometheus-operator  namespace: argocdspec:  selector:    matchLabels:      app.kubernetes.io/name: argocd-repo-server  endpoints:  - port: metrics
复制代码


  • argocd-applicationset-controller.yaml


apiVersion: monitoring.coreos.com/v1kind: ServiceMonitormetadata:  name: argocd-applicationset-controller-metrics  labels:    release: prometheus-operator  namespace: argocdspec:  selector:    matchLabels:      app.kubernetes.io/name: argocd-applicationset-controller  endpoints:  - port: metrics
复制代码


kubectl apply -f argocd-metrics.yamlkubectl apply -f argocd-server-metrics.yaml kubectl apply -f argocd-repo-server.yamlkubectl apply -f argocd-applicationset-controller.yamlkubectl get ServiceMonitor -n argocd
复制代码

日志

安装 DataKit 采集器之后,默认会采集 Argo CD Pod 输出的日志,无须其他配置。

链路

修改 Argo CD 的 ConfigMap argocd-cmd-params-cm,加入 otlp.address 地址,即可获取 Argo CD 的链路。


  • argocd-cmd-params-cm.yaml


apiVersion: v1kind: ConfigMapmetadata:  labels:    app.kubernetes.io/name: argocd-cmd-params-cm    app.kubernetes.io/part-of: argocd  name: argocd-cmd-params-cm  namespace: argocddata:  otlp.address: datakit-service.datakit:4317
复制代码


kubectl apply -f argocd-cmd-params-cm.yaml
复制代码

Argo CD 可观测效果展示






用户头像

观测云

关注

还未添加个人签名 2021-02-08 加入

云时代的系统可观测平台

评论

发布
暂无评论
Argo CD 可观测性最佳实践_ArgoCD_观测云_InfoQ写作社区