Infrastructure

Azure Service Health : qualifier un signal régional avant failover

Un runbook de production pour qualifier un signal Azure Service Health ou Resource Health avec impact utilisateur, dépendances, routage, DNS, observabilité, décision de failover et rollback.

19 juil. 2026 azureservice-healthresource-healthfailoverobservabilitykqldnsroutingfront-doortraffic-managerrunbookrollbackincidentproduction

Un signal Azure Service Health ou Resource Health arrive rarement au bon moment. Une région annonce une dégradation, une ressource passe en état indisponible, un dashboard commence à clignoter, et l’équipe doit décider vite : attendre, basculer, rollbacker, couper une automatisation, ou prévenir les utilisateurs.

Le risque est de traiter le signal Azure comme une décision déjà prise. Service Health indique un événement de plateforme. Resource Health signale l’état d’une ressource. Aucun des deux ne prouve seul l’impact applicatif, le bon périmètre de failover ou la sécurité d’un rollback. Ce runbook sert à relier signal fournisseur, symptômes utilisateur, dépendances, routage, DNS, traces et plan de retour avant d’engager une bascule régionale.

Poser le périmètre de décision

Commencez par écrire le contrat de l’incident. Une bascule régionale n’est pas une commande technique isolée : elle touche routage, caches, données, files, identités, endpoints privés, observabilité et capacité de retour.

yaml regional-failover-scope.yml
incident:
signal: Azure Service Health degradation
region: westeurope
first_seen_utc: 2026-07-19T06:42:00Z
impacted_services:
  - App Service
  - Azure SQL
  - Storage
workload: customer-api-prod
primary_region: westeurope
secondary_region: northeurope

decision_needed:
- wait_and_monitor
- fail_over_traffic
- rollback_last_release
- disable_write_path
- pause_automation

evidence_required:
- provider_event_scope
- user_visible_symptom
- resource_health_state
- dependency_errors
- routing_and_dns_state
- data_consistency_risk
- rollback_path

Sans ce cadrage, l’équipe peut confondre une panne région Azure, une régression applicative, une erreur DNS, une limite de dépendance ou un problème d’observabilité.

Séparer Service Health, Resource Health et signal applicatif

Service Health est utile pour comprendre le contexte fournisseur. Resource Health rapproche le signal d’une ressource précise. Les logs applicatifs disent si les utilisateurs voient réellement le problème. Il faut lire ces trois plans ensemble.

text signal-layers.txt
Service Health
Evenement fournisseur
Region et services declares
Statut, dernier message, heure de debut
Consequence possible sur plusieurs abonnements

Resource Health
Etat d'une ressource concrete
Available, Degraded, Unavailable ou Unknown
Historique de transition
Annotation plateforme ou utilisateur

Signal applicatif
Taux d'erreur, latence, saturation, timeouts
Parcours utilisateur touches
Dependances en erreur
Difference entre region primaire et secondaire

Decision
La bascule est justifiee seulement si le signal applicatif et le risque de maintien depassent le risque de failover

Un événement Service Health sans symptôme applicatif peut justifier une surveillance renforcée. Un symptôme applicatif sans événement Service Health doit rester un incident produit ou infrastructure jusqu’à preuve contraire.

Lister les ressources touchées sans extrapoler

Avant de basculer, vérifiez quelles ressources sont réellement en état dégradé. Si vous utilisez Azure Resource Graph, l’objectif est de rapprocher les ressources critiques, leur région et leur statut de santé.

kusto 01-resource-health-scope.kql
resourcehealthresources
| where type =~ "microsoft.resourcehealth/availabilitystatuses"
| extend resourceId = tostring(properties.targetResourceId)
| extend availabilityState = tostring(properties.availabilityState)
| extend reasonType = tostring(properties.reasonType)
| extend summary = tostring(properties.summary)
| where resourceId has "/resourceGroups/rg-prod-"
| project resourceId, availabilityState, reasonType, summary, location
| order by availabilityState asc, resourceId asc

Cette vue ne doit pas être utilisée seule pour décider. Elle sert à limiter le périmètre : quelles ressources critiques sont dégradées, lesquelles restent disponibles, et quelles dépendances ne sont pas couvertes par le signal.

Confirmer l’impact utilisateur avant le failover

Une bascule régionale peut aggraver un incident si le secondaire n’est pas chaud, si les données ne sont pas synchrones, si les endpoints privés ne sont pas validés ou si les allowlists ne couvrent pas la région de secours. Il faut donc vérifier l’impact utilisateur avant l’action lourde.

kusto 02-user-impact-before-failover.kql
let Window = 2h;
let PrimaryRegion = "westeurope";
requests
| where timestamp > ago(Window)
| extend region = tostring(customDimensions["region"])
| summarize total=count(),
          failed=countif(success == false),
          p95_ms=percentile(duration, 95)
by bin(timestamp, 5m), region, cloud_RoleName
| extend failure_rate = todouble(failed) / todouble(total)
| where region in (PrimaryRegion, "northeurope")
| order by timestamp asc

Si les erreurs montent uniquement sur un endpoint interne non utilisateur, la décision peut être de dégrader une fonctionnalité ou de suspendre une automatisation. Si le parcours principal échoue, la question de failover devient plus forte.

