Flux expose des métriques Prometheus et un système de notifications natif pour chaque événement de réconciliation (succès, échec, drift détecté). Ce guide explique comment configurer les alertes Slack ou Teams, lire les métriques Prometheus, et utiliser les dashboards Grafana officiels pour surveiller l’état de tous vos déploiements GitOps en temps réel.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- Lire les événements de réconciliation avec
flux eventsetkubectl - Configurer un
Provider(canal de notification) — Slack, Teams, webhook - Créer des
Alertpour les événements qui vous intéressent - Comprendre les métriques Prometheus exposées par Flux
- Importer les dashboards Grafana officiels Flux
- Configurer des Receivers pour les webhooks entrants GitHub/GitLab
Prérequis
Section intitulée « Prérequis »- Flux bootstrappé avec
notification-controller(inclus par défaut) - Pour la partie métriques : Prometheus et Grafana déployés dans le cluster (via kube-prometheus-stack par exemple)
- Un workspace Slack ou un endpoint Teams pour tester les alertes
Lire les événements Flux
Section intitulée « Lire les événements Flux »Avant de configurer des alertes, sachez lire les événements directement :
# Tous les événements récentsflux events
# Événements d'une Kustomization spécifiqueflux events --for kustomization/apps
# Événements en temps réel (watch)flux events --watch
# Via kubectl (plus verbeux)kubectl events -n flux-system
# Logs d'un contrôleur spécifiqueflux logs --kind=kustomization --name=apps --tail=20Événements types à surveiller :
| Événement | Type | Signification |
|---|---|---|
ReconciliationSucceeded | Normal | Réconciliation réussie |
ReconciliationFailed | Warning | Erreur lors de la réconciliation |
DependencyNotReady | Warning | Dépend d’un objet qui n’est pas prêt |
ArtifactUpToDate | Normal | La source n’a pas changé |
NewArtifact | Normal | Nouvelle révision détectée dans la source |
PrunedObject | Normal | Ressource supprimée de Git, pruned du cluster |
Configurer les alertes Slack
Section intitulée « Configurer les alertes Slack »Étape 1 — Créer le Secret Slack
Section intitulée « Étape 1 — Créer le Secret Slack »Créez un webhook Slack (dans les paramètres de votre workspace Slack > Applications > Incoming Webhooks) et stockez l’URL dans un Secret Kubernetes :
kubectl create secret generic slack-webhook \ --from-literal=address=https://hooks.slack.com/services/T000/B000/XXXXXXXX \ --namespace=flux-systemNe mettez jamais l’URL du webhook directement dans le manifeste YAML — elle serait versionnée dans Git en clair.
Étape 2 — Créer le Provider
Section intitulée « Étape 2 — Créer le Provider »apiVersion: notification.toolkit.fluxcd.io/v1beta3kind: Providermetadata: name: slack namespace: flux-systemspec: type: slack channel: "#flux-alerts" # Canal Slack où envoyer les messages secretRef: name: slack-webhookÉtape 3 — Créer les règles d’alerte
Section intitulée « Étape 3 — Créer les règles d’alerte »apiVersion: notification.toolkit.fluxcd.io/v1beta3kind: Alertmetadata: name: on-call-alerts namespace: flux-systemspec: summary: "Alertes Flux — cluster my-cluster" providerRef: name: slack eventSeverity: error # "info" pour tout, "error" pour les échecs seulement eventSources: - kind: GitRepository name: "*" # Tous les GitRepository dans flux-system - kind: Kustomization name: "*" # Toutes les Kustomizations - kind: HelmRelease name: "*" # Toutes les HelmReleaseeventSeverity: error envoie les alertes uniquement en cas d’échec.
eventSeverity: info envoie toutes les réconciliations (verbeux mais utile
pour l’audit).
Configurer les alertes Teams
Section intitulée « Configurer les alertes Teams »Créez un webhook dans Teams (canal > Connecteurs > Incoming Webhook) :
kubectl create secret generic teams-webhook \ --from-literal=address=https://my-org.webhook.office.com/webhookb2/.../IncomingWebhook/... \ --namespace=flux-systemapiVersion: notification.toolkit.fluxcd.io/v1beta3kind: Providermetadata: name: teams namespace: flux-systemspec: type: msteams secretRef: name: teams-webhookkubectl create secret generic pagerduty-token \ --from-literal=token=<integration-key> \ --namespace=flux-systemapiVersion: notification.toolkit.fluxcd.io/v1beta3kind: Providermetadata: name: pagerduty namespace: flux-systemspec: type: pagerduty address: https://events.pagerduty.com secretRef: name: pagerduty-tokenPour n’importe quel endpoint HTTP :
apiVersion: notification.toolkit.fluxcd.io/v1beta3kind: Providermetadata: name: generic-webhook namespace: flux-systemspec: type: generic address: https://my-webhook-endpoint.example.com/fluxMétriques Prometheus
Section intitulée « Métriques Prometheus »Flux expose des métriques Prometheus sur le port 8080 de chaque contrôleur.
Si vous avez kube-prometheus-stack installé, vous pouvez les collecter en
créant un ServiceMonitor :
apiVersion: monitoring.coreos.com/v1kind: ServiceMonitormetadata: name: flux-system namespace: monitoringspec: namespaceSelector: matchNames: - flux-system selector: matchExpressions: - key: app operator: In values: - helm-controller - kustomize-controller - notification-controller - source-controller - image-automation-controller - image-reflector-controller endpoints: - port: http-prom path: /metrics interval: 30sMétriques clés à surveiller
Section intitulée « Métriques clés à surveiller »| Métrique | Type | Description |
|---|---|---|
gotk_reconcile_duration_seconds | Histogram | Durée des réconciliations par contrôleur/kind |
gotk_resource_info | Gauge | Informations sur chaque ressource Flux (suspended, ready) |
controller_runtime_reconcile_total | Counter | Nombre total de réconciliations par résultat (success/error) |
controller_runtime_reconcile_errors_total | Counter | Nombre d’erreurs de réconciliation |
Requête PromQL utile — taux d’erreurs de réconciliation :
rate(controller_runtime_reconcile_errors_total[5m])Requête PromQL — ressources Flux non prêtes :
gotk_resource_info{ready="False"}Dashboards Grafana officiels
Section intitulée « Dashboards Grafana officiels »L’équipe Flux maintient des dashboards Grafana officiels dans le dépôt
fluxcd/flux2-monitoring-example. Vous pouvez les importer depuis Grafana.com :
| Dashboard | ID Grafana | Description |
|---|---|---|
| Flux Cluster Stats | 16714 | Vue globale de l’état du cluster |
| Flux Control Plane | 16715 | Métriques des contrôleurs Flux |
Importation via Grafana :
- Ouvrez Grafana > Dashboards > Import
- Entrez l’ID
16714ou16715 - Sélectionnez votre datasource Prometheus
Ou via un ConfigMap Kubernetes si vous utilisez le sidecar de provisioning Grafana :
apiVersion: v1kind: ConfigMapmetadata: name: flux-dashboards namespace: monitoring labels: grafana_dashboard: "1"data: flux-cluster.json: | <contenu du dashboard JSON téléchargé depuis grafana.com>Configurer un Receiver pour les webhooks entrants
Section intitulée « Configurer un Receiver pour les webhooks entrants »Un Receiver permet à GitHub ou GitLab de notifier Flux immédiatement lors
d’un push, plutôt que d’attendre l’intervalle de polling :
- Créer le token secret pour valider les webhooks
TOKEN=$(head -c 12 /dev/urandom | shasum | cut -d ' ' -f1)kubectl create secret generic webhook-token \ --from-literal=token=${TOKEN} \ --namespace=flux-system- Créer le Receiver
apiVersion: notification.toolkit.fluxcd.io/v1kind: Receivermetadata: name: github-receiver namespace: flux-systemspec: type: github events: - "ping" - "push" secretRef: name: webhook-token resources: - apiVersion: source.toolkit.fluxcd.io/v1 kind: GitRepository name: flux-system- Récupérer l’URL du Receiver
kubectl get receiver github-receiver -n flux-system# NAME READY STATUS# L'URL complète est dans le statuskubectl get receiver github-receiver -n flux-system \ -o jsonpath='{.status.webhookPath}'- Configurer le webhook dans GitHub
Dans votre dépôt GitHub > Settings > Webhooks > Add webhook :
- URL :
https://flux-webhook.example.com<chemin-du-status> - Content type :
application/json - Secret : le
${TOKEN}créé à l’étape 1 - Events :
Push events
Alertes par équipe (multi-tenant)
Section intitulée « Alertes par équipe (multi-tenant) »Dans un contexte multi-tenant, vous pouvez créer des alertes spécifiques par namespace pour que chaque équipe reçoive uniquement ses propres alertes :
apiVersion: notification.toolkit.fluxcd.io/v1beta3kind: Alertmetadata: name: frontend-alerts namespace: frontendspec: summary: "Alertes GitOps — équipe frontend" providerRef: name: slack-frontend # Provider dans le namespace frontend eventSeverity: error eventSources: - kind: Kustomization name: "*" namespace: frontend - kind: HelmRelease name: "*" namespace: frontendChaque équipe crée son propre Provider avec son webhook Slack dédié.
Checklist observabilité Flux
Section intitulée « Checklist observabilité Flux »-
flux eventsretourne des événements récents sans erreurs persistantes -
flux get allafficheREADY: Truepour tous les objets - Au moins un
Alertconfiguré pour les erreurs de réconciliation - Les métriques Flux sont collectées par Prometheus
- Un dashboard Grafana affiche l’état des réconciliations
- Un
Receiverwebhook accélère la détection des nouveaux commits - Les alertes critical (HelmRelease échec, drift persistant) vont sur un canal avec astreinte
À retenir
Section intitulée « À retenir »flux eventsetflux logssont les premières commandes à utiliser pour diagnostiquer un problème.- Le
notification-controllergère les alertes sortantes (Alert+Provider) et les webhooks entrants (Receiver). - Ne jamais mettre une URL de webhook en clair dans le YAML — toujours via un
SecretKubernetes. gotk_resource_info{ready="False"}est la requête Prometheus à surveiller en priorité.- Les
Receiverwebhooks réduisent la latence de déploiement de 1 minute (polling) à quelques secondes.