Utilisation de l’extension Intégrité de l’application avec des Virtual Machine Scale Sets

La surveillance de l’intégrité de votre application est un signal important pour la gestion et la mise à niveau votre déploiement. Groupes de machines virtuelles identiques Azure prennent en charge les mises à niveau propagées, y compris les mises à niveau automatiques de l’image du système d’exploitation et la mise à jour corrective automatique des invités de machine virtuelle, qui reposent sur la surveillance de l’état de santé des instances individuelles pour mettre à niveau votre déploiement. Vous pouvez également utiliser l’extension Intégrité de l’application pour surveiller l’intégrité des applications de chaque instance de votre groupe identique et effectuer des réparations d’instance à l’aide de réparations automatiques d’instances.

Cet article décrit comment vous pouvez utiliser les deux types d’extension Application Health, Binary Health States ou Rich Health States, pour surveiller l’état de santé de vos applications déployées sur des groupes de machines virtuelles identiques.

Prérequis

Cet article suppose de connaître :

  • extensions de machine virtuelle Azure
  • La modification des Virtual Machine Scale Sets

Mise en garde

L’extension d’intégrité de l’application s’attend à recevoir une réponse de sonde cohérente au niveau du port tcp configuré ou du chemin http/https de requête pour étiqueter une machine virtuelle comme saine. Si aucune application ne s’exécute sur la machine virtuelle, ou si vous ne parvenez pas à configurer une réponse de sonde d’intégrité, votre machine virtuelle va apparaître comme étant Non saine (États d’intégrité binaires) ou Inconnue (États d’intégrité enrichis). Consultez les exemples d’état de santé de l’application pour voir des exemples de réponses de sonde de vérification d’état envoyées à un point de terminaison local.

Remarque

Une seule source de surveillance de l’intégrité peut être utilisée pour un Virtual Machine Scale Set : soit une extension d’intégrité d’application, soit une sonde d’intégrité. Si les deux options sont activées, vous devez en supprimer une avant d’utiliser des services d’orchestration tels que les réparations d’instance ou les mises à niveau automatiques du système d’exploitation.

Quand utiliser l’extension Santé de l’application

L’extension Intégrité de l’application est déployée à l’intérieur d’une instance de Virtual Machine Scale Set et rend compte de l’intégrité des applications à partir de l’instance de groupe identique. L’extension sonde le point de terminaison d’une application locale et met à jour l’état d’intégrité en fonction des réponses TCP/HTTP(S) renvoyées par l’application. Cet état d’intégrité est utilisé par Azure pour lancer des réparations sur des instances non saines et pour déterminer si une instance est éligible à des opérations de mise à niveau.

L’extension signale l’état d’intégrité depuis l’intérieur d’une machine virtuelle et peut être utilisée lorsqu’il n’est pas possible d’utiliser une sonde externe, telle que les sondes d’intégrité d’Azure Load Balancer.

Binary ou Rich Health States

Les extensions Intégrité de l’application ont deux options : États d’intégrité binaires et États d’intégrité enrichis. Le tableau suivant met en évidence certaines différences clés entre les deux options. Consultez la fin de cette section pour obtenir des recommandations générales.

Fonctionnalités États de santé binaires États de santé riches
États de santé disponibles Deux états disponibles : Sain, Non sain Quatre états disponibles : Bon état, Mauvais état, Initialisation en cours, Inconnu1
Envoi de signaux d’intégrité Les signaux d’état sont envoyés via des codes de réponse HTTP/HTTPS ou des connexions TCP. Les signaux d’état via le protocole HTTP/HTTPS sont envoyés via le code de réponse et le corps de réponse de la sonde. Les signaux d’état de santé transmis via le protocole TCP restent inchangés par rapport à ceux de Binary Health States.
Identification des instances non saines Les instances relèvent automatiquement de l’état Non sain si aucun signal Sain n’est reçu de la part de l’application. Une instance non saine peut indiquer un problème lié à la configuration de l’extension (par exemple, un point de terminaison inaccessible) ou un problème lié à l’application (par exemple, un code d’état non-200). Les instances ne passent à l’état Défaillant que si l’application émet une réponse de sonde Défaillant. Les utilisateurs sont responsables de mettre en œuvre une logique personnalisée pour identifier et signaler les instances comportant des applications en mauvaise santé2. Les instances avec des paramètres d’extension incorrects (par exemple, un point de terminaison inaccessible) ou des réponses non valides de la sonde d’intégrité seront classées dans l’état Inconnu2.
état d’initialisation des instances nouvellement créées L’état Initialisation n’est pas disponible. Les instances récemment créées peuvent avoir besoin de temps pour passer à un état stable. L’état Initialisation permet aux instances nouvellement créées d’atteindre un état de santé stable avant qu’elles ne deviennent éligibles aux mises à niveau progressives ou aux opérations de réparation des instances.
Protocole HTTP/HTTPS Pris en charge Pris en charge
Protocole TCP Pris en charge Prise en charge limitée : l’état Inconnu n’est pas disponible sur le protocole TCP. Consultez le tableau du protocole États d’intégrité enrichis pour connaître les comportements de l’état d’intégrité sur TCP.

