Application Health-extensie gebruiken met Azure Virtual Machines
Het bewaken van de status van uw toepassing is een belangrijk signaal voor het beheren van uw VM's. Azure Virtual Machines biedt ondersteuning voor automatische VM-gastpatching, die afhankelijk is van statuscontrole van de afzonderlijke exemplaren om uw VM's veilig bij te werken.
In dit artikel wordt beschreven hoe u de twee typen Application Health-extensie, Binaire statusstatusstatussen of Uitgebreide statusstatussen kunt gebruiken om de status van uw toepassingen te bewaken die zijn geïmplementeerd op virtuele Azure-machines.
Statuscontrole van toepassingen is ook beschikbaar op virtuele-machineschaalsets en helpt functies zoals Rolling Upgrades, Automatische upgrades van os-installatiekopieën en automatische exemplaarreparaties mogelijk te maken. Als u deze mogelijkheden wilt ervaren met de extra voordelen van schaal, beschikbaarheid en flexibiliteit voor schaalsets, kunt u uw VIRTUELE machine koppelen aan een bestaande schaalset of een nieuwe schaalset maken.
Vereisten
In dit artikel wordt ervan uitgegaan dat u bekend bent met extensies voor virtuele Azure-machines.
Let op
De toepassingsstatusextensie verwacht een consistent testantwoord te ontvangen op de geconfigureerde poort tcp
of aanvraagpad http/https
om een VIRTUELE machine als in orde te labelen. Als er geen toepassing wordt uitgevoerd op de virtuele machine of als u geen testreactie kunt configureren, wordt uw VM weergegeven als Beschadigd (Binaire statusstatus) of Onbekend (Uitgebreide statusstatussen). Zie voorbeelden van toepassingsstatus voor voorbeelden van statustestantwoorden die worden verzonden naar een lokaal eindpunt.
Wanneer gebruikt u de Application Health-extensie
Application Health Extension rapporteert over de toepassingsstatus vanuit de virtuele machine. De extensie test op een lokaal toepassingseindpunt en werkt de status bij op basis van TCP/HTTP(S)-antwoorden die zijn ontvangen van de toepassing. Deze status wordt door Azure gebruikt voor het bewaken en detecteren van patchfouten tijdens automatische VM-gastpatching.
De extensie rapporteert de status van een VIRTUELE machine en kan worden gebruikt in situaties waarin een externe test, zoals de Statustests van Azure Load Balancer, niet kan worden gebruikt.
Toepassingsstatus is een door de klant verstrekt signaal over de status van uw toepassing die wordt uitgevoerd in de VIRTUELE machine. De status van de toepassing verschilt van de resourcestatus. Dit is een platformgeleverd signaal dat wordt gebruikt om gebeurtenissen op serviceniveau te rapporteren die van invloed zijn op de prestaties van uw VM.
Binair versus rijke statusstatussen
Application Health Extensions heeft twee opties beschikbaar: Binaire statusstatussen en uitgebreide statusstatussen. In de volgende tabel worden enkele belangrijke verschillen tussen de twee opties gemarkeerd. Zie het einde van deze sectie voor algemene aanbevelingen.
Functies | Binaire statusstatussen | Rijke gezondheidsstatussen |
---|---|---|
Beschikbare statusstatussen | Twee beschikbare statussen: In orde, Beschadigd | Vier beschikbare statussen: In orde, Beschadigd, Initialiseren, Onbekend1 |
Statussignalen verzenden | Statussignalen worden verzonden via HTTP/HTTPS-antwoordcodes of TCP-verbindingen. | Statussignalen op het HTTP/HTTPS-protocol worden verzonden via de antwoordcode en de antwoordtekst van de test. Statussignalen via het TCP-protocol blijven ongewijzigd ten laste van binaire statusstatussen. |
Beschadigde exemplaren identificeren | Exemplaren vallen automatisch in de status Niet in orde als er geen gezond signaal van de toepassing wordt ontvangen. Een beschadigd exemplaar kan duiden op een probleem met de extensieconfiguratie (bijvoorbeeld onbereikbaar eindpunt) of een probleem met de toepassing (bijvoorbeeld niet-200 statuscode). | Exemplaren hebben alleen de status Niet in orde als de toepassing een status Beschadigd testantwoord verzendt. Gebruikers zijn verantwoordelijk voor het implementeren van aangepaste logica voor het identificeren en markeren van exemplaren met beschadigde toepassingen2. Exemplaren met onjuiste extensie-instellingen (bijvoorbeeld een onbereikbaar eindpunt) of ongeldige statustestantwoorden vallen onder de status Onbekend 2. |
Initialisatiestatus voor nieuw gemaakte exemplaren | Initialisatiestatus is niet beschikbaar. Het kan enige tijd duren voordat nieuwe exemplaren in een stabiele toestand worden verwikkeld. | Als u de status initialiseert, kunnen nieuw gemaakte exemplaren zich in een gestage status vestigen voordat de status in orde, Beschadigd of Onbekend wordt weergegeven. |
HTTP/HTTPS-protocol | Ondersteund | Ondersteund |
TCP-protocol | Ondersteund | Beperkte ondersteuning: de status Onbekend is niet beschikbaar in het TCP-protocol. Zie de protocoltabel Rich Health States voor gedrag van statusstatussen op TCP. |
1 De status Onbekend is niet beschikbaar in het TCP-protocol. 2 Alleen van toepassing op HTTP/HTTPS-protocol. TCP-protocol volgt hetzelfde proces voor het identificeren van beschadigde exemplaren als in binaire statusstatussen.
Binaire statusstatussen gebruiken als:
- U bent niet geïnteresseerd in het configureren van aangepaste logica om een beschadigd exemplaar te identificeren en te markeren
- U hebt geen respijtperiode voor het initialiseren van nieuwe exemplaren nodig
Uitgebreide statusstatussen gebruiken als:
- U verzendt statussignalen via het HTTP/HTTPS-protocol en kan statusinformatie verzenden via de hoofdtekst van het testantwoord
- U wilt aangepaste logica gebruiken om beschadigde exemplaren te identificeren en te markeren
- U wilt een respijtperiode voor initialisatie instellen, zodat nieuw gemaakte instanties zich kunnen vereffenen in een stabiele status
Binaire statusstatussen
Binaire statusrapportage bevat twee statusstatussen, in orde en beschadigd. De volgende tabellen bevatten een korte beschrijving voor de configuratie van de statusstatussen.
HTTP/HTTPS-protocol
Protocol | Status | Beschrijving |
---|---|---|
http/https | In orde | Als u een gezond signaal wilt verzenden, wordt verwacht dat de toepassing een responscode van 200 retourneert. |
http/https | Niet in orde | Het exemplaar wordt gemarkeerd als Beschadigd als er geen 200-antwoordcode van de toepassing wordt ontvangen. |
TCP-protocol
Protocol | Status | Beschrijving |
---|---|---|
TCP | In orde | Als u een gezond signaal wilt verzenden, moet er een geslaagde handshake worden gemaakt met het opgegeven toepassingseindpunt. |
TCP | Niet in orde | Het exemplaar wordt gemarkeerd als Beschadigd als er een mislukte of onvolledige handshake is opgetreden met het opgegeven toepassingseindpunt. |
Enkele veelvoorkomende scenario's die resulteren in een slechte status zijn onder andere:
- Wanneer het toepassingseindpunt een niet-200-statuscode retourneert
- Wanneer er geen toepassingseindpunt is geconfigureerd binnen de virtuele machine om de status van de toepassing op te geven
- Wanneer het toepassingseindpunt onjuist is geconfigureerd
- Wanneer het eindpunt van de toepassing niet bereikbaar is
Rijke gezondheidsstatussen
Uitgebreide statusrapporten bevatten vier statusstatussen, initialiseren, in orde, beschadigd en onbekend. De volgende tabellen bevatten een korte beschrijving voor de configuratie van elke status.
HTTP/HTTPS-protocol
Protocol | Status | Beschrijving |
---|---|---|
http/https | In orde | Om een gezond signaal te verzenden, wordt verwacht dat de toepassing een testantwoord retourneert met: Testreactiecode: Status 2xx, Hoofdtekst van testantwoord:{"ApplicationHealthState": "Healthy"} |
http/https | Niet in orde | Als u een beschadigd signaal wilt verzenden, wordt verwacht dat de toepassing een testantwoord retourneert met: Testreactiecode: Status 2xx, Hoofdtekst van testreactie:{"ApplicationHealthState": "Unhealthy"} |
http/https | Initialiseren | Het exemplaar voert automatisch een initialisatiestatus in bij de begintijd van de extensie. Zie Initialisatiestatus voor meer informatie. |
http/https | Onbekend | Er kan een onbekende status optreden in de volgende scenario's: wanneer een niet-2xx-statuscode wordt geretourneerd door de toepassing, wanneer er een time-out optreedt voor de testaanvraag, wanneer het eindpunt van de toepassing onbereikbaar of onjuist is geconfigureerd, wanneer een ontbrekende of ongeldige waarde wordt opgegeven ApplicationHealthState in de antwoordtekst of wanneer de respijtperiode verloopt. Zie Onbekende status voor meer informatie. |
TCP-protocol
Protocol | Status | Beschrijving |
---|---|---|
TCP | In orde | Als u een gezond signaal wilt verzenden, moet er een geslaagde handshake worden gemaakt met het opgegeven toepassingseindpunt. |
TCP | Niet in orde | Het exemplaar wordt gemarkeerd als Beschadigd als er een mislukte of onvolledige handshake is opgetreden met het opgegeven toepassingseindpunt. |
TCP | Initialiseren | Het exemplaar voert automatisch een initialisatiestatus in bij de begintijd van de extensie. Zie Initialisatiestatus voor meer informatie. |
Initialisatiestatus
Deze status is alleen van toepassing op Rich Health States. De initialisatiestatus vindt slechts eenmaal plaats op de begintijd van de extensie en kan worden geconfigureerd door de extensie-instellingen gracePeriod
en numberOfProbes
.
Bij het opstarten van de extensie blijft de status van de toepassing in de initialisatiestatus totdat een van de twee scenario's plaatsvindt:
- Dezelfde status (in orde of niet in orde) wordt een opeenvolgend aantal keren gerapporteerd zoals geconfigureerd via numberOfProbes
- De
gracePeriod
vervaldatum
Als dezelfde status (in orde of niet in orde) opeenvolgend wordt gerapporteerd, verandert de status van de toepassing buiten de initialisatiestatus en in de gerapporteerde status (in orde of beschadigd).
Opmerking
Als numberOfProbes
= 3, betekent dit:
- Overstappen van initialiseren naar status In orde: De statusextensie van de toepassing moet drie opeenvolgende signalen in orde ontvangen via HTTP/HTTPS of TCP-protocol
- Als u wilt overstappen van initialiseren naar de status Niet in orde: De statusextensie van de toepassing moet drie opeenvolgende beschadigde signalen ontvangen via HTTP/HTTPS of TCP-protocol
Als de gracePeriod
status verloopt voordat een opeenvolgende status door de toepassing wordt gerapporteerd, wordt de status van het exemplaar als volgt bepaald:
- HTTP/HTTPS-protocol: de status van de toepassing gaat over van Initialiseren naar Onbekend
- TCP-protocol: de status van de toepassing gaat van initialiseren naar beschadigd
Onbekende status
De status Onbekend is alleen van toepassing op Rich Health States. Deze status wordt alleen gerapporteerd voor http
of https
tests en vindt plaats in de volgende scenario's:
- Wanneer een niet-2xx-statuscode wordt geretourneerd door de toepassing
- Wanneer er een time-out optreedt voor de testaanvraag
- Wanneer het toepassingseindpunt onbereikbaar of onjuist is geconfigureerd
- Wanneer een ontbrekende of ongeldige waarde wordt opgegeven
ApplicationHealthState
in de hoofdtekst van het antwoord - Wanneer de respijtperiode verloopt
Extensieschema voor binaire statusstatussen
De volgende JSON toont het schema voor de Application Health-extensie. De extensie vereist minimaal een TCP-, HTTP- of HTTPS-aanvraag met respectievelijk een gekoppelde poort of aanvraagpad.
{
"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
}
}
}
]
}
}
Eigenschapswaarden
Naam | Waarde/voorbeeld | Gegevenstype |
---|---|---|
apiVersion | 2018-10-01 of hoger |
datum |
uitgever | Microsoft.ManagedServices |
tekenreeks |
type | ApplicationHealthLinux (Linux), ApplicationHealthWindows (Windows) |
tekenreeks |
typeHandlerVersion | 1.0 |
tekenreeks |
Instellingen
Naam | Waarde/voorbeeld | Gegevenstype |
---|---|---|
protocol | http of https tcp |
tekenreeks |
poort | Optioneel wanneer protocol is http of https , verplicht wanneer protocol is tcp |
int |
requestPath | Verplicht wanneer protocol is http of https niet is toegestaan wanneer protocol is tcp |
tekenreeks |
intervalInSeconds | Optioneel, de standaardwaarde is 5 seconden. Deze instelling is het interval tussen elke statustest. Als intervalInSeconds == 5 bijvoorbeeld, wordt een test één keer per 5 seconden naar het eindpunt van de lokale toepassing verzonden. | int |
numberOfProbes | Optioneel, de standaardwaarde is 1. Deze instelling is het aantal opeenvolgende tests dat nodig is om de status te wijzigen. Als bijvoorbeeld numberOfProbles == 3, hebt u drie opeenvolgende "Gezonde" signalen nodig om de status van 'Beschadigd' te wijzigen in de status 'In orde'. Dezelfde vereiste is van toepassing om de status te wijzigen in de status Niet in orde. | int |
Extensieschema voor uitgebreide statusstatussen
In de volgende JSON ziet u het schema voor de extensie Rich Health States. De extensie vereist minimaal een http- of https-aanvraag met respectievelijk een gekoppeld poort- of aanvraagpad. TCP-tests worden ook ondersteund, maar kunnen de ApplicationHealthState
antwoordtekst van de test niet instellen en hebben geen toegang tot de status Onbekend .
{
"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
}
}
}
]
}
}
Eigenschapswaarden
Naam | Waarde/voorbeeld | Gegevenstype |
---|---|---|
apiVersion | 2018-10-01 of hoger |
datum |
uitgever | Microsoft.ManagedServices |
tekenreeks |
type | ApplicationHealthLinux (Linux), ApplicationHealthWindows (Windows) |
tekenreeks |
typeHandlerVersion | 2.0 |
tekenreeks |
Instellingen
Naam | Waarde/voorbeeld | Gegevenstype |
---|---|---|
protocol | http of https tcp |
tekenreeks |
poort | Optioneel wanneer protocol is http of https , verplicht wanneer protocol is tcp |
int |
requestPath | Verplicht wanneer protocol is http of https niet is toegestaan wanneer protocol is tcp |
tekenreeks |
intervalInSeconds | Optioneel, de standaardwaarde is 5 seconden. Deze instelling is het interval tussen elke statustest. Als intervalInSeconds == 5 bijvoorbeeld, wordt een test één keer per 5 seconden naar het eindpunt van de lokale toepassing verzonden. | int |
numberOfProbes | Optioneel, de standaardwaarde is 1. Deze instelling is het aantal opeenvolgende tests dat nodig is om de status te wijzigen. Als bijvoorbeeld numberOfProbles == 3, hebt u drie opeenvolgende "Gezonde" signalen nodig om de status te wijzigen van "Niet in orde"/"Onbekend" in de status 'In orde'. Dezelfde vereiste geldt voor het wijzigen van de status 'Niet in orde' of 'Onbekend'. | int |
gracePeriod | Optioneel, standaard = intervalInSeconds * numberOfProbes ; maximale respijtperiode is 7200 seconden |
int |
De toepassingsstatusextensie implementeren
Er zijn meerdere manieren om de Application Health-extensie te implementeren op uw VM's, zoals beschreven in de volgende voorbeelden.
Binaire statusstatussen
In het volgende voorbeeld wordt de Application Health-extensie met de naam myHealthExtension toegevoegd aan een virtuele Windows-machine.
U kunt dit voorbeeld ook gebruiken om een bestaande extensie te wijzigen van Rich Health States in Binary Health door een PATCH-aanroep te maken in plaats van een 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>"
}
}
}
Hiermee PATCH
kunt u een reeds geïmplementeerde extensie bewerken.
Rijke gezondheidsstatussen
In het volgende voorbeeld wordt de extensie Application Health - Rich States (met de naam myHealthExtension) toegevoegd aan een virtuele Windows-machine.
U kunt dit voorbeeld ook gebruiken om een bestaande extensie van Binary naar Rich Health States te upgraden door een PATCH-aanroep te maken in plaats van een 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>
}
}
}
Hiermee PATCH
kunt u een reeds geïmplementeerde extensie bewerken.
Problemen oplossen
Hulp nodig bij het configureren van een testantwoord
Zie voorbeelden van toepassingsstatus voor voorbeelden van statustestantwoorden die worden verzonden naar een lokaal eindpunt.
VMHealth weergeven
GET https://management.azure.com/subscriptions/{subscription-id}/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVM/instanceView?api-version=2023-07-01
Voorbeeldantwoord (zie 'vmHealth'-object voor de meest recente status van de VM)
"vmHealth": {
"status": {
"code": "HealthState/unknown",
"level": "Warning",
"displayStatus": "The VM health is unknown",
"time": "2023-12-04T22:25:39+00:00"
}
}
Uitvoerlogboek voor uitvoering van extensie
Uitvoer van extensieuitvoering wordt vastgelegd in bestanden in de volgende mappen:
C:\WindowsAzure\Logs\Plugins\Microsoft.ManagedServices.ApplicationHealthWindows\<version>\
/var/lib/waagent/Microsoft.ManagedServices.ApplicationHealthLinux-<extension_version>/status
/var/log/azure/applicationhealth-extension
De logboeken leggen ook periodiek de status van de toepassing vast.