Použití rozšíření Application Health se škálovacími sadami virtuálních počítačů

Monitorování stavu aplikace je důležitým signálem pro správu a upgrade nasazení. Škálovací sady virtuálních počítačů Azure poskytují podporu pro postupné upgrady, včetně automatických upgradů imagí operačního systému a automatických oprav hosta virtuálního počítače, které při upgradu nasazení spoléhají na monitorování stavu jednotlivých instancí. Rozšíření stavu aplikace můžete také použít k monitorování stavu aplikace jednotlivých instancí ve škálovací sadě a provádění oprav instancí pomocí automatických oprav instancí.

Tento článek popisuje, jak můžete ke sledování stavu vašich aplikací nasazených ve škálovacích sadách virtuálních počítačů použít dva typy rozšíření služby Application Health, Binary Health States nebo Rich Health States.

Požadavky

Tento článek předpokládá, že znáte:

Upozornění

Rozšíření stavu aplikace očekává, že na nakonfigurovaném portu tcp nebo cestě http/https požadavku obdrží konzistentní odpověď sondy, aby bylo možné označit virtuální počítač jako v pořádku. Pokud na virtuálním počítači není spuštěná žádná aplikace nebo nemůžete nakonfigurovat odpověď sondy, zobrazí se váš virtuální počítač ve stavu Není v pořádku (binární stavy stavu) nebo Neznámý (rich health states). Příklady odpovědí sondy stavu generovaných do místního koncového bodu najdete v ukázkách stavu aplikace.

Poznámka:

Pro škálovací sadu virtuálních počítačů lze použít pouze jeden zdroj monitorování stavu, a to buď rozšíření stavu aplikace, nebo sondu stavu. Pokud máte obě možnosti povolené, budete ho muset před použitím služeb orchestrace, jako jsou opravy instancí nebo automatické upgrady operačního systému, odebrat.

Kdy použít rozšíření Stav aplikace

Rozšíření stavu aplikace se nasadí v instanci škálovací sady virtuálních počítačů a hlásí stav aplikace z instance škálovací sady. Rozšíření testuje místní koncový bod aplikace a aktualizuje stav na základě odpovědí TCP/HTTP(S) přijatých z aplikace. Azure tento stav používá k zahájení oprav instancí, které nejsou v pořádku, a k určení, jestli má instance nárok na operace upgradu.

Rozšíření hlásí stav z virtuálního počítače a dá se použít v situacích, kdy nejde použít externí sondu, jako jsou sondy stavu Azure Load Balanceru.

Binární versus Rich Health States

Rozšíření služby Application Health má k dispozici dvě možnosti: Binární stavy stavu a Rich Health States. Následující tabulka uvádí některé klíčové rozdíly mezi těmito dvěma možnostmi. Obecná doporučení najdete na konci této části.

Funkce Binární stavy stavu Bohaté stavy stavu
Dostupné stavy stavu Dva dostupné stavy: V pořádku, Není v pořádku Čtyři dostupné stavy: V pořádku, Není v pořádku, Inicializace, Neznámá1
Odesílání signálů stavu Signály stavu se odesílají prostřednictvím kódů odpovědí HTTP/HTTPS nebo připojení TCP. Signály stavu v protokolu HTTP/HTTPS se odesílají prostřednictvím kódu odpovědi sondy a textu odpovědi. Signály stavu prostřednictvím protokolu TCP zůstávají beze změny v binárních stavových stavech.
Identifikace instancí, které nejsou v pořádku Instance se automaticky dostanou do stavu Není v pořádku, pokud se z aplikace nepřijme signál v pořádku. Instance , která není v pořádku , může znamenat problém s konfigurací rozšíření (například nedostupný koncový bod) nebo problém s aplikací (například stavový kód, který není 200). Instance přejdou do stavu Není v pořádku pouze v případě, že aplikace vygeneruje odpověď sondy , která není v pořádku. Uživatelé zodpovídají za implementaci vlastní logiky pro identifikaci a označení instancí s aplikacemi, které nejsou v pořádku 2. Instance s nesprávným nastavením rozšíření (například nedostupný koncový bod) nebo neplatné odpovědi sondy stavu spadají do neznámého stavu2.
Inicializace stavu pro nově vytvořené instance Inicializace stavu není dostupná. Nově vytvořené instance můžou nějakou dobu trvat, než se urovnáte do stabilního stavu. Inicializace stavu umožňuje nově vytvořeným instancím vyrovnat se do stabilního stavu před tím, než instance opraví upgrade nebo operace oprav instancí.
Protokol HTTP/HTTPS Podporováno Podporováno
Protokol TCP Podporováno Omezená podpora – Neznámý stav není v protokolu TCP k dispozici. Viz tabulka protokolů Rich Health States pro chování stavu v protokolu TCP.