1 L’état Inconnu n’est pas disponible sur le protocole TCP. 2 S’applique uniquement au protocole HTTP/HTTPS. Le protocole TCP suit le même processus d’identification des instances non saines que dans Binary Health States.

En général, vous devez utiliser Rich Health States si :

  • Vous envoyez des signaux d’état via le protocole HTTP/HTTPS et pouvez transmettre des informations d’état dans le corps de réponse de la sonde.
  • Vous aimeriez utiliser une logique personnalisée pour identifier et marquer des instances non saines.
  • Vous aimeriez définir une période de grâce d’initialisation pour les instances nouvellement créées, afin qu’elles atteignent un état de santé stable avant de rendre l’instance éligible à une mise à niveau progressive ou à des réparations d’instance
  • Vous souhaitez avoir plus de contrôle sur le processus d'ordre et de mise à jour avec des mises à niveau progressives, en émettant des métriques personnalisées

Vous devez utiliser les états de santé binaires si :

  • Vous n’êtes pas intéressé par la configuration d’une logique personnalisée pour identifier et marquer une instance non saine.
  • Vous n’avez pas besoin d’une période de grâce d’initialisation pour les instances récemment créées.
  • Vous n’avez pas besoin d’utiliser des métriques personnalisées lors de l’exécution d’une mise à niveau propagée sur vos machines virtuelles

États de santé riches

Les rapports États d’intégrité enrichis contiennent quatre états d’intégrité : Initialisation en cours, Sain, Non sain et Inconnu. Les tableaux suivants fournissent une brève description indiquant comment chaque état de santé est configuré.

Protocole HTTP/HTTPS

Protocole État de santé Descriptif
http/https Healthy Pour envoyer un signal Sain, l’application doit renvoyer une réponse de la sonde avec : Code de réponse de la sonde : Statut 2xx, Corps de la réponse de la sonde : {"ApplicationHealthState": "Healthy"}
http/https Malsain Pour envoyer un signal Défaillant, l’application est censée renvoyer une réponse de sonde avec : Code de réponse de la sonde : statut 2xx, Corps de réponse de la sonde : {"ApplicationHealthState": "Unhealthy"}
http/https Initialisation L’instance passe automatiquement à l’état Initialisation en cours au démarrage de l’extension. Pour plus d’informations, consultez Initialisation de l’état.
http/https Inconnu Un état Unknown peut se produire dans les scénarios suivants : lorsqu’un code d’état autre que 2xx est renvoyé par l’application, lorsque la requête de sonde expire, lorsque le point de terminaison de l’application est inaccessible ou incorrectement configuré, lorsqu’une valeur manquante ou non valide est fournie pour ApplicationHealthState dans le corps de la réponse, ou lorsque la période de grâce expire. Pour plus d’informations, consultez État inconnu.

Protocole TCP

Protocole État de santé Descriptif
TCP Healthy Pour envoyer un signal Sain, un établissement de liaison réussi doit être effectué avec le point de terminaison d’application fourni.
TCP Malsain L’instance est marquée comme non saine si l’établissement d’une liaison a échoué ou reste incomplet avec le point de terminaison d’application fourni.
TCP Initialisation L’instance passe automatiquement à l’état Initialisation en cours au démarrage de l’extension. Pour plus d’informations, consultez Initialisation de l’état.

État d'initialisation

Cet état s’applique uniquement à Rich Health States. L’état Initialisation n’apparaît qu’au démarrage de l’extension et peut être configuré par les paramètres de l’extension gracePeriod et numberOfProbes.

Au démarrage de l’extension, l’état de santé de l’application restera dans l’état Initialisation jusqu’à ce que l’un des deux scénarios suivants se produise :

  • Le même état d’intégrité (Sain ou Non sain) est signalé un nombre consécutif de fois comme configuré par numberOfProbes.
  • Le gracePeriod expire.