Vérifier routage, DNS et chemin secondaire

Le failover échoue souvent sur des détails opérables : TTL DNS trop long, Front Door ou Traffic Manager mal pondéré, origin secondaire froid, certificat non valide, Private DNS Zone non liée, firewall ou NAT non prêt, sonde qui mesure le mauvais chemin.

text secondary-path-checklist.txt
Chemin utilisateur
Front Door, Traffic Manager, Application Gateway ou DNS public
Health probe qui mesure le vrai endpoint applicatif
Certificat et hostname valides sur le secondaire
TTL connu et temps de propagation acceptable

Chemin prive
Private DNS Zone liee aux VNets secondaires
Resolver ou forwarder hybride pret
UDR, NSG, firewall et NAT controles
Dependances PaaS joignables depuis la region de secours

Chemin donnees
Mode de replication connu
RPO et RTO relus
Files, jobs et consommateurs idempotents
Ecritures bloquees si la coherence n'est pas garantie

Private Endpoint peut faire partie du chemin, mais il ne doit pas devenir le seul diagnostic. La bascule dépend aussi du routage global, du DNS, de l’état applicatif, de la réplication et des contrôles de sécurité.

Décider avec une matrice exploitable

Le runbook doit produire une décision relisible. Une équipe d’astreinte ne doit pas deviner pourquoi elle a basculé à 08:00 ou pourquoi elle a choisi d’attendre.

text regional-failover-decision.txt
Attendre et surveiller
Service Health degrade mais pas d'impact utilisateur confirme
Resource Health disponible sur les ressources critiques
Probes synthetiques et logs applicatifs stables
Revue planifiee dans une fenetre courte

Basculer le trafic
Impact utilisateur confirme sur la region primaire
Chemin secondaire valide par probe applicative
Donnees et dependances compatibles avec la bascule
Rollback ou retour primaire documente

Rollbacker le dernier changement
Symptome demarre apres deploiement ou changement infra
Service Health ne couvre pas le composant touche
Secondaire expose le meme risque applicatif
Ancien etat sain connu

Degrader une fonctionnalite
Parcours principal stable
Dependances secondaires ou jobs asynchrones touches
Ecritures ou automatisations risquent de dupliquer l'etat
Mode degrade testable et reversible

Bloquer la bascule
Etat secondaire inconnu
Replication ou coherence non prouvee
DNS, certificats ou probes non valides
Retour arriere impossible a executer proprement

La décision doit inclure une heure de réévaluation. Attendre sans horizon est une absence de décision, pas une stratégie.

Exécuter la bascule avec garde-fous

Si la bascule est choisie, réduisez le nombre de changements simultanés. Modifiez une surface de routage, observez, puis continuez. Les automatisations de failover doivent rester bornées : pas de purge globale, pas de modification de seuils d’alerte, pas d’ouverture réseau large pour “faire passer”.

yaml failover-change-record.yml
change:
action: shift_traffic_to_secondary
owner: incident-commander
start_utc: 2026-07-19T07:10:00Z
traffic_surface: front-door-origin-priority
primary_origin: app-westeurope
secondary_origin: app-northeurope

guards:
max_change_per_step: one_routing_surface
keep_logs_enabled: true
keep_user_symptom_alert: true
freeze_nonessential_deployments: true
pause_write_automation_if_consistency_unknown: true

validation:
- synthetic_probe_secondary_success
- user_error_rate_decreases
- dependency_errors_do_not_move_to_secondary
- no_duplicate_jobs_or_messages
- rollback_instruction_confirmed

Le meilleur failover est celui qui laisse assez de preuves pour comprendre ensuite si la bascule a corrigé l’incident ou seulement déplacé le symptôme.

Valider après bascule ou retour arrière

Après action, validez le service et le contrôle. Une page verte ne suffit pas si les jobs asynchrones doublonnent, si les traces ne sont plus corrélées ou si le retour primaire est devenu impossible.

text post-failover-validation.txt
Validation service
Taux d'erreur utilisateur revenu au niveau attendu
Latence stable sur le chemin secondaire
Dependances critiques sans nouvelle erreur dominante
Files, traitements et webhooks sans duplication
Donnees coherentes avec le mode de replication

Validation controle
Decision, heure, preuves et owner notes dans l'incident
Alertes utilisateur toujours actives
Logs et traces visibles sur la region active
Retour primaire ou rollback de routage teste en lecture
Actions temporaires avec heure de fin

Si le failover corrige l’impact mais que le retour est incertain, l’incident reste ouvert. L’état cible est peut-être stable, mais l’exploitation n’est pas encore revenue à un mode contrôlé.

Conclusion

Un signal Azure Service Health ou Resource Health doit déclencher un diagnostic, pas une bascule automatique. La bonne question n’est pas seulement “Azure est-il en panne ?”, mais “quel impact voit-on, quel chemin est touché, quel secondaire est prêt, et quel retour arrière reste possible ?”.

En séparant signal fournisseur, état ressource, symptôme utilisateur, routage, DNS, données et observabilité, l’équipe peut choisir entre attente surveillée, failover, rollback, mode dégradé ou blocage. La décision devient opérable : elle inclut des preuves, une validation et un retour arrière, au lieu d’une réaction précipitée à une alerte régionale.