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:

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).

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 opeenvolgendesignalen 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 beschadigdesignalen 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
Publisher Microsoft.ManagedServices tekenreeks
type ApplicationHealthLinux (Linux), ApplicationHealthWindows (Windows) tekenreeks
typeHandlerVersion 1.0 tekenreeks

Instellingen

Naam Waarde/voorbeeld Gegevenstype
protocol httpof httpstcp tekenreeks
poort Optioneel wanneer protocol is http of https, verplicht wanneer protocol is tcp int
requestPath Verplicht wanneer protocol is http of httpsniet 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
Publisher Microsoft.ManagedServices tekenreeks
type ApplicationHealthLinux (Linux), ApplicationHealthWindows (Windows) tekenreeks
typeHandlerVersion 2.0 tekenreeks

Instellingen

Naam Waarde/voorbeeld Gegevenstype
protocol httpof httpstcp tekenreeks
poort Optioneel wanneer protocol is http of https, verplicht wanneer protocol is tcp int
requestPath Verplicht wanneer protocol is http of httpsniet 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

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.