Aller au contenu
CI/CD & Automatisation medium

Superviser ArgoCD avec Prometheus et Grafana

8 min de lecture

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.

  • 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

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"} 1

Les autres familles utiles, confirmées sur le cluster :

MétriqueTypeCe qu'elle mesure
argocd_app_infogaugeUne ligne par Application, état dans les labels
argocd_app_sync_totalcounterNombre de synchros, avec le label phase (Succeeded, Failed, Error)
argocd_app_sync_duration_seconds_totalcounterTemps cumulé passé en synchro
argocd_app_reconcile_countcounterNombre de réconciliations (charge du controller)
argocd_app_orphaned_resources_countgaugeRessources orphelines détectées par Application

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).

ComposantPort des métriquesCe qu'on y trouve
argocd-application-controller8082argocd_app_info, réconciliation, synchros
argocd-server8083Requêtes API, sessions, activité gRPC
argocd-repo-server8084Clonage Git, rendu des manifestes
argocd-applicationset-controller8080Génération d'Applications

On vérifie que le controller expose bien argocd_app_info :

Fenêtre de terminal
kubectl port-forward pod/argocd-application-controller-0 -n argocd 8082:8082
curl -s http://localhost:8082/metrics | grep '^argocd_app_info{'

La sortie doit lister une ligne par Application, comme plus haut.

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/v1
kind: ServiceMonitor
metadata:
name: argocd-application-controller
namespace: argocd
labels:
release: kube-prometheus-stack # doit matcher le selector du Prometheus
spec:
selector:
matchLabels:
app.kubernetes.io/name: argocd-application-controller-metrics
endpoints:
- port: metrics
interval: 30s

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]))

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/v1
kind: PrometheusRule
metadata:
name: argocd-alerts
namespace: argocd
spec:
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 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.

SymptômeCause probableSolution
argocd_app_sync_status introuvableMétrique supprimée en 3.0Utiliser les labels de argocd_app_info
ServiceMonitor sans cibleServices *-metrics non créésActiver metrics.enabled dans le chart
Aucune métrique scrapéeLabel du ServiceMonitor ne matche pas le PrometheusAligner le label release sur le selector
Métriques figéesLe controller ne réconcilie plusVérifier les logs de argocd-application-controller
  • argocd_app_info est la métrique centrale : une ligne par Application, l'état dans les labels sync_status et health_status.
  • En 3.0, argocd_app_sync_status, argocd_app_health_status et argocd_app_created_time ont été supprimées : réécrire les requêtes autour de argocd_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 ServiceMonitor par composant, avec les Services *-metrics activé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.

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracking. Un soutien, même symbolique, m'aide à couvrir l'hébergement et à garder ces ressources gratuites. Merci pour votre appui.

Le formulaire ne s'affiche pas ? Ouvrir Ko-fi dans un onglet.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn