Utilisation de l’extension Intégrité de l’application avec des groupes de machines virtuelles identiques

La surveillance de l’intégrité de votre application est un signal important pour la gestion et la mise à niveau votre déploiement. Les groupes de machines virtuelles identiques prennent en charge les mises à niveau propagées, notamment les mises à niveau automatiques d’image de système d’exploitation et la mise à jour corrective automatique des invités des machines virtuelles, qui reposent sur l’analyse du fonctionnement 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 explique comment vous pouvez utiliser les deux types de l’extension Intégrité de l’application, Binary Health States ou Rich Health States, pour superviser l’intégrité de vos applications déployées sur des groupes de machines virtuelles identiques.

Prérequis

Cet article suppose de connaître :

Attention

L’extension Intégrité de l’application attend de recevoir une réponse de sonde d’intégrité cohérente au niveau du port tcp ou du chemin de requête http/https configuré afin d’étiqueter une machine virtuelle comme saine. Si aucune application n’est en cours d’exécution 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 Non sain (Binary Health States, États d’intégrité binaires) ou Inconnu (Rich Health States, États d’intégrité enrichis).

Remarque

Une seule source de monitoring de l’intégrité peut être utilisée pour un groupe de machines virtuelles identiques, 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 Intégrité de l’application

L’extension Intégrité de l’application est déployée à l’intérieur d’une instance de groupe de machines virtuelles identiques et rend compte de l’intégrité des applications à partir de l’instance de groupe identique. L’extension sonde sur un point de terminaison d’application locale et met à jour l’état d’intégrité en fonction des réponses TCP/HTTP(S) reçues de 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’intégrité depuis une machine virtuelle et peut être utilisée dans les situations où il n’est pas possible d’utiliser une sonde d’intégrité externe comme une sonde d’intégrité Azure Load Balancer.

Binary ou Rich Health States

Les extensions Intégrité de l’application ont deux options disponibles : Binary Health States et Rich Health States. 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 Binary Health States Rich Health States
États d’intégrité disponibles Deux états disponibles : Sain, Non sain Quatre états disponibles : Sain, Non sain, Initialisation en cours, Inconnu1
Envoi de signaux d’intégrité Les signaux d’intégrité sont envoyés par le biais de codes de réponse HTTP/HTTPS ou de connexions TCP. Les signaux d’intégrité sur le protocole HTTP/HTTPS sont envoyés par le biais d’un code de réponse de sonde d’intégrité et du corps de la réponse. Les signaux d’intégrité par le biais du protocole TCP restent inchangés par rapport à 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 passent à un état Non sain uniquement si l’application émet une réponse de sonde d’intégrité indiquant Non sain. Les utilisateurs sont responsables de l’implémentation d’une logique personnalisée pour identifier et marquer les instances qui ont des applications non saines2. Les instances qui comportent des paramètres d’extension incorrects (par exemple, un point de terminaison inaccessible) ou des réponses de sonde d’intégrité non valides relèvent de l’état Inconnu2.
État Initialisation en cours pour les instances récemment créées L’état Initialisation en cours n’est pas disponible. Les instances récemment créées peuvent avoir besoin de temps pour passer à un état stable. L’état Initialisation en cours permet aux instances nouvellement créées de passer à un état d’intégrité stable avant de devenir éligibles aux mises à niveau propagées ou aux opérations de réparation.
Protocole HTTP/HTTPS Pris en charge Pris en charge
Protocole TCP Prise en charge Prise en charge limitée : l’état Inconnu n’est pas disponible sur le protocole TCP. Consultez le tableau des protocoles Rich Health States pour connaître les comportements d’é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 Binary Health States 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.

Préférez utiliser Rich Health States si :

  • Vous envoyez des signaux d’intégrité par le biais du protocole HTTP/HTTPS et pouvez envoyer des informations d’intégrité par l’intermédiaire du corps de réponse de la sonde d’intégrité.
  • 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 récemment créées, afin qu’elles passent à un état d’intégrité stable avant de devenir éligibles aux mises à niveau propagées ou aux réparations.

Binary Health States

Les rapports de Binary Health States contiennent deux états d’intégrité : Sain et Non sain. Les tableaux suivants fournissent une brève description de la façon dont les états d’intégrité sont configurés.

Protocole HTTP/HTTPS

Protocol État d’intégrité Description
http/https Healthy Pour envoyer un signal sain, l’application doit retourner un code de réponse 200.
http/https Unhealthy 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

Protocol État d’intégrité Description
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 Unhealthy 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.

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

Rich Health States

Les rapports de Rich Health States contiennent quatre états d’intégrité : Initialisation en cours, Sain, Non sain et Inconnu. Les tableaux suivants fournissent une brève description de la façon dont chaque état d’intégrité est configuré.

Protocole HTTP/HTTPS