1 Neznámý stav není v protokolu TCP k dispozici. 2 Platí pouze pro protokol HTTP/HTTPS. Protokol TCP se bude řídit stejným procesem identifikace instancí, které nejsou v pořádku, jako v binárních stavových stavech.

Obecně byste měli použít binární stavy stavu, pokud:

  • Nemáte zájem o konfiguraci vlastní logiky pro identifikaci a označení instance, která není v pořádku.
  • Pro nově vytvořené instance nevyžadujete inicializaci období odkladu.

Pokud:

  • Signály stavu odesíláte prostřednictvím protokolu HTTP/HTTPS a můžete odesílat informace o stavu prostřednictvím těla odpovědi sondy.
  • K identifikaci a označení instancí, které nejsou v pořádku, byste chtěli použít vlastní logiku.
  • Chcete nastavit období odkladu inicializace pro nově vytvořené instance tak, aby se urovnaly do stabilního stavu před tím, než instance opraví postupný upgrade nebo opravy instancí.

Binární stavy stavu

Generování sestav stavu binárního stavu obsahuje dva stavy, stav v pořádku a není v pořádku. Následující tabulky obsahují stručný popis konfigurace stavů.

Protokol HTTP/HTTPS

Protokol Stav Popis
http/https V pořádku Pokud chcete odeslat signál v pořádku , očekává se, že aplikace vrátí kód odpovědi 200.
http/https Není v pořádku Pokud z aplikace nepřijde kód odpovědi 200, bude tato instance označena jako Není v pořádku.

Protokol TCP

Protokol Stav Popis
TCP V pořádku Pokud chcete odeslat signál v pořádku , musí být úspěšný handshake proveden se zadaným koncovým bodem aplikace.
TCP Není v pořádku Pokud u zadaného koncového bodu aplikace došlo k selhání nebo neúplné handshake, instance se označí jako Není v pořádku .

Mezi scénáře, které můžou vést ke stavu Není v pořádku , patří:

  • Když koncový bod aplikace vrátí stavový kód, který není 200.
  • Pokud v instancích virtuálního počítače není nakonfigurovaný žádný koncový bod aplikace pro zajištění stavu aplikace
  • Pokud je koncový bod aplikace nesprávně nakonfigurovaný
  • Pokud koncový bod aplikace není dostupný

Bohaté stavy stavu

Sestavy bohatých stavů obsahují čtyři stavy stavu, inicializace, v pořádku, není v pořádku a neznámá. Následující tabulky obsahují stručný popis konfigurace jednotlivých stavů.

Protokol HTTP/HTTPS

Protokol Stav Popis
http/https V pořádku Pokud chcete odeslat signál v pořádku, očekává se, že aplikace vrátí odpověď sondy s kódem odpovědi sondy: Stav 2xx, tělo odpovědi sondy:{"ApplicationHealthState": "Healthy"}
http/https Není v pořádku Pokud chcete odeslat signál, který není v pořádku, očekává se, že aplikace vrátí odpověď sondy: Kód odpovědi sondy: Stav 2xx, tělo odpovědi sondy:{"ApplicationHealthState": "Unhealthy"}
http/https Initializing Instance automaticky zadá inicializační stav při spuštění rozšíření. Další informace naleznete v tématu Inicializace stavu.
http/https Neznámý V následujících scénářích může dojít k neznámému stavu: pokud aplikace vrátí stavový kód bez 2xx, když vyprší časový limit požadavku sondy, když koncový bod aplikace není dostupný nebo nesprávně nakonfigurovaný, když je v textu odpovědi zadána ApplicationHealthState chybějící nebo neplatná hodnota nebo když vyprší období odkladu. Další informace naleznete v tématu Neznámý stav.

Protokol TCP

Protokol Stav Popis
TCP V pořádku Pokud chcete odeslat signál v pořádku , musí být úspěšný handshake proveden se zadaným koncovým bodem aplikace.
TCP Není v pořádku Pokud u zadaného koncového bodu aplikace došlo k selhání nebo neúplné handshake, instance se označí jako Není v pořádku .
TCP Initializing Instance automaticky zadá inicializační stav při spuštění rozšíření. Další informace naleznete v tématu Inicializace stavu.

Inicializace stavu

Tento stav platí jenom pro rich health states. Stav inicializace probíhá pouze jednou při spuštění rozšíření a lze ho nakonfigurovat nastavením rozšíření gracePeriod a numberOfProbes.

Při spuštění rozšíření zůstane stav aplikace ve stavu Inicializace , dokud nedojde k jednomu ze dvou scénářů:

  • Stejný stav (v pořádku nebo není v pořádku) se hlásí po sobě jdoucím počtem nakonfigurovaných prostřednictvím parametru numberOfProbes.
  • Platnost vyprší.gracePeriod

Pokud je stejný stav (v pořádku nebo není v pořádku) hlášen po sobě, stav aplikace přejde z inicializačního stavu a do hlášeného stavu (v pořádku nebo není v pořádku).

Příklad

Pokud numberOfProbes = 3, to by znamenalo:

  • Přechod z inicializace do stavu V pořádku : Rozšíření stavu aplikace musí přijímat tři po sobě jdoucí signály v pořádku prostřednictvím protokolu HTTP/HTTPS nebo TCP.
  • Přechod z inicializace do stavu Není v pořádku : Rozšíření stavu aplikace musí přijímat tři po sobě jdoucí signály, které nejsou v pořádku, přes protokol HTTP/HTTPS nebo TCP.

gracePeriod Pokud vyprší platnost před po sobě jdoucím stavem aplikace, bude stav instance určen následujícím způsobem:

  • Protokol HTTP/HTTPS: Stav aplikace se přepne z inicializace na Neznámý.
  • Protokol TCP: Stav aplikace přejde z inicializace na není v pořádku.

Neznámý stav

Tento stav platí jenom pro rich health states. Neznámý stav je hlášen pouze pro sondy http nebo https a vyskytuje se v následujících scénářích:

  • Pokud aplikace vrátí stavový kód, který není 2xx
  • Když vyprší časový limit požadavku sondy
  • Pokud je koncový bod aplikace nedostupný nebo nesprávně nakonfigurovaný
  • Pokud je v textu odpovědi zadaná ApplicationHealthState chybějící nebo neplatná hodnota
  • Po vypršení lhůty odkladu

Instance v neznámém stavu je považována za podobnou instanci, která není v pořádku. Pokud je tato možnost povolená, budou opravy instancí prováděny v neznámé instanci, zatímco postupné upgrady budou pozastaveny, dokud instance nepřejde zpět do stavu V pořádku .

Následující tabulka uvádí interpretaci stavu pro postupné upgrady a opravy instancí:

Stav Interpretace postupného upgradu Aktivační událost Oprav instancí
Initializing Počkejte, až bude stav v pořádku, není v pořádku nebo neznámý. No
V pořádku V pořádku No
Není v pořádku Není v pořádku Ano
Neznámý Není v pořádku Ano

Schéma rozšíření pro binární stavy stavu

Následující KÓD JSON ukazuje schéma pro rozšíření Stav aplikace. Rozšíření vyžaduje minimálně požadavek "tcp", "http" nebo "https" s přidruženým portem nebo cestou požadavku.

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

Hodnoty vlastností

Název Hodnota / příklad Datový typ
apiVersion 2018-10-01 datum
vydavatel Microsoft.ManagedServices string
type ApplicationHealthLinux (Linux), ApplicationHealthWindows (Windows) string
typeHandlerVersion 1.0 string

Nastavení

Název Hodnota / příklad Datový typ
protokol httpnebo httpstcp string
port Volitelné, pokud je http protokol nebo httpsje povinný, pokud je protokol tcp int
requestPath Povinné, pokud je http protokol nebo https, není povolen, pokud je protokol tcp string
intervalInSeconds Volitelné, výchozí hodnota je 5 sekund. Jedná se o interval mezi jednotlivými sondou stavu. Pokud například intervalInSeconds == 5, odešle se sonda do místního koncového bodu aplikace jednou za 5 sekund. int
numberOfProbes Volitelné, výchozí hodnota je 1. Toto je počet po sobě jdoucích testů potřebných ke změně stavu. Pokud například numberOfProbles == 3, budete potřebovat 3 po sobě jdoucí signály "V pořádku" ke změně stavu ze stavu "Není v pořádku" na "V pořádku". Stejný požadavek platí pro změnu stavu na stav Není v pořádku. int

Schéma rozšíření pro rich health states

Následující kód JSON ukazuje schéma rozšíření Rich Health States. Rozšíření vyžaduje minimálně požadavek http nebo https s přidruženým portem nebo cestou požadavku. Podporují se také sondy PROTOKOLU TCP, ale nebudou moct nastavit ApplicationHealthState tělo odpovědi sondy a nebudou mít přístup k neznámému stavu.

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

Hodnoty vlastností

Název Hodnota / příklad Datový typ
apiVersion 2018-10-01 datum
vydavatel Microsoft.ManagedServices string
type ApplicationHealthLinux (Linux), ApplicationHealthWindows (Windows) string
typeHandlerVersion 2.0 string

Nastavení

Název Hodnota / příklad Datový typ
protokol httpnebo httpstcp string
port Volitelné, pokud je http protokol nebo httpsje povinný, pokud je protokol tcp int
requestPath Povinné, pokud je http protokol nebo https, není povolen, pokud je protokol tcp string
intervalInSeconds Volitelné, výchozí hodnota je 5 sekund. Jedná se o interval mezi jednotlivými sondou stavu. Pokud například intervalInSeconds == 5, odešle se sonda do místního koncového bodu aplikace jednou za 5 sekund. int
numberOfProbes Volitelné, výchozí hodnota je 1. Toto je počet po sobě jdoucích testů potřebných ke změně stavu. Pokud například numberOfProbles == 3, budete potřebovat 3 po sobě jdoucí signály "V pořádku", abyste změnili stav z "Není v pořádku"/"Neznámý" do stavu V pořádku. Stejný požadavek platí pro změnu stavu na Stav není v pořádku nebo Neznámý stav. int
gracePeriod Volitelné, výchozí = intervalInSeconds * numberOfProbes; maximální období odkladu je 7200 sekund int

Nasazení rozšíření Stav aplikace

Rozšíření Služby Application Health můžete do škálovacích sad nasadit několika způsoby, jak je podrobně popsáno v následujících příkladech.

Binární stavy stavu

Následující příklad přidá rozšíření Application Health (s názvem myHealthExtension) do extensionProfile v modelu škálovací sady škálovací sady založené na Windows.

Tento příklad můžete také použít ke změně existujícího rozšíření ze stavu Rich Health na Binary Health provedením volání PATCH místo 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>"
    }
  }
}

Slouží PATCH k úpravě již nasazeného rozšíření.

Upgradujte virtuální počítače a nainstalujte rozšíření.

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

Bohaté stavy stavu

Následující příklad přidá rozšíření Stav aplikace – Rich States (s názvem myHealthExtension) do extensionProfile modelu škálovací sady škálovací sady založeného na Windows.

Tento příklad můžete použít také k upgradu existujícího rozšíření z Binary na Rich Health States provedením volání PATCH místo 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>
    }
  }
}

Slouží PATCH k úpravě již nasazeného rozšíření.

Upgradujte virtuální počítače a nainstalujte rozšíření.

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

Odstraňování potíží

Potřebuji pomoc s konfigurací odpovědi sondy

Příklady odpovědí sondy stavu generovaných do místního koncového bodu najdete v ukázkách stavu aplikace.

Zobrazení VMHealth – jedna instance

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

Zobrazení VMHealth – dávkové volání

Tato možnost je k dispozici pouze pro škálovací sady virtuálních počítačů s jednotnou orchestrací.

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

Stav se nezobrazuje

Pokud se stav nezobrazuje na webu Azure Portal nebo prostřednictvím volání GET, zkontrolujte, jestli je virtuální počítač upgradovaný na nejnovější model. Pokud virtuální počítač není v nejnovějším modelu, upgradujte virtuální počítač a stav se objeví.

Výstupní protokol spouštění rozšíření

Výstup spouštění rozšíření se protokoluje do souborů nalezených v následujících adresářích:

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

Protokoly také pravidelně zaznamenávají stav aplikace.

Další kroky

Zjistěte, jak nasadit aplikaci ve škálovacích sadách virtuálních počítačů.