Uso dell'estensione Integrità applicazione con i set di scalabilità di macchine virtuali di Azure

Il monitoraggio dell'integrità delle applicazioni è un elemento importante per la gestione e l'aggiornamento della distribuzione. I set di scalabilità delle macchine virtuali Azure forniscono supporto per gli aggiornamenti a rotazione, inclusi gli aggiornamenti automatici OS-Image e l'applicazione automatica di patch guest per le macchine virtuali, basandosi sul monitoraggio dell'integrità delle singole istanze per aggiornare la distribuzione. È anche possibile usare l'estensione dell'integrità dell'applicazione per monitorare l'integrità dell'applicazione di ogni istanza nel set di scalabilità ed eseguire riparazioni di istanze usando riparazioni automatiche dell'istanza.

Questo articolo descrive come utilizzare i due tipi di estensione Salute Applicativa, gli Stati di Salute Binari o gli Stati di Salute Ricchi, per monitorare la salute delle applicazioni distribuite nei set di scalabilità di macchine virtuali.

Prerequisiti

Questo articolo presuppone che l'utente abbia familiarità con gli argomento seguenti:

  • Estensioni per macchine virtuali di Azure
  • Modifica dei set di scalabilità di macchine virtuali

Attenzione

L'estensione integrità dell'applicazione prevede di ricevere una risposta della sonda coerente alla porta tcp configurata o al percorso http/https della richiesta per etichettare una macchina virtuale come integra. Se non è in esecuzione alcuna applicazione nella macchina virtuale o non è possibile configurare una risposta probe, la macchina virtuale verrà visualizzata come Non integra (stati di integrità binaria) o Sconosciuto (Stati di integrità avanzata). Vedere esempi di integrità dell'applicazione per esempi di risposte al probe di integrità generate a un endpoint locale.

Nota

È possibile usare solo un'origine di monitoraggio dell'integrità per un set di scalabilità di macchine virtuali, ovvero un'estensione Integrità dell'applicazione o un probe di integrità. Se sono abilitate entrambe le opzioni, sarà necessario rimuoverle prima di usare servizi di orchestrazione come Riparazioni istanza o Aggiornamenti automatici del sistema operativo.

Quando usare l'estensione Integrità dell'applicazione

L'estensione Integrità applicazione viene distribuita in un'istanza di un set di scalabilità di macchine virtuali e segnala l'integrità dell'applicazione dall'interno dell'istanza di set di scalabilità. L'estensione esegue probe su un endpoint dell'applicazione locale e aggiornerà lo stato di integrità in base alle risposte TCP/HTTP(S) ricevute dall'applicazione. Questo stato di integrità viene usato da Azure per avviare le riparazioni su istanze non integre e per determinare se un'istanza è idonea per le operazioni di aggiornamento.

L'estensione segnala l'integrità dall'interno di una macchina virtuale e può essere usata in situazioni in cui non è possibile usare un probe esterno, ad esempio i probe di integrità di Azure Load Balancer.

Stati di integrità binaria e di integrità avanzata

Le estensioni dell'integrità dell'applicazione offrono due opzioni: Stati di integrità binari e Stati di integrità arricchiti. La tabella seguente evidenzia alcune differenze principali tra le due opzioni. Per indicazioni generali, vedere la fine di questa sezione.

Funzionalità Stati di salute binari Stati di integrità avanzata
Stati di salute disponibili Due stati disponibili: Integro, Non integro Quattro stati disponibili: Integro, Non integro, Inizializzazione, Sconosciuto1
Invio di segnali di integrità I segnali di stato vengono inviati mediante codici di risposta HTTP/HTTPS o connessioni TCP. I segnali di integrità sul protocollo HTTP/HTTPS vengono inviati tramite il codice di risposta della sonda e il corpo della risposta. Gli indicatori di integrità mediante il protocollo TCP rimangono invariati rispetto a quelli degli stati di integrità binari.
Identificazione di istanze malfunzionanti Le istanze passeranno automaticamente allo stato Non salutare se dall'applicazione non viene ricevuto un segnale Salutare. Un'istanza non salutare può indicare un problema con la configurazione dell'estensione (ad esempio, endpoint irraggiungibile) o un problema con l'applicazione (ad esempio, un codice di stato diverso da 200). Le istanze passeranno a uno stato Non integro solo se l'applicazione genera una risposta sonda Non integra. Gli utenti sono responsabili dell'implementazione della logica personalizzata per identificare e contrassegnare le istanze con applicazioni non integre2. Le istanze con impostazioni di estensione non corrette (ad esempio, endpoint non raggiungibile) o risposte non valide della sonda di integrità risulteranno nello stato Sconosciuto2.
Inizializzazione dello stato per le istanze appena create Stato di Inizializzazione non è disponibile. Le istanze appena create potrebbero richiedere del tempo prima di stabilirsi in uno stato stabile. L'inizializzazione dello stato consente alle istanze appena create di stabilirsi in uno stato di integrità costante prima di rendere l'istanza idonea per gli aggiornamenti in sequenza o le operazioni di ripristino delle istanze.
Protocollo HTTP/HTTPS Supportato Supportato
Protocollo TCP Supportato Supporto limitato: lo stato sconosciuto non è disponibile nel protocollo TCP. Per i comportamenti dello stato di salute su TCP, vedere la tabella del protocollo Rich Health States.

