Använda Application Health-tillägget med VM-skalningsuppsättningar

Övervakning av programmets hälsa är en viktig signal för att hantera och uppgradera distributionen. Skalningsuppsättningar för virtuella Azure-datorer har stöd för löpande uppgraderingar , inklusive automatiska os-avbildningsuppgraderingar och automatisk gästkorrigering av virtuella datorer, som förlitar sig på hälsoövervakning av de enskilda instanserna för att uppgradera distributionen. Du kan också använda Application Health Extension för att övervaka programhälsan för varje instans i skalningsuppsättningen och utföra instansreparationer med hjälp av automatiska instansreparationer.

Den här artikeln beskriver hur du kan använda de två typerna av Application Health-tillägg, Binärt hälsotillstånd eller Rich Health States, för att övervaka hälsotillståndet för dina program som distribueras på VM-skalningsuppsättningar.

Förutsättningar

Den här artikeln förutsätter att du är bekant med:

  • Tillägg för virtuella Azure-datorer
  • Ändra vm-skalningsuppsättningar

Varning

Programhälsotillägget förväntar sig att få ett konsekvent avsökningssvar på den konfigurerade porten tcp eller begärandesökvägen http/https för att märka en virtuell dator som Felfri. Om inget program körs på den virtuella datorn, eller om du inte kan konfigurera ett avsökningssvar, visas den virtuella datorn som Inte felfri (binärt hälsotillstånd) eller Okänd (Rich Health States).

Kommentar

Endast en hälsoövervakningskälla kan användas för en VM-skalningsuppsättning, antingen ett programhälsotillägg eller en hälsoavsökning. Om du har båda alternativen aktiverade måste du ta bort ett innan du använder orkestreringstjänster som Instansreparationer eller Automatiska OS-uppgraderingar.

När programhälsotillägget ska användas

Programhälsotillägget distribueras i en vm-skalningsuppsättningsinstans och rapporterar om programmets hälsa inifrån skalningsuppsättningsinstansen. Tillägget avsöker en lokal programslutpunkt och uppdaterar hälsostatusen baserat på svar från TCP/HTTP(S) som tagits emot från programmet. Den här hälsostatusen används av Azure för att initiera reparationer på instanser som inte är felfria och för att avgöra om en instans är berättigad till uppgraderingsåtgärder.

Tillägget rapporterar hälsotillstånd inifrån en virtuell dator och kan användas i situationer där en extern avsökning, till exempel Hälsoavsökningar för Azure Load Balancer, inte kan användas.

Binärt jämfört med rich health-tillstånd

Programhälsotillägg har två tillgängliga alternativ: Binärt hälsotillstånd och Rich Health-tillstånd. I följande tabell visas några viktiga skillnader mellan de två alternativen. Se slutet av det här avsnittet för allmänna rekommendationer.

Funktioner Binärt hälsotillstånd Rika hälsotillstånd
Tillgängliga hälsotillstånd Två tillgängliga tillstånd: Felfri, Inte felfri Fyra tillgängliga tillstånd: Felfri, Felfri, Initierad, Okänd1
Skicka hälsosignaler Hälsosignaler skickas via HTTP/HTTPS-svarskoder eller TCP-anslutningar. Hälsosignaler i HTTP/HTTPS-protokollet skickas via avsökningssvarskoden och svarstexten. Hälsosignaler via TCP-protokollet förblir oförändrade från binära hälsotillstånd.
Identifiera instanser med feltillstånd Instanser hamnar automatiskt i felfritt tillstånd om en felfri signal inte tas emot från programmet. En instans med feltillstånd kan antingen indikera ett problem med tilläggskonfigurationen (till exempel en slutpunkt som inte kan nås) eller ett problem med programmet (till exempel statuskoden som inte är 200). Instanser hamnar bara i ett feltillstånd om programmet genererar ett avsökningssvar som inte är felfri . Användarna ansvarar för att implementera anpassad logik för att identifiera och flagga instanser med program som inte är felfria 2. Instanser med felaktiga tilläggsinställningar (till exempel oåtkomlig slutpunkt) eller ogiltiga hälsoavsökningssvar hamnar under okänt tillstånd2.
Initiera tillstånd för nyligen skapade instanser Initieringstillståndet är inte tillgängligt. Nyligen skapade instanser kan ta lite tid innan de hamnar i ett stabilt tillstånd. Med initieringstillståndet kan nyskapade instanser etablera sig i ett stabilt hälsotillstånd innan instansen blir berättigad till löpande uppgraderingar eller reparationsåtgärder för instanser.
HTTP/HTTPS-protokoll Stöds Stöds
TCP-protokoll Stöds Begränsad support – Okänt tillstånd är inte tillgängligt i TCP-protokollet. Se Rich Health States-protokolltabellen för hälsotillståndsbeteenden på TCP.