Si le même état d’intégrité (Sain ou Non sain) est signalé consécutivement, l’intégrité de l’application sort de l’état Initialisation en cours pour passer à l’état d’intégrité signalé (Sain ou Non sain).

Exemple

Si numberOfProbes = 3, cela signifierait :

  • Pour passer de l’état Initialisation en cours à l’état Sain : l’extension d’intégrité de l’application doit recevoir trois signaux Sain consécutifs via le protocole HTTP/HTTPS ou TCP.
  • Pour passer de l’état Initialisation à l’état Dégradé : l’extension d’intégrité de l’application doit recevoir trois signaux Dégradé consécutifs via le protocole HTTP/HTTPS ou TCP.

Si le paramètre gracePeriod expire avant qu’un état d’intégrité consécutif ne soit signalé par l’application, l’intégrité de l’instance est déterminée ainsi :

  • Protocole HTTP/HTTPS : l’intégrité de l’application passe de l’état Initialisation en cours à l’état Inconnu.
  • Protocole TCP : l’état de santé de l’application passera de Initialisation en cours à Dégradé

État inconnu

Cet état s’applique uniquement aux états de santé enrichis. L’état Inconnu est signalé uniquement pour les sondes « http » ou « https » et se produit dans les scénarios suivants :

  • Quand un code d’état autre que 2xx est retourné par l’application
  • Quand la requête de sonde d’intégrité expire
  • Lorsque le point de terminaison de l’application est inaccessible ou mal configuré
  • Lorsqu’une valeur absente ou invalide est fournie pour ApplicationHealthState dans le corps de la réponse
  • Quand la période de grâce expire

Une instance dont l’état est Inconnu est traitée de la même manière qu’une instance non saine. Si cette option est activée, les réparations d’instance sont effectuées sur une instance dont l’état est Inconnu, alors que les mises à niveau propagées sont suspendues jusqu’à ce que l’instance repasse à l’état Sain.

Le tableau suivant indique comment interpréter l’état d’intégrité pour les mises à niveau propagées et les réparations d’instance :

État de santé Interprétation de la mise à niveau progressive Déclencheur de réparations d’instance
Initialisation Attendez que l’état soit Sain, Non sain ou Inconnu. Non
Healthy Healthy Non
Malsain Malsain Oui
Inconnu Malsain Oui

Schéma d’extension pour Rich Health States

Le code JSON suivant montre le schéma de l’extension Rich Health States. L’extension nécessite au minimum une requête « http » ou « https » avec respectivement un port ou un chemin de requête associés. Les sondes TCP sont également prises en charge, mais elles ne pourront pas définir le ApplicationHealthState via le corps de réponse de la sonde et n’auront pas accès à l’état Unknown.

{
  "extensionProfile" : {
     "extensions" : [
      {
        "name": "HealthExtension",
        "properties": {
          "publisher": "Microsoft.ManagedServices",
          "type": "<ApplicationHealthLinux or ApplicationHealthWindows>",
          "autoUpgradeMinorVersion": true,
          "typeHandlerVersion": "2.0",
          "settings": {
            "protocol": "<protocol>",
            "port": <port>,
            "requestPath": "</requestPath>",
            "intervalInSeconds": 5,
            "numberOfProbes": 1,
            "gracePeriod": 600
          }
        }
      }
    ]
  }
} 

Valeurs de propriétés

Nom Valeur/Exemple Type de données
apiVersion 2018-10-01 Date
éditeur Microsoft.ManagedServices ficelle
type ApplicationHealthLinux (Linux), ApplicationHealthWindows (Windows) ficelle
typeHandlerVersion 2.0 ficelle

Paramètres

Nom Valeur/Exemple Type de données
protocole http ou https ou tcp ficelle
port Facultatif lorsque le protocole est http ou https, obligatoire lorsque le protocole est tcp int
requestPath Obligatoire lorsque le protocole est http ou https, non autorisé lorsque le protocole est tcp ficelle
intervalleEnSecondes Facultatif. La valeur par défaut est 5 secondes. Il s’agit de l’intervalle entre deux sondes d’intégrité. Par exemple, si intervalInSeconds == 5, une sonde est envoyée au point de terminaison de l’application locale une fois toutes les 5 secondes. La valeur minimale est de 5 secondes, la valeur maximale est de 60 secondes. int
nombreDeSondes Facultatif. La valeur par défaut est 1. Il s’agit du nombre de vérifications consécutives nécessaires pour que l’état de santé change. Par exemple, si numberOfProbles == 3, vous aurez besoin de recevoir 3 signaux « Healthy » consécutifs pour faire passer l’état de santé de « Unhealthy »/« Unknown » à l’état « Healthy ». La même exigence s’applique pour faire passer l’état de santé à « Dégradé » ou à « Inconnu ». La valeur minimale est 1 sonde, la valeur maximale est de 24 sondes. int
période de grâce Facultatif, valeur par défaut = intervalInSeconds * numberOfProbes; la période de grâce maximale est de 14400 secondes int

