Delen via


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