1 Okänt tillstånd är inte tillgängligt i TCP-protokollet. 2 Gäller endast för HTTP/HTTPS-protokoll. TCP-protokollet följer samma process för att identifiera instanser som inte är felfria som i binärt hälsotillstånd.

I allmänhet bör du använda binärt hälsotillstånd om:

  • Du är inte intresserad av att konfigurera anpassad logik för att identifiera och flagga en instans med feltillstånd
  • Du behöver ingen inledande respitperiod för nyligen skapade instanser

Du bör använda Rich Health States om:

  • Du skickar hälsosignaler via HTTP/HTTPS-protokollet och kan skicka hälsoinformation via avsökningens svarstext
  • Du vill använda anpassad logik för att identifiera och markera instanser som inte är felfria
  • Du vill ange en inledande respitperiod för nyligen skapade instanser, så att de hamnar i ett stabilt hälsotillstånd innan instansen blir berättigad till löpande uppgradering eller instansreparationer

Binärt hälsotillstånd

Rapporter om binärt hälsotillstånd innehåller två hälsotillstånd, Felfri och Inte felfri. Följande tabeller innehåller en kort beskrivning av hur hälsotillstånden konfigureras.

HTTP/HTTPS-protokoll

Protokoll Hälsotillstånd beskrivning
http/https Felfri För att skicka en felfri signal förväntas programmet returnera en 200-svarskod.
http/https Ohälsosamt Instansen markeras som Inte felfri om en 200-svarskod inte tas emot från programmet.

TCP-protokoll

Protokoll Hälsotillstånd beskrivning
TCP Felfri För att skicka en felfri signal måste en lyckad handskakning göras med den angivna programslutpunkten.
TCP Ohälsosamt Instansen markeras som Inte felfri om en misslyckad eller ofullständig handskakning inträffade med den angivna programslutpunkten.

Några scenarier som kan resultera i ett feltillstånd är:

  • När programslutpunkten returnerar en statuskod som inte är 200
  • När det inte finns någon programslutpunkt konfigurerad i de virtuella datorinstanserna för att ge status för programmets hälsotillstånd
  • När programslutpunkten är felaktigt konfigurerad
  • När programslutpunkten inte kan nås

Rika hälsotillstånd

Rich Health States-rapportering innehåller fyra hälsotillstånd, Initializing, Healthy, Unhealthy och Unknown. Följande tabeller innehåller en kort beskrivning av hur varje hälsotillstånd har konfigurerats.

HTTP/HTTPS-protokoll

Protokoll Hälsotillstånd beskrivning
http/https Felfri För att skicka en felfri signal förväntas programmet returnera ett avsökningssvar med: Avsökningssvarskod: Status 2xx, Avsökningssvarstext: {"ApplicationHealthState": "Healthy"}
http/https Ohälsosamt För att skicka en felaktig signal förväntas programmet returnera ett avsökningssvar med: Avsökningssvarskod: Status 2xx, Avsökningssvarstext: {"ApplicationHealthState": "Unhealthy"}
http/https Initierar Instansen anger automatiskt ett initieringstillstånd vid tilläggsstart. Mer information finns i Initiera tillstånd.
http/https Okänt Ett okänt tillstånd kan inträffa i följande scenarier: när en statuskod som inte är 2xx returneras av programmet, när avsökningsbegäran överskrider tidsgränsen, när programslutpunkten inte kan nås eller är felaktigt konfigurerad, när ett saknat eller ogiltigt värde anges i ApplicationHealthState svarstexten eller när respitperioden upphör att gälla. Mer information finns i Okänt tillstånd.

TCP-protokoll

Protokoll Hälsotillstånd beskrivning
TCP Felfri För att skicka en felfri signal måste en lyckad handskakning göras med den angivna programslutpunkten.
TCP Ohälsosamt Instansen markeras som Inte felfri om en misslyckad eller ofullständig handskakning inträffade med den angivna programslutpunkten.
TCP Initierar Instansen anger automatiskt ett initieringstillstånd vid tilläggsstart. Mer information finns i Initiera tillstånd.

Initiera tillstånd

Det här tillståndet gäller endast rich health-tillstånd. Initieringstillståndet inträffar bara en gång vid tilläggsstarttiden och kan konfigureras av tilläggsinställningarna gracePeriod och numberOfProbes.

Vid tilläggsstart förblir programmets hälsotillstånd i tillståndet Initiera tills något av två scenarier inträffar:

  • Samma hälsotillstånd (felfri eller inte felfri) rapporteras ett på varandra följande antal gånger som konfigurerats via numberOfProbes
  • Upphör att gracePeriod gälla

Om samma hälsotillstånd (felfritt eller felfritt) rapporteras i följd övergår programmets hälsotillstånd från initieringstillståndetoch till det rapporterade hälsotillståndet (felfri eller inte felfri).

Exempel

Om numberOfProbes = 3 betyder det:

  • Om du vill övergå från Initiering till Felfritt tillstånd: Programhälsotillägget måste ta emot tre på varandra följande felfria signaler via HTTP/HTTPS- eller TCP-protokoll
  • Om du vill övergå från initiering till feltillstånd : Programhälsotillägget måste ta emot tre på varandra följande felaktiga signaler via HTTP/HTTPS- eller TCP-protokoll

Om den gracePeriod upphör att gälla innan en på varandra följande hälsostatus rapporteras av programmet, bestäms instanshälsan på följande sätt:

  • HTTP/HTTPS-protokoll: Programhälsan övergår från initiering till okänd
  • TCP-protokoll: Programmets hälsotillstånd övergår från Initiering till Ej felfri

Okänt tillstånd

Det här tillståndet gäller endast rich health-tillstånd. Okänt tillstånd rapporteras endast för "http" eller "https"-avsökningar och inträffar i följande scenarier:

  • När en statuskod som inte är 2xx returneras av programmet
  • När tidsgränsen för avsökningsbegäran uppnås
  • När programslutpunkten inte kan nås eller är felaktigt konfigurerad
  • När ett saknat eller ogiltigt värde anges i ApplicationHealthState svarstexten
  • När respitperioden går ut

En instans i ett okänt tillstånd behandlas på liknande sätt som en instans med feltillstånd. Om det här alternativet är aktiverat kommer instansreparationer att utföras på en okänd instans medan löpande uppgraderingar pausas tills instansen återgår till ett felfritt tillstånd.

Följande tabell visar hälsostatustolkningen för löpande uppgraderingar och instansreparationer:

Hälsotillstånd Tolkning av löpande uppgradering Utlösare för instansreparationer
Initierar Vänta tills tillståndet är felfritt, felfritt eller okänt Nej
Felfri Felfri Nej
Ohälsosamt Ohälsosamt Ja
Okänt Ohälsosamt Ja

Tilläggsschema för binärt hälsotillstånd

Följande JSON visar schemat för application health-tillägget. Tillägget kräver minst en "tcp", "http" eller "https"-begäran med en associerad port eller begärandesökväg.

{
  "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
          }
        }
      }
    ]
  }
} 

Egenskapsvärden

Name Värde/exempel Datatyp
apiVersion 2018-10-01 datum
Publisher Microsoft.ManagedServices sträng
type ApplicationHealthLinux (Linux), ApplicationHealthWindows (Windows) sträng
typeHandlerVersion 1.0 sträng

Inställningar

Name Värde/exempel Datatyp
Protokollet httpeller httpstcp sträng
port Valfritt när protokollet är http eller https, obligatoriskt när protokollet är tcp heltal
requestPath Obligatoriskt när protokollet är http eller https, tillåts inte när protokollet är tcp sträng
intervalInSeconds Valfritt, standardvärdet är 5 sekunder. Det här är intervallet mellan varje hälsoavsökning. Om till exempel intervalInSeconds == 5, skickas en avsökning till den lokala programslutpunkten en gång var femte sekund. heltal
numberOfProbes Valfritt, standardvärdet är 1. Det här är antalet på varandra följande avsökningar som krävs för att hälsostatusen ska ändras. Om till exempel numberOfProbles == 3 behöver du tre på varandra följande "Felfria" signaler för att ändra hälsostatusen från "Inte felfri" till tillståndet "Felfri". Samma krav gäller för att ändra hälsotillståndet till tillståndet "Inte felfri". heltal

Tilläggsschema för Rich Health States

Följande JSON visar schemat för tillägget Rich Health States. Tillägget kräver minst en "http" eller "https"-begäran med en associerad port eller begärandesökväg. TCP-avsökningar stöds också, men kommer inte att kunna ange ApplicationHealthState genom avsökningens svarstext och har inte åtkomst till tillståndet Okänt .

{
  "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
          }
        }
      }
    ]
  }
} 

Egenskapsvärden

Name Värde/exempel Datatyp
apiVersion 2018-10-01 datum
Publisher Microsoft.ManagedServices sträng
type ApplicationHealthLinux (Linux), ApplicationHealthWindows (Windows) sträng
typeHandlerVersion 2.0 sträng

Inställningar

Name Värde/exempel Datatyp
Protokollet httpeller httpstcp sträng
port Valfritt när protokollet är http eller https, obligatoriskt när protokollet är tcp heltal
requestPath Obligatoriskt när protokollet är http eller https, tillåts inte när protokollet är tcp sträng
intervalInSeconds Valfritt, standardvärdet är 5 sekunder. Det här är intervallet mellan varje hälsoavsökning. Om till exempel intervalInSeconds == 5, skickas en avsökning till den lokala programslutpunkten en gång var femte sekund. heltal
numberOfProbes Valfritt, standardvärdet är 1. Det här är antalet på varandra följande avsökningar som krävs för att hälsostatusen ska ändras. Om till exempel numberOfProbles == 3 behöver du tre på varandra följande "Felfria" signaler för att ändra hälsostatusen från "Inte felfri"/"Okänd" till tillståndet "Felfri". Samma krav gäller för att ändra hälsostatusen till tillståndet "Inte felfri" eller "Okänd". heltal
gracePeriod Valfritt, standard = intervalInSeconds * numberOfProbes; maximal respitperiod är 7 200 sekunder heltal

Distribuera tillägget Programhälsa

Det finns flera sätt att distribuera Application Health-tillägget till dina skalningsuppsättningar enligt beskrivningen i följande exempel.

Binärt hälsotillstånd

I följande exempel läggs tillägget Application Health (med namnet myHealthExtension) till extensionProfile i skalningsuppsättningsmodellen för en Windows-baserad skalningsuppsättning.

Du kan också använda det här exemplet för att ändra ett befintligt tillägg från Rich Health State till Binary Health genom att göra ett PATCH-anrop i stället för en 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>"
    }
  }
}

Använd PATCH för att redigera ett redan distribuerat tillägg.

Uppgradera de virtuella datorerna för att installera tillägget.

POST on `/subscriptions/<subscriptionId>/resourceGroups/<myResourceGroup>/providers/Microsoft.Compute/virtualMachineScaleSets/< myScaleSet >/manualupgrade?api-version=2022-08-01`
{
  "instanceIds": ["*"]
}

Rika hälsotillstånd

I följande exempel läggs tillägget Application Health – Rich States (med namnet myHealthExtension) till extensionProfile i skalningsuppsättningsmodellen för en Windows-baserad skalningsuppsättning.

Du kan också använda det här exemplet för att uppgradera ett befintligt tillägg från Binärt till Rich Health-tillstånd genom att göra ett PATCH-anrop i stället för en 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>
    }
  }
}

Använd PATCH för att redigera ett redan distribuerat tillägg.

Uppgradera de virtuella datorerna för att installera tillägget.

POST on `/subscriptions/<subscriptionId>/resourceGroups/<myResourceGroup>/providers/Microsoft.Compute/virtualMachineScaleSets/< myScaleSet >/manualupgrade?api-version=2022-08-01`
{
  "instanceIds": ["*"]
}

Felsöka

Visa VMHealth – enskild instans

Get-AzVmssVM 
  -InstanceView `
  -ResourceGroupName <rgName> `
  -VMScaleSetName <vmssName> `
  -InstanceId <instanceId> 

Visa VMHealth – batchanrop

Detta är endast tillgängligt för VM-skalningsuppsättningar med enhetlig orkestrering.

GET on `/subscriptions/<subscriptionID>/resourceGroups/<resourceGroupName>/providers/Microsoft.Compute/virtualMachineScaleSets/<vmssName>/virtualMachines/?api-version=2022-03-01&$expand=instanceview`

Hälsotillståndet visas inte

Om hälsotillståndet inte visas i Azure-portalen eller via GET-anrop kontrollerar du att den virtuella datorn har uppgraderats till den senaste modellen. Om den virtuella datorn inte finns med i den senaste modellen uppgraderar du den virtuella datorn så visas hälsostatusen.

Utdatalogg för tilläggskörning

Utdata för tilläggskörning loggas till filer som finns i följande kataloger:

C:\WindowsAzure\Logs\Plugins\Microsoft.ManagedServices.ApplicationHealthWindows\<version>\
/var/lib/waagent/Microsoft.ManagedServices.ApplicationHealthLinux-<extension_version>/status
/var/log/azure/applicationhealth-extension

Loggarna samlar också regelbundet in programmets hälsostatus.

Nästa steg

Lär dig hur du distribuerar ditt program på VM-skalningsuppsättningar.