Sdílet prostřednictvím


Použití rozšíření Application Health se službou Azure Virtual Machines

Monitorování stavu aplikace je důležitým signálem pro správu virtuálních počítačů. Azure Virtual Machines poskytuje podporu automatických oprav hosta virtuálního počítače, které spoléhají na monitorování stavu jednotlivých instancí k bezpečné aktualizaci virtuálních počítačů.

Tento článek popisuje, jak můžete ke sledování stavu vašich aplikací nasazených na virtuálních počítačích Azure použít dva typy rozšíření Stavu aplikace, Binární stavy stavu nebo Rich Health States.

Monitorování stavu aplikací je také k dispozici ve škálovacích sadách virtuálních počítačů a pomáhá povolit funkce, jako jsou postupné upgrady, automatické upgrady imagí operačního systému a automatické opravy instancí. Pokud chcete tyto funkce využít s přidanými výhodami škálování, dostupnosti a flexibility ve škálovacích sadách, můžete virtuální počítač připojit k existující škálovací sadě nebo vytvořit novou škálovací sadu.

Požadavky

Tento článek předpokládá, že jste obeznámeni s rozšířeními virtuálních počítačů Azure.

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.

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

Rozšíření stavu aplikace hlásí stav aplikace z virtuálního počítače. 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 monitorování a zjišťování chyb oprav během automatických oprav hosta virtuálního počítače.

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.

Stav aplikace je signál poskytovaný zákazníkem o stavu vaší aplikace spuštěné uvnitř virtuálního počítače. Stav aplikace se liší od stavu prostředků, což je signál poskytovaný platformou sloužící k hlášení událostí na úrovni služby, které mají vliv na výkon virtuálního počítače.

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 automaticky spadají do stavu Není v pořádku, pokud z aplikace není přijat 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 usadit se do stabilního stavu před zpřístupněním stavu jako V pořádku, Není v pořádku nebo Neznámý.
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 řídí stejným procesem identifikace instancí, které nejsou v pořádku, jako v binárních stavových stavech.

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 inicializační období odkladu, které nově vytvořeným instancím umožní usadit se do stabilního stavu.

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 Instance je označena jako Není v pořádku , pokud z aplikace není přijat kód odpovědi 200.

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 Instance je označena jako Není v pořádku , pokud došlo k selhání nebo neúplné handshake se zadaným koncovým bodem aplikace.

Mezi běžné scénáře, které vedou ke stavu Není v pořádku , patří:

  • Když koncový bod aplikace vrátí stavový kód, který není 200.
  • Pokud ve virtuálním počítači není nakonfigurovaný žádný koncový bod aplikace, který by poskytoval stav 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 Instance je označena jako Není v pořádku , pokud došlo k selhání nebo neúplné handshake se zadaným koncovým bodem aplikace.
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, stav instance se určí takto:

  • Protokol HTTP/HTTPS: Stav aplikace se přepíná z inicializace na Neznámý
  • Protokol TCP: Přechody stavu aplikace z Inicializace na Není v pořádku

Neznámý stav

Neznámý stav platí jenom pro rich health states. Tento stav je hlášen pouze pro http sondy nebo https k němu dochází 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

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 nebo vyšší 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. Toto nastavení je 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 nastavení 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 nemůžou ApplicationHealthState nastavit prostřednictvím textu odpovědi sondy a nemají 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 nebo vyšší 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. Toto nastavení je 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 nastavení 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í Application Health můžete do virtuálních počítačů 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í Stav aplikace s názvem myHealthExtension do virtuálního počítače s Windows.

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

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

Bohaté stavy stavu

Následující příklad přidá rozšíření Stav aplikace – Rich States (s názvem myHealthExtension) do virtuálního počítače s 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/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>
    }
  }
}

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

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

GET https://management.azure.com/subscriptions/{subscription-id}/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVM/instanceView?api-version=2023-07-01

Ukázková odpověď (viz objekt "vmHealth" pro nejnovější stav virtuálního počítače)

"vmHealth": {
    "status": {
      "code": "HealthState/unknown",
      "level": "Warning",
      "displayStatus": "The VM health is unknown",
      "time": "2023-12-04T22:25:39+00:00"
    }
}

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.