1. INTERVENANTS

DJEBBOURI Younes
Architecte Azure et DevOps đŸš€đŸ’»âœš

2. PROBLÉMATIQUE

« Avoir des dashboards, c’est bien. Garder le contrĂŽle, c’est mieux. »

Tu peux avoir Grafana, des logs, des dashboards dans tous les sens

Mais si tu ne sais pas oĂč chercher, quoi corrĂ©ler, ou comment garder ton cluster alignĂ© avec Git, tu restes dans le flou.

Et c’est souvent ce qui se passe.

Trop d’outils, trop de signaux, pas de stratĂ©gie claire.
Tu passes plus de temps à naviguer entre les consoles qu’à comprendre ce qu’il se passe vraiment.

C’est là qu’il faut faire un choix :

  • Tu veux du managĂ© et bien intĂ©grĂ© ? L’écosystĂšme Azure est prĂȘt
  • Tu veux tout maĂźtriser ? La stack open source (Prometheus, Grafana, Loki) est lĂ 
  • Et entre les deux, GitOps devient ta vĂ©ritĂ© unique pour garder le cap

Dans cette seconde partie, on parle supervision qui tient la route
pas de “monitoring pour faire joli” mais pour agir au bon moment, sur les bons signaux


4. GITOPS

L’époque oĂč on lançait un kubectl apply -f depuis son poste est (presque) rĂ©volue

Aujourd’hui, on parle de GitOps : un modĂšle oĂč le cluster va chercher lui-mĂȘme ce qu’il doit exĂ©cuter, directement dans un dĂ©pĂŽt Git versionnĂ©
Et ce simple renversement change tout :

✔ Ce n’est plus un humain qui pousse. C’est le cluster qui tire.

Flux, c’est la solution adoptĂ©e et maintenue par Microsoft dans AKS, disponible directement en extension AKS ou Arc-enabled.

Il s’appuie sur une philosophie trùs claire :
🎯 « The Git repository is the source of truth. »

  • Chaque cluster lit une ou plusieurs branches Git (par exemple main ou prod)
  • DĂšs qu’un commit est validĂ© (ex: une PR fusionnĂ©e), le cluster dĂ©clenche un dĂ©ploiement
  • Tout Ă©cart avec l’état du dĂ©pĂŽt est corrigĂ© automatiquement

Et surtout :

  • Si quelqu’un modifie un objet Ă  la main (via portail, CLI
), Flux le remet en l’état attendu, car seule la vĂ©ritĂ© Git fait foi

Et pour gérer plusieurs environnements ?


Tu vas vite avoir besoin d’un outil pour adapter dynamiquement les manifests en fonction de l’environnement (dev, recette, prod
).
C’est là que Kustomize entre en jeu.

Kustomize te permet de :

  • RĂ©utiliser une base commune de manifests (base.yaml)
  • Et d’appliquer des overlays selon l’environnement (par exemple un replicaCount=1 en dev, et =3 en prod)
  • Sans avoir besoin de réécrire ou de cloner tous tes fichiers

Kustomize est natif dans kubectl et compatible avec Flux et ArgoCD
Il fonctionne sans Helm, ce qui le rend simple Ă  auditer et facile Ă  maintenir.
Tu peux aussi le combiner avec des patchesStrategicMerge pour des différences plus fines

  • IntĂ©gration native avec Azure (extension officielle)
  • Maintenance assurĂ©e par Microsoft
  • Parfait pour dĂ©ployer du Kubernetes pur
  • IdĂ©al pour gĂ©rer le drift et verrouiller les environnements
⚠ Mais : Flux ne voit que Kubernetes. Il ne sait pas orchestrer d’autres briques (Azure SQL, Key Vault, Terraform, etc..)

ArgoCD, c’est un autre monde.
Pas seulement plus “user friendly” => plus ouvert, plus large

