ArgoCD expose des métriques Prometheus riches, mais encore faut-il savoir lesquelles regarder et comment alerter dessus. Ce guide montre comment exposer les métriques d'ArgoCD, les collecter avec Prometheus, écrire les requêtes qui comptent (Applications OutOfSync, santé dégradée, échecs de synchro) et déclencher des alertes. Toutes les sorties viennent d'un cluster k3d réel (ArgoCD v3.4.5). Public : personnes qui exploitent ArgoCD et veulent une supervision fiable. Prérequis : ArgoCD installé et des notions de Prometheus.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- Identifier les métriques ArgoCD qui comptent vraiment
- Exposer les métriques des différents composants
- Scraper ArgoCD avec Prometheus via un
ServiceMonitor - Écrire les requêtes PromQL pour OutOfSync, Degraded et échecs de synchro
- Alerter avec des règles Prometheus
- Brancher le dashboard Grafana officiel
La métrique centrale : argocd_app_info
Section intitulée « La métrique centrale : argocd_app_info »Chaque composant ArgoCD expose ses métriques, mais une seule concentre l'état de vos Applications : argocd_app_info. C'est un gauge qui vaut toujours 1, dont les labels portent l'information (santé, synchro, projet, dépôt). Voici la sortie réelle du cluster :
argocd_app_info{name="guestbook",namespace="argocd",project="default", health_status="Healthy",sync_status="Synced",autosync_enabled="true", dest_namespace="guestbook",repo="https://github.com/argoproj/argocd-example-apps"} 1Les autres familles utiles, confirmées sur le cluster :
| Métrique | Type | Ce qu'elle mesure |
|---|---|---|
argocd_app_info | gauge | Une ligne par Application, état dans les labels |
argocd_app_sync_total | counter | Nombre de synchros, avec le label phase (Succeeded, Failed, Error) |
argocd_app_sync_duration_seconds_total | counter | Temps cumulé passé en synchro |
argocd_app_reconcile_count | counter | Nombre de réconciliations (charge du controller) |
argocd_app_orphaned_resources_count | gauge | Ressources orphelines détectées par Application |
Exposer les métriques
Section intitulée « Exposer les métriques »Chaque composant sert ses métriques sur un port dédié. Les deux qui comptent pour la supervision fonctionnelle sont l'application-controller (état des Applications) et l'argocd-server (activité de l'API).
| Composant | Port des métriques | Ce qu'on y trouve |
|---|---|---|
argocd-application-controller | 8082 | argocd_app_info, réconciliation, synchros |
argocd-server | 8083 | Requêtes API, sessions, activité gRPC |
argocd-repo-server | 8084 | Clonage Git, rendu des manifestes |
argocd-applicationset-controller | 8080 | Génération d'Applications |
On vérifie que le controller expose bien argocd_app_info :
kubectl port-forward pod/argocd-application-controller-0 -n argocd 8082:8082curl -s http://localhost:8082/metrics | grep '^argocd_app_info{'La sortie doit lister une ligne par Application, comme plus haut.
Scraper avec Prometheus
Section intitulée « Scraper avec Prometheus »Si vous utilisez le Prometheus Operator (kube-prometheus-stack), la façon propre de collecter ArgoCD est un ServiceMonitor par composant. Il faut d'abord que les Services exposent le port métrique (le chart ArgoCD le fait avec metrics.enabled: true).
apiVersion: monitoring.coreos.com/v1kind: ServiceMonitormetadata: name: argocd-application-controller namespace: argocd labels: release: kube-prometheus-stack # doit matcher le selector du Prometheusspec: selector: matchLabels: app.kubernetes.io/name: argocd-application-controller-metrics endpoints: - port: metrics interval: 30sLes requêtes PromQL qui comptent
Section intitulée « Les requêtes PromQL qui comptent »Voici les requêtes à mettre dans un dashboard ou une alerte. Elles s'appuient toutes sur argocd_app_info et les compteurs de synchro.
Applications OutOfSync (dérive non résolue) :
sum(argocd_app_info{sync_status="OutOfSync"})Applications non saines (Degraded, Missing, Unknown) :
sum(argocd_app_info{health_status!="Healthy"}) by (health_status)Taux d'échec des synchronisations sur la dernière heure :
sum(rate(argocd_app_sync_total{phase=~"Failed|Error"}[1h])) /sum(rate(argocd_app_sync_total[1h]))Charge de réconciliation du controller (utile pour dimensionner) :
sum(rate(argocd_app_reconcile_count[5m]))Alerter sur les états anormaux
Section intitulée « Alerter sur les états anormaux »Une supervision utile ne se contente pas d'afficher : elle prévient. Deux alertes couvrent l'essentiel : une Application qui reste OutOfSync trop longtemps, et une Application qui passe Degraded.
apiVersion: monitoring.coreos.com/v1kind: PrometheusRulemetadata: name: argocd-alerts namespace: argocdspec: groups: - name: argocd rules: - alert: ArgoCDAppOutOfSync expr: argocd_app_info{sync_status="OutOfSync"} == 1 for: 15m labels: severity: warning annotations: summary: "Application {{ $labels.name }} OutOfSync depuis 15 min" - alert: ArgoCDAppDegraded expr: argocd_app_info{health_status="Degraded"} == 1 for: 5m labels: severity: critical annotations: summary: "Application {{ $labels.name }} en état Degraded"Le for: 15m sur l'OutOfSync évite le bruit d'un déploiement en cours : on n'alerte que si la dérive persiste. Le Degraded, plus grave, se déclenche en 5 minutes.
Le dashboard Grafana officiel
Section intitulée « Le dashboard Grafana officiel »Le projet Argo publie un dashboard Grafana prêt à l'emploi (ID 14584 sur grafana.com). Il affiche l'état des Applications, les synchros, la santé du controller et du repo-server. Importez-le dans Grafana et pointez-le sur votre source Prometheus. C'est le point de départ ; adaptez-le ensuite à vos requêtes.
Dépannage
Section intitulée « Dépannage »| Symptôme | Cause probable | Solution |
|---|---|---|
argocd_app_sync_status introuvable | Métrique supprimée en 3.0 | Utiliser les labels de argocd_app_info |
ServiceMonitor sans cible | Services *-metrics non créés | Activer metrics.enabled dans le chart |
| Aucune métrique scrapée | Label du ServiceMonitor ne matche pas le Prometheus | Aligner le label release sur le selector |
| Métriques figées | Le controller ne réconcilie plus | Vérifier les logs de argocd-application-controller |
À retenir
Section intitulée « À retenir »argocd_app_infoest la métrique centrale : une ligne par Application, l'état dans les labelssync_statusethealth_status.- En 3.0,
argocd_app_sync_status,argocd_app_health_statusetargocd_app_created_timeont été supprimées : réécrire les requêtes autour deargocd_app_info. - Les métriques d'état viennent de l'application-controller (port 8082), pas de l'argocd-server.
- Le scraping propre passe par un
ServiceMonitorpar composant, avec les Services*-metricsactivés dans le chart. - Deux alertes suffisent pour commencer : OutOfSync persistant (
for: 15m) et Degraded (for: 5m). - Le dashboard Grafana 14584 est un bon point de départ.
Pour aller plus loin
Section intitulée « Pour aller plus loin »- Dépannage ArgoCD : Diagnostiquer les OutOfSync et les synchros en échec repérés par vos alertes.
- Sécuriser ArgoCD : RBAC, SSO et durcissement du serveur ArgoCD.
- Grafana : Construire les tableaux de bord qui visualisent les métriques ArgoCD.