États de santé binaires

Le rapport d’état d’intégrité binaire contient deux états d’intégrité, Sain et Non sain. Les tableaux suivants présentent une brève description de la configuration des états de santé.

Protocole HTTP/HTTPS

Protocole État de santé Descriptif
http/https Healthy Pour envoyer un signal sain, l’application doit retourner un code de réponse 200.
http/https Malsain L’instance est marquée comme non saine si aucun code de réponse 200 n’est reçu de la part de l’application.

Protocole TCP

Protocole État de santé Descriptif
TCP Healthy Pour envoyer un signal Sain, un établissement de liaison réussi doit être effectué avec le point de terminaison d’application fourni.
TCP Malsain L’instance sera marquée comme Non saine si une poignée de main a échoué ou est restée incomplète avec le point de terminaison d’application spécifié.

Voici quelques scénarios susceptibles d’entraîner un état Non sain :

  • Quand le point de terminaison d’application retourne un code d’état non-200
  • Lorsqu’aucun point de terminaison d’application n’est configuré à l’intérieur des instances de machine virtuelle pour fournir l’état d’intégrité de l’application
  • Lorsque le point de terminaison d’application n’est pas configuré correctement
  • Lorsque le point de terminaison d’application n’est pas accessible

Schéma d’extension pour Binary Health States

Le code JSON suivant présente le schéma de l’extension Application Health. L’extension nécessite au minimum une requête « tcp », « http » ou « https » avec respectivement un port ou un chemin d’accès à la demande associés.

{
  "extensionProfile" : {
     "extensions" : [
      {
        "name": "HealthExtension",
        "properties": {
          "publisher": "Microsoft.ManagedServices",
          "type": "<ApplicationHealthLinux or ApplicationHealthWindows>",
          "autoUpgradeMinorVersion": true,
          "typeHandlerVersion": "1.0",
          "settings": {
            "protocol": "<protocol>",
            "port": <port>,
            "requestPath": "</requestPath>",
            "intervalInSeconds": 5,
            "numberOfProbes": 1
          }
        }
      }
    ]
  }
} 

Valeurs de propriétés

Nom Valeur/Exemple Type de données
apiVersion 2018-10-01 Date
éditeur Microsoft.ManagedServices ficelle
type ApplicationHealthLinux (Linux), ApplicationHealthWindows (Windows) ficelle
typeHandlerVersion 1.0 ficelle

Paramètres

Nom Valeur/Exemple Type de données
protocole http ou https ou tcp ficelle
port Facultatif lorsque le protocole est http ou https, obligatoire lorsque le protocole est tcp int
requestPath Obligatoire lorsque le protocole est http ou https, non autorisé lorsque le protocole est tcp ficelle
intervalleEnSecondes Facultatif. La valeur par défaut est 5 secondes. Il s’agit de l’intervalle entre deux sondes d’intégrité. Par exemple, si intervalInSeconds == 5, une sonde est envoyée au point de terminaison de l’application locale une fois toutes les 5 secondes. La valeur minimale est de 5 secondes, la valeur maximale est de 60 secondes. int
nombreDeSondes Facultatif. La valeur par défaut est 1. Il s’agit du nombre de vérifications consécutives nécessaires pour que l’état de santé change. Par exemple, si numberOfProbles == 3, vous aurez besoin de 3 signaux « sain » consécutifs pour faire passer l’état de santé de « non sain » à « sain ». La même exigence s’applique pour faire passer l’état de santé à l’état « Non sain ». La valeur minimale est 1 sonde, la valeur maximale est de 24 sondes. int

Déployer l’extension Application Health

Il existe plusieurs façons de déployer l’extension Intégrité de l’application sur vos groupes identiques, comme indiqué dans les exemples suivants.

États de santé riches

L’exemple suivant ajoute l’extension Intégrité de l’application – Rich Health States (portant le nom myHealthExtension) à extensionProfile dans le modèle d’un groupe identique Windows.