Contrairement Ă  Flux :

  • Ce n’est pas juste une extension Ă  activer
  • C’est une application Ă  dĂ©ployer (souvent via Helm chart)
  • Et c’est une vraie plateforme de delivery GitOps

Ce que propose ArgoCD :

  • UI intĂ©grĂ©e (portail de pilotage GitOps)
  • Visualisation des ressources, des sync, des drifts
  • SystĂšme de hooks, de priorisation, de synchronisation manuelle ou automatique
  • Plugins pour Ă©tendre le comportement natif

💬 Pour certains, l’existence d’une UI est un argument fort.
Pour d’autres, c’est dĂ©jĂ  un signal de complexitĂ©

Kustomize est aussi pris en charge nativement par ArgoCD


Il devient vite un incontournable quand tu dois :

  • GĂ©rer plusieurs environnements avec des diffĂ©rences subtiles
  • Appliquer des labels, annotations ou ressources spĂ©cifiques Ă  chaque contexte
  • Garder une hiĂ©rarchie claire entre base et environnements

💬 Si tu veux une stack simple, sans trop d’abstraction, Kustomize est une excellente alternative à Helm

👉 ArgoCD est trĂšs adaptĂ© quand :

  • Tu veux une interface de supervision GitOps
  • Tu gĂšres plus que du K8s ou des dĂ©pendances multi-environnement
  • Tu as des Ă©quipes dĂ©diĂ©es Ă  l’observabilitĂ© et au delivery
CritĂšreFluxArgoCD
ComplexitéDistribué sur plusieurs entitésCentralisé, tout-en-un
Intégration KubernetesPattern Operator natifAutonome, fonctionne à cÎté de K8s
ExtensibilitéTrÚs limitée (Kubernetes only)Plugins et hooks disponibles
UINonInterface Web riche intégrée
OrchestrationDépendances explicites via dependsOnPriorisation de synchronisation
VisionGitOps pour Kubernetes et uniquement K8sGitOps comme orchestrateur d’environnement

4. OBSERVABILITÉ –> VISION MICROSOFT

L’observabilitĂ©, ce n’est pas juste “voir ce qui se passe”.
C’est donner les moyens aux Ă©quipes de comprendre, corrĂ©ler, agir, et anticiper, grĂące Ă  trois piliers fondamentaux :

  • 📊 MĂ©triques
  • 📁 Logs
  • 📈 Traces

Et chez Microsoft, la vision de l’observabilitĂ© est en train de se stabiliser (aprĂšs plusieurs itĂ©rations), autour d’une stack cohĂ©rente et intĂ©grĂ©e : Azure Monitor

La grande diffĂ©rence entre monitoring et observabilitĂ©, c’est la corrĂ©lation.

Tu ne veux pas juste savoir qu’un pod crash.
Tu veux savoir pourquoi, dans quel contexte, et si cela impacte ton business.

Un pic CPU Ă  100% ?
Ce n’est pas juste un signal technique.
C’est peut-ĂȘtre un utilisateur qui abandonne son panier d’achat.

L’observabilitĂ© bien pensĂ©e permet de lier des KPI techniques Ă  des KPI mĂ©tier.
Et c’est pour ça qu’elle ne concerne pas que les Ops ou les Devs : toute l’organisation est concernĂ©e.

Depuis plusieurs annĂ©es, Microsoft consolide sa vision sous l’umbrella Azure Monitor, qui regroupe :

BriqueRĂŽle
Log Analytics WorkspacePuits de logs et moteur KQL
Managed PrometheusCollecte de métriques cloud-native
Container InsightsSupervision des clusters AKS
Application InsightsTraces applicatives (via instrumentation SDK)
Azure Managed GrafanaVisualisation unifiée

💡 DerriĂšre tout ça, l’objectif est de permettre une corrĂ©lation intelligente entre les signaux, et une expĂ©rience de monitoring unifiĂ©e, mĂȘme si les sources sont hĂ©tĂ©rogĂšnes.