1 Lo stato Sconosciuto non è disponibile nel protocollo TCP. 2 Applicabile solo per il protocollo HTTP/HTTPS. Il protocollo TCP seguirà lo stesso processo di identificazione delle istanze malfunzionanti come negli Stati di integrità binari.

In generale, è consigliabile usare Rich Health States se:

  • I segnali di integrità vengono inviati tramite il protocollo HTTP/HTTPS e possono inviare informazioni sull'integrità tramite il corpo della risposta del probe
  • Si vuole usare la logica personalizzata per identificare e contrassegnare le istanze non integre
  • Si desidera impostare un periodo di tolleranza di inizializzazione per le istanze appena create, in modo che raggiungano uno stato di integrità stabile prima di rendere l'istanza idonea per l'aggiornamento graduale o la riparazione delle istanze.
  • Si è interessati ad avere un maggiore controllo sulla procedura di ordinamento e aggiornamento con aggiornamenti progressivi, creando metriche personalizzate

È consigliabile usare gli stati di integrità binari se:

  • Non si è interessati alla configurazione della logica personalizzata per identificare e contrassegnare un'istanza non integra
  • Non è necessario un periodo di tolleranza di Inizializzazione per le istanze appena create
  • Non è necessario usare metriche personalizzate quando si esegue un aggiornamento in sequenza nelle macchine virtuali

Stati di integrità avanzata

La segnalazione degli stati di integrità avanzata contiene quattro stati di integrità, Inizializzazione, Integro, Non integro e Sconosciuto. Le tabelle seguenti forniscono una breve descrizione della configurazione di ogni stato di integrità.

Protocollo HTTP/HTTPS

Protocollo Stato di salute Descrizione
http/https Sano Per inviare un segnale Integro, l'applicazione dovrebbe restituire una risposta probe con: Codice di risposta probe: Stato 2xx, Corpo di risposta probe: {"ApplicationHealthState": "Healthy"}
http/https Non salutare Per inviare un segnale non salutare, è previsto che l'applicazione restituisca una risposta sonda con: Codice risposta sonda: Stato 2xx, Corpo risposta sonda: {"ApplicationHealthState": "Unhealthy"}
http/https Inizializzazione... L'istanza immette automaticamente uno stato di inizializzazione all'ora di inizio dell'estensione. Per altre informazioni, vedere Inizializzazione dello stato.
http/https Sconosciuto Uno stato Sconosciuto può verificarsi negli scenari seguenti: quando un codice di stato non 2xx viene restituito dall'applicazione, quando si verifica il timeout della richiesta probe, quando l'endpoint dell'applicazione non è raggiungibile o configurato in modo non corretto, quando nel corpo della risposta viene fornito ApplicationHealthState un valore mancante o non valido o quando scade il periodo di tolleranza. Per altre informazioni, vedere Stato sconosciuto.

Protocollo TCP

Protocollo Stato di salute Descrizione
TCP Sano Per inviare un segnale Integro, è necessario creare un handshake con l'endpoint dell'applicazione fornito.
TCP Non salutare L'istanza verrà contrassegnata come Non integra se si è verificato un handshake non riuscito o incompleto con l'endpoint dell'applicazione specificato.
TCP Inizializzazione... L'istanza immette automaticamente uno stato di inizializzazione all'ora di inizio dell'estensione. Per altre informazioni, vedere Inizializzazione dello stato.

Inizializzazione dello stato

Questo stato si applica solo a Stati di integrità avanzata. Lo stato di inizializzazione si verifica una sola volta all'ora di inizio dell'estensione e può essere configurato dalle impostazioni gracePeriod dell'estensione e numberOfProbes.

All'avvio dell'estensione, l'integrità dell'applicazione rimarrà nello stato Inizializzazione fino a quando non si verifica uno dei due scenari seguenti:

  • Lo stesso stato di integrità (integro o non integro) viene segnalato un numero consecutivo di volte come configurato tramite numberOfProbes
  • gracePeriod scade

Se lo stesso stato di integrità (integro o non integro) viene segnalato consecutivamente, l'integrità dell'applicazione passerà dallo stato di inizializzazione e allo stato di integrità segnalato (integro o non integro).

Esempio