Vous pouvez aussi utiliser cet exemple pour mettre à niveau une extension existante de Binary Health States à Rich Health States en effectuant un appel PATCH au lieu d’un PUT.

PUT on `/subscriptions/subscription_id/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachineScaleSets/myScaleSet/extensions/myHealthExtension?api-version=2018-10-01`
{
  "name": "myHealthExtension",
  "location": "<location>",
  "properties": {
    "publisher": "Microsoft.ManagedServices",
    "type": "ApplicationHealthWindows",
    "autoUpgradeMinorVersion": true,
    "typeHandlerVersion": "2.0",
    "settings": {
      "protocol": "<protocol>",
      "port": <port>,
      "requestPath": "</requestPath>",
      "intervalInSeconds": <intervalInSeconds>,
      "numberOfProbes": <numberOfProbes>,
      "gracePeriod": <gracePeriod>
    }
  }
}

Utilisez PATCH pour éditer une extension déjà déployée.

Mettez à niveau les machines virtuelles pour installer l’extension.

POST on `/subscriptions/<subscriptionId>/resourceGroups/<myResourceGroup>/providers/Microsoft.Compute/virtualMachineScaleSets/< myScaleSet >/manualupgrade?api-version=2022-08-01`
{
  "instanceIds": ["*"]
}

États de santé binaires

L’exemple suivant ajoute l’extension Intégrité de l’application (avec le nom myHealthExtension) à extensionProfile dans le modèle d’un groupe identique basé sur Windows.

Vous pouvez également utiliser cet exemple pour faire passer une extension existante de Rich Health States à Binary Health States en effectuant un appel PATCH au lieu d’un PUT.

PUT on `/subscriptions/subscription_id/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachineScaleSets/myScaleSet/extensions/myHealthExtension?api-version=2018-10-01`
{
  "name": "myHealthExtension",
  "location": "<location>", 
  "properties": {
    "publisher": "Microsoft.ManagedServices",
    "type": "ApplicationHealthWindows",
    "autoUpgradeMinorVersion": true,
    "typeHandlerVersion": "1.0",
    "settings": {
      "protocol": "<protocol>",
      "port": <port>,
      "requestPath": "</requestPath>"
    }
  }
}

Utilisez PATCH pour modifier une extension déjà déployée.

Mettez à niveau les machines virtuelles pour installer l’extension.

POST on `/subscriptions/<subscriptionId>/resourceGroups/<myResourceGroup>/providers/Microsoft.Compute/virtualMachineScaleSets/< myScaleSet >/manualupgrade?api-version=2022-08-01`
{
  "instanceIds": ["*"]
}

Résolution des problèmes

Besoin d’aide pour configurer une réponse de sonde

Consultez les exemples d’état de santé de l’application pour voir des exemples de réponses de sonde de vérification d’état envoyées à un point de terminaison local.

Voir VMHealth – instance unique

Get-AzVmssVM 
  -InstanceView `
  -ResourceGroupName <rgName> `
  -VMScaleSetName <vmssName> `
  -InstanceId <instanceId> 

Afficher VMHealth – appel par lot

Cette option est uniquement disponible pour les Virtual Machine Scale Sets avec orchestration Uniform.

GET on `/subscriptions/<subscriptionID>/resourceGroups/<resourceGroupName>/providers/Microsoft.Compute/virtualMachineScaleSets/<vmssName>/virtualMachines/?api-version=2022-03-01&$expand=instanceview`

L’état d’intégrité n’apparaît pas

Si l’état d’intégrité n’apparaît pas dans le portail Azure ou par le biais d’un appel GET, vérifiez que la machine virtuelle est mise à niveau vers le modèle le plus récent. Si la machine virtuelle n’utilise pas le modèle le plus récent, mettez-la à niveau et l’état d’intégrité s’affichera.

Journal de sortie d’exécution de l’extension

La sortie de l’exécution de l’extension est journalisées dans des fichiers figurant dans les répertoires suivants :

C:\WindowsAzure\Logs\Plugins\Microsoft.ManagedServices.ApplicationHealthWindows\<version>\
/var/lib/waagent/Microsoft.ManagedServices.ApplicationHealthLinux-<extension_version>/status
/var/log/azure/applicationhealth-extension

Les journaux d’activité capturent également régulièrement l’état d’intégrité de l’application.

Étapes suivantes

Découvrez comment déployer votre application sur des groupes identiques de machines virtuelles.