Usando l'estensione Integrità applicazione con le macchine virtuali di Microsoft Azure
Il monitoraggio dell'integrità dell'applicazione è un segnale importante per la gestione delle macchine virtuali. Macchine virtuali di Azure offre supporto per l'applicazione automatica di patch guest alle macchine virtuali, che si basano sul monitoraggio dell'integrità delle singole istanze per aggiornare in modo sicuro le macchine virtuali.
Questo articolo descrive come usare i due tipi di estensione Integrità applicazione, Stati di integrità binaria o Stati di integrità avanzata, per monitorare l'integrità delle applicazioni distribuite nelle macchine virtuali di Microsoft Azure.
Il monitoraggio dell'integrità delle applicazioni è disponibile anche nei set di scalabilità di macchine virtuali e consente di abilitare funzionalità come aggiornamenti in sequenza, aggiornamenti automatici delle immagini del sistema operativo eriparazioni automatiche delle istanze. Per sperimentare queste funzionalità con i vantaggi aggiuntivi di scalabilità, disponibilità e flessibilità nei set di scalabilità, è possibile collegare la macchina virtuale a un set di scalabilità esistente o creare un nuovo set di scalabilità.
Prerequisiti
Questo articolo presuppone che si abbia familiarità con le estensioni delle macchine virtuali di Azure.
Attenzione
L'estensione integrità dell'applicazione prevede di ricevere una risposta di probe 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à trasmesse a un endpoint locale.
Quando usare l'estensione Integrità applicazione
L'Estensione sull'integrità dell'applicazione segnala l'integrità dell'applicazione dall'interno della macchina virtuale. L'estensione ricerca in un endpoint dell'applicazione locale e aggiorna lo stato di integrità in base alle risposte TCP/HTTP(S) ricevute dall'applicazione. Questo stato di integrità viene usato da Azure per monitorare e rilevare gli errori di applicazione di patch durante l'applicazione automatica di patch guest alle macchine virtuali.
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.
Integrità dell'applicazione è un segnale fornito dal cliente sullo stato dell'applicazione in esecuzione all'interno della macchina virtuale. L'integrità delle applicazioni è diversa dall'integrità delle risorse, ovvero un segnale fornito dalla piattaforma usato per segnalare gli eventi a livello di servizio che influisce sulle prestazioni della macchina virtuale.
Stati di integrità binaria e di integrità avanzata
Le estensioni dell'integrità dell'applicazione sono disponibili due opzioni: Stati di integrità binaria e Stati di integrità avanzata. La tabella seguente evidenzia alcune differenze principali tra le due opzioni. Per indicazioni generali, vedere la fine di questa sezione.
Funzionalità | Stati di integrità binaria | Stati di integrità avanzata |
---|---|---|
Stati di integrità disponibili | Due stati disponibili: Integro, Non integro | Quattro stati disponibili: Integro, Non integro, Inizializzazione, Sconosciuto1 |
Invio di segnali di integrità | I segnali di integrità vengono inviati tramite codici di risposta HTTP/HTTPS o connessioni TCP. | I segnali di integrità nel protocollo HTTP/HTTPS vengono inviati tramite il codice di risposta del probe e il corpo della risposta. I segnali di integrità tramite il protocollo TCP rimangono invariati rispetto agli stati di integrità binaria. |
Identificazione di istanze Non integre | Le istanze hanno automaticamente lo stato Non integro se un segnale Integro non viene ricevuto dall'applicazione. Un'istanza Non integra può indicare un problema con la configurazione dell'estensione (ad esempio, endpoint non raggiungibile) o un problema con l'applicazione (ad esempio, codice di stato non 200). | Le istanze passano a uno stato Non integro solo se l'applicazione genera una risposta probe 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 del probe di integrità non valide rientrano nello stato Sconosciuto2. |
Lo stato Inizializzazione per le istanze appena create | Lo stato 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 visualizzare lo stato di integrità come Integro, Non integro oSconosciuto. |
Protocollo HTTP/HTTPS | Supportata | Supportata |
Protocollo TCP | Supportata | Supporto limitato: lo stato Sconosciuto non è disponibile nel protocollo TCP. Per i comportamenti dello stato di integrità su TCP, vedere la tabella dei protocolli Stati di integrità avanzata. |
1 Lo stato Sconosciuto non è disponibile nel protocollo TCP. 2 Applicabili solo per i protocolli HTTP/HTTPS. Il protocollo TCP segue lo stesso processo di identificazione delle istanze Non integre di in Stati di integrità binaria.
Usa Stati di integrità binaria 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
Usa Stati di integrità avanzata 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 vuole impostare un periodo di tolleranza di Inizializzazione che consente alle istanze appena create di stabilirsi in uno stato di integrità stabile
Stati di integrità binaria
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à.
HTTP/HTTPS Protocol
Protocollo | Stato di integrità | Descrizione |
---|---|---|
http/https | Healthy | Per inviare un segnale Integro, l'applicazione dovrebbe restituire un codice di risposta 200. |
http/https | Unhealthy | L'istanza viene contrassegnata come Non integra se un codice di risposta 200 non viene ricevuto dall'applicazione. |
Protocollo TCP
Protocollo | Stato di integrità | Descrizione |
---|---|---|
TCP | Healthy | Per inviare un segnale Integro, è necessario creare un handshake con l'endpoint dell'applicazione fornito. |
TCP | Unhealthy | L'istanza viene contrassegnata come Non integra se si è verificato un handshake non riuscito o incompleto con l'endpoint dell'applicazione specificato. |
Alcuni scenari comuni che comportano uno stato Non integro includono:
- Quando l'endpoint dell'applicazione restituisce un codice di stato diverso da 200
- Quando non è configurato alcun endpoint applicazione all'interno della macchina virtuale per fornire lo stato di integrità dell'applicazione
- Quando l'endpoint dell'applicazione non è configurato correttamente
- Quando l'endpoint dell'applicazione non è raggiungibile
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à.
HTTP/HTTPS Protocol
Protocollo | Stato di integrità | Descrizione |
---|---|---|
http/https | Healthy | 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 | Unhealthy | Per inviare un segnale Non integro, è previsto che l'applicazione restituisca una risposta probe con: Codice risposta probe: Stato 2xx, Corpo di risposta probe: {"ApplicationHealthState": "Unhealthy"} |
http/https | Inizializzazione in corso | L'istanza immette automaticamente uno stato Inizializzazione all'ora di inizio dell'estensione. Per altre informazioni, vedere stato Inizializzazione. |
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 per 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 integrità | Descrizione |
---|---|---|
TCP | Healthy | Per inviare un segnale Integro, è necessario creare un handshake con l'endpoint dell'applicazione fornito. |
TCP | Unhealthy | L'istanza viene contrassegnata come Non integra se si è verificato un handshake non riuscito o incompleto con l'endpoint dell'applicazione specificato. |
TCP | Inizializzazione in corso | L'istanza immette automaticamente uno stato Inizializzazione all'ora di inizio dell'estensione. Per altre informazioni, vedere stato Inizializzazione. |
Inizializzazione dello stato
Questo stato si applica solo a Stati di integrità avanzata. Lo stato Inizializzazione si verifica una sola volta all'ora di inizio dell'estensione e può essere configurato dalle impostazioni dell'estensione gracePeriod
e numberOfProbes
.
All'avvio dell'estensione, l'integrità dell'applicazione rimane 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 Inizializzazione e allo stato di integrità segnalato (Integro o Non integro).
Esempio
Se numberOfProbes
= 3, significa:
- Per passare da Inizializzazione allo integro: l'estensione integrità dell'applicazione deve ricevere tre segnali integriconsecutivi tramite HTTP/HTTPS o protocollo TCP
- Per passare da Inizializzazione a Non integro: l'estensione integrità dell'applicazione deve ricevere tre segnali non Integri consecutivi tramite HTTP/HTTPS o protocollo TCP
Se l'oggetto gracePeriod
scade prima che venga segnalato uno stato di integrità consecutivo dall'applicazione, l'integrità dell'istanza viene determinata nel modo seguente:
- Protocollo HTTP/HTTPS: l'integrità dell'applicazione passa da Inizializzazione a Sconosciuto
- Protocollo TCP: l'integrità dell'applicazione passa da Inizializzazione a Non integro
Stato Sconosciuto
Lo stato Sconosciuto si applica solo a Stati di integrità avanzata. Questo stato 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 probe
- 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
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 o versioni successive |
data |
publisher | Microsoft.ManagedServices |
string |
type | ApplicationHealthLinux (Linux), ApplicationHealthWindows (Windows) |
string |
typeHandlerVersion | 1.0 |
string |
Impostazione
Nome | Valore/Esempio | Tipo di dati |
---|---|---|
protocollo | http o https o tcp |
string |
port | 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. Questa impostazione è l'intervallo tra ogni probe di integrità. Ad esempio, se intervalInSeconds == 5, un probe viene inviato all'endpoint dell'applicazione locale una volta ogni 5 secondi. | int |
numberOfProbes | Facoltativa, il valore predefinito è 1. Questa impostazione è il numero di probe consecutivi necessari per modificare lo stato di integrità. 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 per modificare lo stato di integrità in stato "Non integro". | int |
Schema dell'estensione per stati di integrità avanzati
Il codice JSON seguente illustra lo schema per l'estensione Sati di integrità avanzata. L'estensione richiede almeno una richiesta "http" o "https" con una porta associata o un percorso di richiesta, rispettivamente. I probe TCP sono supportati, ma non possono impostare ApplicationHealthState
tramite il corpo della risposta del probe e non hanno 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 o versioni successive |
data |
publisher | Microsoft.ManagedServices |
string |
type | ApplicationHealthLinux (Linux), ApplicationHealthWindows (Windows) |
string |
typeHandlerVersion | 2.0 |
string |
Impostazione
Nome | Valore/Esempio | Tipo di dati |
---|---|---|
protocollo | http o https o tcp |
string |
port | 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. Questa impostazione è l'intervallo tra ogni probe di integrità. Ad esempio, se intervalInSeconds == 5, un probe viene inviato all'endpoint dell'applicazione locale una volta ogni 5 secondi. | int |
numberOfProbes | Facoltativa, il valore predefinito è 1. Questa impostazione è il numero di probe consecutivi necessari per modificare lo stato di integrità. Ad esempio, se numberOfProbles == 3, saranno necessari 3 segnali "Integri" consecutivi per modificare lo stato di integrità da "Unhealthy"/"Unknown" allo stato "Integro". Lo stesso requisito si applica per modificare lo stato di integrità in stato "Non integro" o "Sconosciuto". | int |
gracePeriod | Facoltativo, valore predefinito = intervalInSeconds * numberOfProbes ; il periodo di tolleranza massimo è di 7200 secondi |
int |
Distribuire l'estensione Integrità applicazione
Esistono diversi modi per distribuire l'estensione Integrità applicazione nelle macchine virtuali, come descritto in dettaglio negli esempi seguenti.
Stati di integrità binaria
L'esempio seguente aggiunge l'estensione Integrità applicazione denominata myHealthExtension a una macchina virtuale basata su Windows.
È anche possibile usare questo esempio per modificare un'estensione esistente da Stati integrità avanzata a Integrità binaria effettuando una chiamata PATCH anziché put.
PUT on `/subscriptions/subscription_id/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVM/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.
Stati di integrità avanzata
L'esempio seguente aggiunge l'estensione Integrità applicazione - Stati avanzati (con nome myHealthExtension) a una macchina virtuale basata 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/virtualMachines/myVM/extensions/myHealthExtension?api-version=2018-10-01`
{
"name": "myHealthExtension",
"location": "<location>",
"properties": {
"publisher": "Microsoft.ManagedServices",
"type": "ApplicationHealthWindows",
"autoUpgradeMinorVersion": true,
"typeHandlerVersion": "2.0",
"settings": {
"requestPath": "</requestPath>",
"intervalInSeconds": <intervalInSeconds>,
"numberOfProbes": <numberOfProbes>,
"gracePeriod": <gracePeriod>
}
}
}
Usare PATCH
per modificare un'estensione già distribuita.
Risoluzione dei problemi
Serve aiuto per la configurazione di una risposta probe
Vedere esempi di integrità dell'applicazione per esempi di risposte al probe di integrità trasmesse a un endpoint locale.
Visualizzare VMHealth
GET https://management.azure.com/subscriptions/{subscription-id}/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVM/instanceView?api-version=2023-07-01
Risposta di esempio (vedere l'oggetto "vmHealth" per lo stato di integrità della macchina virtuale più recente)
"vmHealth": {
"status": {
"code": "HealthState/unknown",
"level": "Warning",
"displayStatus": "The VM health is unknown",
"time": "2023-12-04T22:25:39+00:00"
}
}
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.