Se numberOfProbes = 3, significa:

  • Per passare dall'inizializzazione allo stato di salute: l'estensione della salute dell'applicazione deve ricevere tre segnali di salute consecutivi tramite HTTP/HTTPS o protocollo TCP
  • Per passare dallo stato di inizializzazione a quello non funzionante, l'estensione di integrità dell'applicazione deve ricevere tre segnali consecutivi di non funzionante tramite il protocollo HTTP/HTTPS o TCP.

Se gracePeriod scade prima che l'applicazione segnali uno stato di integrità consecutivo, l'integrità dell'istanza verrà determinata come segue:

  • Protocollo HTTP/HTTPS: lo stato di salute dell'applicazione passerà dall'Inizializzazione a Sconosciuto
  • Protocollo TCP: lo stato di salute dell'applicazione passerà da Inizializzazione a Non salutare

Stato sconosciuto

Questo stato si applica solo a Stati di integrità avanzata. Lo stato Sconosciuto viene segnalato solo per i probe "http" o "https" e si verifica negli scenari seguenti:

  • Quando un codice di stato non 2xx viene restituito dall'applicazione
  • Quando si verifica il timeout della richiesta della sonda
  • Quando l'endpoint dell'applicazione non è raggiungibile o configurato in modo non corretto
  • Quando viene specificato un valore mancante o non valido per ApplicationHealthState nel corpo della risposta
  • Quando scade il periodo di tolleranza

Un'istanza in uno stato Sconosciuto viene trattata in modo simile a un'istanza non sana. Se abilitata, le riparazioni dell'istanza verranno eseguite in un'istanza sconosciuta mentre gli aggiornamenti in sequenza verranno sospesi fino a quando l'istanza non rientra in uno stato Integro .

La tabella seguente illustra l'interpretazione dello stato di integrità per gli aggiornamenti in sequenza e le riparazioni di istanze:

Stato di salute Interpretazione dell'aggiornamento progressivo Trigger di riparazione dell'istanza
Inizializzazione... Attendere che lo stato sia integro, non integro o sconosciuto NO
Sano Sano NO
Non salutare Non salutare
Sconosciuto Non salutare

Schema dell'estensione per stati di integrità avanzati

Il seguente codice JSON mostra lo schema dell'estensione Rich Health States. L'estensione richiede almeno una richiesta "http" o "https" con una porta associata o un percorso di richiesta, rispettivamente. Le sonde TCP sono supportate, ma non potranno impostare il ApplicationHealthState tramite il corpo della risposta della sonda e non avranno accesso allo stato Sconosciuto.

{
  "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
          }
        }
      }
    ]
  }
} 

Valori delle proprietà

Nome Valore/Esempio Tipo di dati
apiVersion 2018-10-01 data
publisher Microsoft.ManagedServices string
tipo ApplicationHealthLinux (Linux), ApplicationHealthWindows (Windows) string
typeHandlerVersion 2.0 string

Impostazione

Nome Valore/Esempio Tipo di dati
protocollo http o https o tcp string
porto Facoltativo se il protocollo è http o https, obbligatorio se il protocollo è tcp INT
requestPath Obbligatorio se il protocollo è http o https, non consentito se il protocollo è tcp string
intervalInSeconds Facoltativo, il valore predefinito è 5 secondi. Questo è l'intervallo tra ogni sonda di integrità. Ad esempio, se intervalInSeconds == 5, un probe verrà inviato all'endpoint dell'applicazione locale una volta ogni 5 secondi. Il valore minimo è 5 secondi, massimo è 60 secondi. INT
numberOfProbes Facoltativa, il valore predefinito è 1. Questo è il numero di probe consecutive necessario affinché lo stato di salute cambi. Ad esempio, se numberOfProbles == 3, saranno necessari 3 segnali consecutivi "Sano" per cambiare lo stato di salute da "Non sano"/"Sconosciuto" in "Sano". Lo stesso requisito si applica alla modifica dello stato di integrità nello stato "Non integro" o "Sconosciuto". Il valore minimo è 1 probe, massimo 24 probe. INT
periodo di grazia Facoltativo, valore predefinito = intervalInSeconds * numberOfProbes; il periodo di tolleranza massimo è 14400 secondi INT

Stati di salute binari

La segnalazione dello stato di integrità binaria contiene due stati di integrità, Integro e Non integro. Le tabelle seguenti forniscono una breve descrizione della configurazione degli stati di integrità.

Protocollo HTTP/HTTPS

Protocollo Stato di salute Descrizione
http/https Sano Per inviare un segnale Integro, l'applicazione ci si aspetta che restituisca un codice di risposta 200.
http/https Non salutare L'istanza verrà contrassegnata come non salutare se un codice di risposta 200 non viene ricevuto dall'applicazione.

Protocollo TCP