Tout commence par l’activation des diagnostic settings sur les services Azure.
DĂšs que c’est en place, logs, mĂ©triques et traces peuvent ĂȘtre redirigĂ©s vers un Log Analytics Workspace, ou une instance Prometheus managĂ©e (Azure Monitor workspace).

🌀 Ce composant devient le socle d’agrĂ©gation, sur lequel viennent se brancher les outils de visualisation comme :

  • Azure Dashboards
  • Workbooks
  • Azure Managed Grafana

Les clusters Kubernetes génÚrent beaucoup de signaux, parfois trop.

Et Microsoft l’a bien compris :
Sans stratĂ©gie, un Log Analytics peut coĂ»ter plus cher que le cluster lui-mĂȘme.

Il faut donc :

  • Collecter Ă  plusieurs niveaux : control plane, nodes, pods
  • Filtrer intelligemment les sources (ex. kube-apiserver, etcd, scheduler, etc.)
  • Adapter les profils de collecte (→ penser au minimal ingestion profile)

Activable en un clic depuis Azure ou via Terraform, Container Insights :

  • DĂ©ploie un DaemonSet sur chaque nƓud
  • Collecte les mĂ©triques et logs du cluster
  • Envoie les donnĂ©es vers Azure Monitor workspace

Il fournit :

  • Des Workbooks prĂȘts Ă  l’emploi
  • Des mĂ©triques par pod, namespace, workload
  • Une expĂ©rience intĂ©grĂ©e dans le portail Azure (⚠ nĂ©cessite un accĂšs rĂ©seau pour les clusters privĂ©s)

La force de cette vision, c’est qu’elle adresse diffĂ©rents mĂ©tiers :

  • Les Ops y trouvent des mĂ©triques systĂšme et des alertes
  • Les Devs peuvent brancher leurs applications Ă  Application Insights
  • Les analystes peuvent croiser des mĂ©triques business et techniques
  • Les Ă©quipes sĂ©curitĂ© peuvent faire du threat hunting avec les logs

📌 Les traces, via Application Insights, nĂ©cessitent une instrumentation manuelle par SDK selon le langage (Java, .NET, Python
).
C’est rarement fait au dĂ©but, mais fortement recommandĂ© sur le long terme.

Microsoft propose aujourd’hui deux approches rĂ©seau :

OutilPortée
Traffic AnalyticsNiveau Azure / VNet
Retina (en preview)Niveau cluster, via eBPF

đŸ§Ș Retina est un projet open source lancĂ© par Microsoft (KubeCon 2024), mais :

  • Encore jeune
  • Assez lourd Ă  opĂ©rer (logs + CPU)
  • Et coĂ»teux Ă  grande Ă©chelle

💡 Si besoin de visibilitĂ© rĂ©seau intra-cluster (pods ↔ pods), des alternatives comme Hubble + Cilium existent, mais demandent une souscription (~350€/mois/cluster). À ce jour, non recommandĂ© dans un contexte standard AKS

Jusqu’à rĂ©cemment, intĂ©grer Prometheus dans Azure voulait dire maintenir soi-mĂȘme l’outil (service, base de donnĂ©es, stockage
).

Microsoft propose désormais une alternative PaaS : Azure Monitor Workspace, qui expose une expérience Prometheus managée, sans avoir à installer Prometheus dans tes clusters.

đŸ§© ConcrĂštement :

  • C’est Microsoft qui hĂ©berge, met Ă  jour et sĂ©curise le backend Prometheus
  • Tu ne paies que la consommation rĂ©elle
  • Et tu restes 100% compatible PromQL, ce qui permet de migrer des dashboards existants sans modification

Ce service est invisible cĂŽtĂ© Kubernetes : les clusters AKS (ou mĂȘme on-prem) envoient leurs mĂ©triques via scraping, et Prometheus les traite cĂŽtĂ© Azure.

