Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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
gracePeriodexpire.
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
ApplicationHealthStatedans 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.