Protocollo Stato di salute Descrizione
TCP Sano Per inviare un segnale Integro, è necessario creare un handshake con l'endpoint dell'applicazione fornito.
TCP Non salutare L'istanza verrà contrassegnata come Non integra se si è verificato un handshake non riuscito o incompleto con l'endpoint dell'applicazione specificato.

Alcuni scenari che possono causare uno stato non integro includono:

  • Quando l'endpoint dell'applicazione restituisce un codice di stato diverso da 200
  • Quando non è configurato alcun endpoint dell'applicazione nelle istanze di macchina virtuale che fornisca lo stato di integrità dell'applicazione
  • Quando l'endpoint dell'applicazione non è configurato correttamente
  • Quando l'endpoint dell'applicazione non è raggiungibile

Schema dell'estensione per gli stati di integrità binaria

Il codice JSON riportato di seguito mostra lo schema dell'estensione Integrità applicazione. L'estensione richiede almeno una richiesta "tcp", "http"o "https" con una porta associata o un percorso di richiesta, rispettivamente.

{
  "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
          }
        }
      }
    ]
  }
} 

Valori delle proprietà

Nome Valore/Esempio Tipo di dati
apiVersion 2018-10-01 data
publisher Microsoft.ManagedServices string
tipo ApplicationHealthLinux (Linux), ApplicationHealthWindows (Windows) string
typeHandlerVersion 1.0 string

Impostazione

Nome Valore/Esempio Tipo di dati
protocollo http o https o tcp string
porto Facoltativo se il protocollo è http o https, obbligatorio se il protocollo è tcp INT
requestPath Obbligatorio se il protocollo è http o https, non consentito se il protocollo è tcp string
intervalInSeconds Facoltativo, il valore predefinito è 5 secondi. Questo è l'intervallo tra ogni sonda di integrità. Ad esempio, se intervalInSeconds == 5, un probe verrà inviato all'endpoint dell'applicazione locale una volta ogni 5 secondi. Il valore minimo è 5 secondi, massimo è 60 secondi. INT
numberOfProbes Facoltativa, il valore predefinito è 1. Questo è il numero di probe consecutive necessario affinché lo stato di salute cambi. Ad esempio, se numberOfProbles == 3, saranno necessari 3 segnali "Integri" consecutivi per modificare lo stato di integrità da "Non integro" allo stato "Integro". Lo stesso requisito si applica anche alla modifica dello stato di integrità in "Non integro". Il valore minimo è 1 probe, massimo 24 probe. INT

Distribuisci l'estensione Application Health

Esistono diversi modi per distribuire l'estensione Integrità applicazione nei set di scalabilità, come descritto in dettaglio nei seguenti esempi.

Stati di integrità avanzata

L'esempio seguente aggiunge l'estensione Integrità applicazione: stati arricchiti (denominata myHealthExtension) a extensionProfile nel modello di set di scalabilità di un set di scalabilità basato su Windows.

È anche possibile usare questo esempio per aggiornare un'estensione esistente da Binary a Rich Health States effettuando una chiamata PATCH anziché 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>
    }
  }
}

Usare PATCH per modificare un'estensione già distribuita.

Aggiornare le macchine virtuali per installare l'estensione.

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

Stati di salute binari

L'esempio seguente aggiunge l'estensione Integrità applicazione (denominata myHealthExtension) a extensionProfile nel modello di set di scalabilità di un set di scalabilità basato su Windows.

Puoi anche usare questo esempio per cambiare un'estensione esistente da Rich Health State a Binary Health eseguendo una chiamata PATCH invece di una 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>"
    }
  }
}

Usare PATCH per modificare un'estensione già distribuita.

Aggiornare le macchine virtuali per installare l'estensione.

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

Risoluzione dei problemi

Serve aiuto per configurare una risposta della sonda

Vedere esempi di integrità dell'applicazione per esempi di risposte al probe di integrità generate a un endpoint locale.

Visualizzare VMHealth - istanza singola

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

Visualizza VMHealth – chiamata in batch

Questa opzione è disponibile solo per i set di scalabilità di macchine virtuali con orchestrazione uniforme.

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

Lo stato di salute non viene visualizzato

Se lo stato di integrità non viene visualizzato nel portale di Azure o tramite chiamata GET, verificare che la macchina virtuale venga aggiornata al modello più recente. Se la macchina virtuale non è nel modello più recente, aggiornare la macchina virtuale e lo stato di integrità verrà visualizzato.

Log di output dell'esecuzione dell'estensione

L'output dell'esecuzione dell'estensione viene registrato nei file presenti nelle directory seguenti:

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

I log inoltre acquisiscono periodicamente lo stato di integrità dell'applicazione.

Passaggi successivi

Informazioni su come distribuire l'applicazione nei set di scalabilità di macchine virtuali.