📌 Pour que ça fonctionne, tu dois configurer le scraping sur trois niveaux :

  • Le cluster Kubernetes (via les Diagnostic Settings)
  • Les nƓuds (via kubelet et Node Exporter)
  • Les applications, via des annotations Prometheus et/ou des agents OpenTelemetry

💡 Et cĂŽtĂ© app, il faudra aussi que les dĂ©veloppeurs :

  • Exposent les mĂ©triques avec le bon endpoint (/metrics)
  • Documentent ce qu’ils publient
  • Et ajoutent les annotations nĂ©cessaires dans les manifests YAML

Microsoft a signé un partenariat avec Grafana Labs pour proposer Grafana managé directement dans Azure, sans VM, sans maintenance.

🎯 Objectif : une expĂ©rience Grafana intĂ©grĂ©e Ă  Azure, avec :

  • SSO via Azure AD (Entra ID)
  • Private Endpoint natif
  • Datasources prĂ©connectĂ©es (Azure Monitor, Prometheus, Log Analytics, etc.)
  • Sync automatique des Ă©quipes via Azure AD

💬 Tu accĂšdes Ă  l’interface, tu choisis “connecter une datasource Azure” → c’est dĂ©jĂ  configurĂ©.

Mais attention : la version managĂ©e n’est pas Grafana Enterprise.
Certaines fonctionnalités ne sont pas incluses, notamment :

  • Le support des plugins communautaires
  • L’extension native Application Insights pour les traces
  • Les alertes avancĂ©es ou RBAC personnalisĂ©s

📎 Pour aller plus loin, il est possible de basculer vers Grafana Cloud (SaaS Enterprise), mais ce n’est plus hĂ©bergĂ© chez Microsoft, ce qui pose des enjeux de conformitĂ© (notamment en banque ou dans le secteur public)

⚠ Si tu as beaucoup d’utilisateurs potentiels, mĂȘme inactifs la plupart du temps, cette approche peut vite devenir plus chĂšre qu’une VM auto-hĂ©bergĂ©e avec Grafana OSS

Par dĂ©faut, AKS est extrĂȘmement bavard.
Et chaque composant du Control Plane (API Server, Scheduler, ETCD
) peut générer des gigaoctets de logs par jour.

🎯 MoralitĂ© : activer les Diagnostic Settings sans filtre, c’est courir Ă  la ruine.

Pour pallier ça, Microsoft propose désormais un profil intelligent :

C’est une configuration recommandĂ©e qui :

  • Ne collecte que les logs critiques : kube-apiserver et etcd
  • Évite d’enregistrer kube-audit, extrĂȘmement verbeux (jusqu’à 1 To/mois sur un cluster trĂšs actif)
  • Permet d’avoir de la visibilitĂ© sans exploser la facture

À appliquer dùs l’instanciation de ton cluster AKS, via Terraform ou ARM.

ÉlĂ©mentRĂŽleNotes
Azure Monitor WorkspaceBackend Prometheus managéCompatible PromQL
Container InsightsCollecte de logs + mĂ©triques (via DaemonSet)PrĂȘt Ă  l’emploi
Application InsightsTraces applicatives (instrumentation requise)Devs only
Azure Managed GrafanaVisualisation intégrée + SSOPlugins limités
Diagnostic SettingsActive la collecte sur tous composants AzureÀ filtrer avec prĂ©caution

5. OBSERVABILITÉ –> VISION SELF-MANAGED

Envie de rester maĂźtre de ta stack d’observabilitĂ© ?
De tout piloter toi-mĂȘme, du dĂ©ploiement aux dashboards, sans passer par les outils managĂ©s Azure ?

âžĄïž le modĂšle self-managed devient une Ă©vidence.

La stack la plus répandue reste :

  • Prometheus : pour collecter les mĂ©triques
  • Grafana : pour visualiser et explorer
  • Loki : pour centraliser les logs Kubernetes

