Application Health-extensie gebruiken met Virtuele-machineschaalsets
Het bewaken van de status van uw toepassing is een belangrijk signaal voor het beheren en upgraden van uw implementatie. Azure Virtual Machine Scale Sets bieden ondersteuning voor rolling upgrades , waaronder automatische upgrades van os-installatiekopieën en automatische VM-gastpatches, die afhankelijk zijn van statuscontrole van de afzonderlijke exemplaren om uw implementatie te upgraden. U kunt ook de toepassingsstatusextensie gebruiken om de toepassingsstatus van elk exemplaar in uw schaalset te bewaken en exemplaarreparaties uit te voeren met behulp van Automatische exemplaarreparaties.
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-machineschaalsets.
Vereisten
In dit artikel wordt ervan uitgegaan dat u bekend bent met:
- Extensies voor virtuele Azure-machines
- Virtuele-machineschaalsets wijzigen
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.
Notitie
Er kan slechts één bron van statuscontrole worden gebruikt voor een virtuele-machineschaalset, een toepassingsstatusextensie of een statustest. Als u beide opties hebt ingeschakeld, moet u er een verwijderen voordat u indelingsservices zoals exemplaarreparaties of automatische besturingssysteemupgrades gebruikt.
Wanneer gebruikt u de Application Health-extensie
De toepassingsstatusextensie wordt geïmplementeerd in een exemplaar van een virtuele-machineschaalset en rapporteert de toepassingsstatus vanuit het exemplaar van de schaalset. De extensietests op een lokaal toepassingseindpunt en werken de status bij op basis van TCP/HTTP(S)-antwoorden die zijn ontvangen van de toepassing. Deze status wordt door Azure gebruikt om reparaties te starten voor beschadigde exemplaren en om te bepalen of een exemplaar in aanmerking komt voor upgradebewerkingen.
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.
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 krijgen alleen de status Niet in orde als de toepassing een antwoord van een beschadigde test 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 vereffenen in een stabiele status voordat het exemplaar in aanmerking komt voor rolling upgrades of herstelbewerkingen voor exemplaren. |
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.
Over het algemeen moet u 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
U moet Rich Health States 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 het initialiseren van nieuwe exemplaren instellen, zodat deze zich in een stabiele status bevinden voordat het exemplaar in aanmerking komt voor rolling upgrade of exemplaarreparaties
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. |
Sommige scenario's die kunnen leiden tot een slechte status zijn onder andere:
- Wanneer het toepassingseindpunt een niet-200-statuscode retourneert
- Wanneer er geen toepassingseindpunt is geconfigureerd in de exemplaren van 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, wordt de status van de toepassing overgestapt van 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 wordt overgestapt van Initialiseren naar Beschadigd
Onbekende status
Deze status is alleen van toepassing op Rich Health States. De status Onbekend 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
Een exemplaar met een onbekende status wordt behandeld als een beschadigde instantie. Indien ingeschakeld, worden exemplaarreparaties uitgevoerd op een onbekend exemplaar terwijl rolling upgrades worden onderbroken totdat het exemplaar terugvalt in de status In orde .
In de volgende tabel ziet u de interpretatie van de status van rolling upgrades en exemplaarreparaties:
Status | Interpretatie van rolling upgrade | Trigger exemplaarreparaties |
---|---|---|
Initialiseren | Wacht tot de status In orde, Beschadigd of Onbekend is | Nee |
In orde | In orde | Nee |
Niet in orde | Niet in orde | Ja |
Onbekend | Niet in orde | Ja |
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 |
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. Dit is het interval tussen elke statustest. Als intervalInSeconds == 5 bijvoorbeeld, wordt een test één keer om de 5 seconden naar het eindpunt van de lokale toepassing verzonden. | int |
numberOfProbes | Optioneel, de standaardwaarde is 1. Dit 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 |
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. Dit is het interval tussen elke statustest. Als intervalInSeconds == 5 bijvoorbeeld, wordt een test één keer om de 5 seconden naar het eindpunt van de lokale toepassing verzonden. | int |
numberOfProbes | Optioneel, de standaardwaarde is 1. Dit 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 in uw schaalsets te implementeren, zoals beschreven in de volgende voorbeelden.
Binaire statusstatussen
In het volgende voorbeeld wordt de Application Health-extensie (met de naam myHealthExtension) toegevoegd aan het extensionProfile in het schaalsetmodel van een Windows-schaalset.
U kunt dit voorbeeld ook gebruiken om een bestaande extensie te wijzigen van Rich Health State in Binary Health door een PATCH-aanroep te maken in plaats van een 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>"
}
}
}
Hiermee PATCH
kunt u een reeds geïmplementeerde extensie bewerken.
Werk de VM's bij om de extensie te installeren.
POST on `/subscriptions/<subscriptionId>/resourceGroups/<myResourceGroup>/providers/Microsoft.Compute/virtualMachineScaleSets/< myScaleSet >/manualupgrade?api-version=2022-08-01`
{
"instanceIds": ["*"]
}
Rijke gezondheidsstatussen
In het volgende voorbeeld wordt de extensie Application Health - Rich States (met naam myHealthExtension
) toegevoegd aan het extensionProfile
in het schaalsetmodel van een Windows-schaalset.
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/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>
}
}
}
Hiermee PATCH
kunt u een reeds geïmplementeerde extensie bewerken.
Werk de VM's bij om de extensie te installeren.
POST on `/subscriptions/<subscriptionId>/resourceGroups/<myResourceGroup>/providers/Microsoft.Compute/virtualMachineScaleSets/< myScaleSet >/manualupgrade?api-version=2022-08-01`
{
"instanceIds": ["*"]
}
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 - één exemplaar
Get-AzVmssVM
-InstanceView `
-ResourceGroupName <rgName> `
-VMScaleSetName <vmssName> `
-InstanceId <instanceId>
VMHealth weergeven - batchaanroep
Dit is alleen beschikbaar voor virtuele-machineschaalsets met uniform orchestration.
GET on `/subscriptions/<subscriptionID>/resourceGroups/<resourceGroupName>/providers/Microsoft.Compute/virtualMachineScaleSets/<vmssName>/virtualMachines/?api-version=2022-03-01&$expand=instanceview`
Status wordt niet weergegeven
Als de status niet wordt weergegeven in De Azure-portal of via GET-aanroep, controleert u of de VM wordt bijgewerkt naar het nieuwste model. Als de VIRTUELE machine zich niet op het meest recente model bevindt, voert u een upgrade uit van de VM en wordt de status weergegeven.
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.
Volgende stappen
Meer informatie over het implementeren van uw toepassing op virtuele-machineschaalsets.