Protocol État d’intégrité Description
http/https Healthy Pour envoyer un signal Sain, l’application doit retourner une réponse de sonde d’intégrité avec : Code de réponse de la sonde d’intégrité : État 2xx, Corps de réponse de la sonde d’intégrité :{"ApplicationHealthState": "Healthy"}
http/https Unhealthy Pour envoyer un signal Non sain, l’application doit retourner une réponse de sonde d’intégrité avec : Code de réponse de la sonde d’intégrité : État 2xx, Corps de réponse de la sonde d’intégrité :{"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 État Initialisation en cours.
http/https Unknown Un état Inconnu peut se produire 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, quand le point de terminaison d’application est inaccessible ou configuré de manière incorrecte, quand une valeur manquante ou non valide est fournie pour ApplicationHealthState dans le corps de la réponse ou quand la période de grâce expire. Pour plus d’informations, consultez État Inconnu.

Protocole TCP

Protocol État d’intégrité Description
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 Unhealthy 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 État Initialisation en cours.

État Initialisation en cours

Cet état s’applique uniquement à Rich Health States. L’état Initialisation en cours se produit une seule fois 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’intégrité de l’application reste à l’état Initialisation en cours 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 paramètre 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, voici ce que cela signifie :

  • Pour passer de l’état Initialisation en cours à l’état Sain : l’extension Intégrité de l’application doit recevoir trois signaux Sain consécutifs par l’intermédiaire du protocole HTTP/HTTPS ou TCP.
  • Pour passer de l’état Initialisation en cours à l’état Non sain : l’extension Intégrité de l’application doit recevoir trois signaux Non sain consécutifs par l’intermédiaire du 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’intégrité de l’application passe de l’état Initialisation en cours à l’état Non sain.

État inconnu

Cet état s’applique uniquement à Rich Health States. L’état Inconnu est signalé uniquement pour les sondes d’intégrité « http » ou « https » et se produit dans le cadre des 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
  • Quand le point de terminaison d’application inaccessible ou configuré de manière incorrecte
  • Quand une valeur manquante ou non valide 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 d’intégrité Interprétation des mises à niveau propagées Déclencheur de réparations d’instance
Initialisation Attendez que l’état soit Sain, Non sain ou Inconnu. Non
Healthy Healthy Non
Unhealthy Unhealthy Oui
Unknown Unhealthy Oui

Schéma d’extension pour Binary Health States

Le JSON suivant montre le schéma pour l’extension Intégrité de l’application. 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
publisher Microsoft.ManagedServices string
type ApplicationHealthLinux (Linux), ApplicationHealthWindows (Windows) string
typeHandlerVersion 1.0 string

Paramètres

Nom Valeur/Exemple Type de données
protocol http ou https ou tcp string
port Facultatif si le protocole est http ou https, obligatoire si le protocole est tcp int
requestPath Obligatoire si le protocole est http ou https, non autorisé si le protocole est tcp string
intervalInSeconds Facultatif. La valeur par défaut est 5 secondes. Il s’agit de l’intervalle entre chaque sonde 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. int
numberOfProbes Facultatif. La valeur par défaut est 1. Il s’agit du nombre de sondes consécutives requises pour que l’état d’intégrité change. Par exemple, si numberOfProbles == 3, vous aurez besoin de 3 signaux consécutifs « Sain » pour changer l’état d’intégrité de « Non sain » en état « Sain ». La même exigence s’applique à la modification de l’état d’intégrité en état « Non sain ». int

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 d’intégrité TCP sont également prises en charge, mais elles ne peuvent pas définir ApplicationHealthState par le biais du corps de réponse de la sonde d’intégrité et elles n’ont pas accès à l’état Inconnu.

{
  "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
publisher Microsoft.ManagedServices string
type ApplicationHealthLinux (Linux), ApplicationHealthWindows (Windows) string
typeHandlerVersion 2.0 string

Paramètres

Nom Valeur/Exemple Type de données
protocol http ou https ou tcp string
port Facultatif si le protocole est http ou https, obligatoire si le protocole est tcp int
requestPath Obligatoire si le protocole est http ou https, non autorisé si le protocole est tcp string
intervalInSeconds Facultatif. La valeur par défaut est 5 secondes. Il s’agit de l’intervalle entre chaque sonde 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. int
numberOfProbes Facultatif. La valeur par défaut est 1. Il s’agit du nombre de sondes consécutives requises pour que l’état d’intégrité change. Par exemple, si numberOfProbles == 3, vous aurez besoin de 3 signaux consécutifs « Sain » pour changer l’état d’intégrité de « Non sain / Inconnu » en état « Sain ». La même exigence s’applique à la modification de l’état d’intégrité en état « Non sain » ou « Inconnu ». int
gracePeriod Facultatif. Valeur par défaut = intervalInSeconds * numberOfProbes. La période de grâce maximale s’élève à 7 200 secondes. int

Déployer l’extension Intégrité de l’application

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.

Binary Health States

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": ["*"]
}

Rich Health States

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 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": ["*"]
}

Dépanner

Voir VMHealth – instance unique

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

Voir VMHealth – appel de lot

Cette option est uniquement disponible pour les groupes de machines virtuelles identiques 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 de machines virtuelles identiques.