Ce trio, proposĂ© et maintenu par Grafana Labs, peut ĂȘtre :

  • dĂ©ployĂ© manuellement en YAML,
  • ou plus intelligemment via Helm charts comme kube-prometheus-stack et loki-stack.

👉 Helm, c’est le Terraform de Kubernetes : un gestionnaire de templates YAML. Tu dĂ©clares les valeurs, il gĂ©nĂšre toute l’archi

helm install monitoring prometheus-community/kube-prometheus-stack
helm install logs grafana/loki-stack

🎯 RĂ©sultat : tu dĂ©ploies une stack complĂšte (Prometheus + Alertmanager + Grafana + Loki) en quelques minutes.

Loki a Ă©tĂ© pensĂ© pour les logs comme Prometheus l’est pour les mĂ©triques :

  • Indexation minimale (basĂ©e sur labels, pas sur le contenu)
  • Compression optimisĂ©e
  • IntĂ©gration native avec Grafana (mĂȘme requĂȘtage, mĂȘmes dashboards)
  • Support du format standard promtail, fluentbit ou logstash

👉 Loki n’est pas juste une alternative Ă  ELK. C’est la solution log-native Kubernetes, pensĂ©e pour la scalabilitĂ©.

Choisir une stack self-managed, c’est assumer :

  • Le dĂ©ploiement initial
  • La mise Ă  jour continue (version des charts, compatibilitĂ© AKS
)
  • La gestion de la rĂ©silience (PVC, rĂ©plication, sauvegarde, monitoring du monitoring)

Et surtout :

  • Chaque composant (Prometheus, Grafana, Alertmanager, Loki
) doit ĂȘtre monitorĂ© lui-mĂȘme.
  • Certaines mises Ă  jour de Kubernetes (notamment depuis la v1.27+) peuvent bloquer si un composant est incompatible avec la nouvelle version.
⚠ Kubernetes bloque dĂ©sormais un upgrade si des composants comme Prometheus sont en version obsolĂšte
Tu dois donc mettre Ă  jour ta stack de monitoring avant de mettre Ă  jour le cluster lui-mĂȘme

Si ton cluster AKS héberge :

  • Ton Prometheus
  • Tes dashboards Grafana
  • Ton stack Loki


Alors tu perds tout ton historique en cas d’incident.
âžĄïž D’oĂč l’intĂ©rĂȘt de dissocier les clusters de supervision des clusters applicatifs, ou de sauvegarder rĂ©guliĂšrement les volumes et la configuration (ConfigMap, PVC, secrets
).

Ta stack Prometheus aura besoin :

  • De Prometheus Exporters sur chaque cluster (ex: kube-state-metrics, node-exporter)
  • D’une ConfigMap centrale pour la configuration de scrape jobs
  • D’Alertmanager pour dĂ©clencher des alertes vers Slack, Teams, e-mails, etc.

💡 Ces composants tournent gĂ©nĂ©ralement en DaemonSet sur chaque node → ils consomment CPU & RAM, donc Ă  prendre en compte dans la capacitĂ© globale du cluster.

  • FlexibilitĂ© totale
  • CoĂ»t fixe (pas de licence)
  • DĂ©ploiement cross-cloud / on-prem
  • Stack modulaire Ă  la carte
  • Maintenance manuelle
  • À surveiller lors des upgrades K8s
  • Risque de perte en cas de crash du cluster

PROCHAIN ARTICLE

Tu as maintenant une boĂźte Ă  outils claire, pensĂ©e pour le terrain, et capable de sĂ©curiser l’exploitation au La continuitĂ©, ce n’est pas une option.
C’est ce qui permet Ă  ton cluster de tenir
 mĂȘme quand tout bouge autour.

👉Prochaine Ă©tape ?


Faire durer
On parlera mises Ă  jour, rĂ©silience, sauvegardes , bref tout ce qu’il faut pour garder ton AKS solide dans le temps


📎 Pour aller plus loin (docs Microsoft) :