Udostępnij przez


Używanie rozszerzenia Application Health z zestawami skalowania maszyn wirtualnych

Monitorowanie kondycji aplikacji jest ważnym sygnałem do zarządzania i uaktualniania wdrożenia. Zestawy skalowania maszyn wirtualnych platformy Azure zapewniają obsługę uaktualnień stopniowego, w tym automatycznych uaktualnieńOS-Image i automatycznego stosowania poprawek gościa maszyn wirtualnych, które polegają na monitorowaniu kondycji poszczególnych wystąpień w celu uaktualnienia wdrożenia. Za pomocą rozszerzenia usługi Application Health można również monitorować kondycję aplikacji każdego wystąpienia w zestawie skalowania i wykonywać naprawy wystąpień przy użyciu automatycznych napraw wystąpień.

W tym artykule opisano sposób używania dwóch typów rozszerzeń usługi Application Health, Stanów kondycji binarnej lub Bogatych stanów kondycji w celu monitorowania kondycji aplikacji wdrożonych w zestawach skalowania maszyn wirtualnych.

Wymagania wstępne

W tym artykule założono, że znasz następujące elementy:

Uwaga

Rozszerzenie kondycji aplikacji oczekuje, że otrzyma spójną odpowiedź sondy na skonfigurowanym porcie tcp lub ścieżce http/https żądania, aby oznaczyć maszynę wirtualną jako zdrową. Jeśli na maszynie wirtualnej nie jest uruchomiona żadna aplikacja lub nie możesz skonfigurować odpowiedzi sondy, maszyna wirtualna będzie wyświetlana jako Niezdrowa (Stan zdrowia binarny) lub Nieznana (Rozszerzone stany zdrowia). Zobacz przykłady dotyczące kondycji aplikacji, aby zapoznać się z przykładami odpowiedzi sondy zdrowia wysyłanych do lokalnego punktu końcowego.

Uwaga

Dla zestawu skalowania maszyn wirtualnych można użyć tylko jednego źródła monitorowania kondycji: rozszerzenia zdrowia aplikacji albo sondy zdrowia. Jeśli obie opcje są włączone, należy je usunąć przed użyciem usług orkiestracji, takich jak naprawy wystąpień lub automatyczne uaktualnienia systemu operacyjnego.

Kiedy należy używać rozszerzenia Application Health

Rozszerzenie kondycji aplikacji jest wdrażane w wystąpieniu zestawu skalowania maszyn wirtualnych i raportuje kondycję aplikacji z wnętrza wystąpienia zestawu skalowania. Sondy rozszerzenia są uruchamiane w lokalnym punkcie końcowym aplikacji i zaktualizują stan zdrowia na podstawie odpowiedzi TCP/HTTP(S) odebranych z aplikacji. Ten stan kondycji jest używany przez platformę Azure do inicjowania napraw w wystąpieniach o złym stanie i określenia, czy wystąpienie kwalifikuje się do operacji aktualizacji.

Rozszerzenie zgłasza kondycję z poziomu maszyny wirtualnej i może być używane w sytuacjach, gdy nie można używać sondy zewnętrznej, takiej jak sondy kondycji usługi Azure Load Balancer .

Stany dwuwartościowe a Bogate stany zdrowia

Rozszerzenia kondycji aplikacji mają dwie dostępne opcje: Binarne stany kondycji i Zaawansowane stany kondycji. W poniższej tabeli przedstawiono niektóre kluczowe różnice między dwiema opcjami. Zapoznaj się z końcem tej sekcji, aby uzyskać ogólne zalecenia.

Funkcje Binarne Stany Zdrowotne Zaawansowane stany zdrowia
Dostępne stany kondycji Dwa dostępne stany: w dobrej kondycji, w złej kondycji Cztery dostępne stany: Zdrowy, Niezdrowy, Inicjowanie, Nieznane1
Wysyłanie sygnałów kondycji Sygnały kondycji są wysyłane za pośrednictwem kodów odpowiedzi HTTP/HTTPS lub połączeń TCP. Sygnały kondycji protokołu HTTP/HTTPS są wysyłane za pośrednictwem kodu odpowiedzi sondy i treści odpowiedzi. Sygnały stanu zdrowia za pośrednictwem protokołu TCP pozostają niezmienione z binarnych stanów zdrowia.
Identyfikowanie niezdrowych instancji Wystąpienia automatycznie przejdą w stan niezdrowy, jeśli sygnał o dobrym stanie nie zostanie otrzymany z aplikacji. Instancja niesprawna może wskazywać albo problem z konfiguracją rozszerzenia (na przykład, niedostępny punkt końcowy), albo problem z aplikacją (na przykład, kodem stanu różnym od 200). Wystąpienia przejdą do niezdrowego stanu tylko wtedy, gdy aplikacja wyśle odpowiedź sondy niezdrowej. Użytkownicy są odpowiedzialni za implementację logiki niestandardowej w celu identyfikowania i flagowania wystąpień z aplikacjami Niezdrowymi2. Wystąpienia z nieprawidłowymi ustawieniami rozszerzenia (na przykład niedostępnym punktem końcowym) lub te z nieprawidłowymi odpowiedziami sondy kondycji znajdą się w stanie Nieznany2.
Inicjowanie stanu dla nowo utworzonych wystąpień Stan inicjowania jest niedostępny. Nowo utworzone wystąpienia mogą zająć trochę czasu przed osiedleniem się w stanie stabilnym. Inicjowanie stanu umożliwia nowo utworzonym instancjom ustabilizowanie się w stabilnym stanie kondycji zdrowotnej przed przystąpieniem instancji do aktualizacji stopniowej lub operacji naprawy instancji.
Protokół HTTP/HTTPS Wsparcie Wsparcie
Protokół TCP Wsparcie Ograniczona obsługa — nieznany stan jest niedostępny w protokole TCP. Zobacz tabelę protokołu Rich Health States dla zachowań stanu zdrowia w protokole TCP.

1Nieznany stan jest niedostępny w protokole TCP. 2 Dotyczy tylko protokołu HTTP/HTTPS. Protokół TCP będzie postępować zgodnie z tym samym procesem identyfikowania wystąpień w złej kondycji co w stanach kondycji binarnej.

Ogólnie rzecz biorąc, należy użyć Rozwiniętych Stanów Zdrowia, jeśli:

  • Możesz wysyłać sygnały zdrowotne za pośrednictwem protokołu HTTP/HTTPS i przesyłać informacje o kondycji poprzez treść odpowiedzi sondy.
  • Chcesz użyć logiki niestandardowej do identyfikowania i oznaczania niezdrowych instancji.
  • pl-PL: Chcesz ustawić okres karencyjny inicjowania dla nowo utworzonych wystąpień, aby ustabilizowały się w stałym stanie zdrowia przed umożliwieniem im udziału w stopniowym uaktualnieniu lub naprawach.
  • Chcesz mieć większą kontrolę nad koordynacją i procesem aktualizacji przy użyciu ulepszeń stopniowych, emitując metryki niestandardowe

Należy użyć dwu-stanowych stanów zdrowia, jeśli:

  • Nie interesuje Cię konfigurowanie logiki niestandardowej w celu identyfikowania i oznaczania w złym stanie działania instancji.
  • Nie trzeba okresu karencji dla nowo utworzonych wystąpień.
  • Nie musisz używać metryk niestandardowych podczas przeprowadzania uaktualnienia stopniowego na maszynach wirtualnych

Zaawansowane stany zdrowia

Raport Rich Health States zawiera cztery stany zdrowotne: Inicjowanie, Zdrowy, Niezdrowy i Nieznany. W poniższych tabelach przedstawiono krótki opis sposobu konfigurowania poszczególnych stanów kondycji.

Protokół HTTP/HTTPS

Protokół Stan kondycji opis
http/https Zdrowy Aby wysłać sygnał Zdrowy, oczekuje się, że aplikacja zwróci odpowiedź sondy z: Kod odpowiedzi sondy: Status 2xx, Treść odpowiedzi sondy: {"ApplicationHealthState": "Healthy"}
http/https Niezdrowy Aby wysłać sygnał niezdrowy, aplikacja powinna zwrócić odpowiedź sondy z: Kod odpowiedzi sondy: Status 2xx, Treść odpowiedzi sondy: {"ApplicationHealthState": "Unhealthy"}
http/https Inicjowanie Instancja automatycznie przechodzi w stan inicjowania w momencie rozpoczęcia rozszerzenia. Aby uzyskać więcej informacji, zobacz Inicjowanie stanu.
http/https Nieznane W następujących scenariuszach może wystąpić nieznany stan: gdy kod stanu nie jest z zakresu 2xx, gdy nastąpi limit czasu żądania sondy, gdy punkt końcowy aplikacji jest niemożliwy do osiągnięcia lub niepoprawnie skonfigurowany, gdy w treści odpowiedzi zostanie podana brakująca lub nieprawidłowa wartość ApplicationHealthState, lub gdy okres prolongaty wygaśnie. Aby uzyskać więcej informacji, zobacz Nieznany stan.

Protokół TCP

Protokół Stan kondycji opis
TCP Zdrowy Aby wysłać sygnał Zdrowy, należy wykonać pomyślne nawiązanie połączenia z podanym punktem końcowym aplikacji.
TCP Niezdrowy Wystąpienie zostanie oznaczone jako niezdatne, jeśli wystąpił błąd lub niekompletne nawiązanie połączenia z podanym punktem końcowym aplikacji.
TCP Inicjowanie Instancja automatycznie przechodzi w stan inicjowania w momencie rozpoczęcia rozszerzenia. Aby uzyskać więcej informacji, zobacz Inicjowanie stanu.

Inicjowanie stanu

Ten stan dotyczy tylko Stany Bogatego Zdrowia. Stan inicjowania występuje tylko raz przy uruchomieniu rozszerzenia i można go skonfigurować za pomocą ustawień rozszerzenia gracePeriod i numberOfProbes.

Podczas uruchamiania rozszerzenia kondycja aplikacji pozostanie w stanie Inicjowanie do momentu wystąpienia jednego z dwóch scenariuszy:

  • Ten sam stan zdrowia (dobry lub zły) jest zgłaszany przez określoną liczbę razy skonfigurowaną za pośrednictwem parametru liczby prób
  • Czas trwania gracePeriod dobiega końca

Jeśli ten sam stan zdrowia (Dobry lub Zły) jest zgłaszany kolejno, stan zdrowia aplikacji przejdzie ze stanu Inicjowanie do zgłoszonego Stanu zdrowia (Dobry lub Zły).

Przykład

Jeśli numberOfProbes = 3, oznacza to:

  • Aby przejść ze stanu inicjowania do stanu w dobrej kondycji: rozszerzenie kondycji aplikacji musi odbierać trzy kolejne sygnały zdrowe za pośrednictwem protokołu HTTP/HTTPS lub TCP
  • Aby przejść z Inicjowanie do stanu złej kondycji: rozszerzenie kondycji aplikacji musi otrzymywać trzy kolejne sygnały w złej kondycji za pośrednictwem protokołu HTTP/HTTPS lub TCP

Jeśli status zdrowia gracePeriod wygaśnie, zanim aplikacja zgłosi kolejny status zdrowia, stan zdrowia instancji zostanie określony w następujący sposób:

  • Protokół HTTP/HTTPS: kondycja aplikacji przejdzie z Inicjowanie do Nieznane
  • Protokół TCP: kondycja aplikacji przejdzie z inicjowania do złej kondycji

Nieznany stan

Ten stan dotyczy tylko Stany Bogatego Zdrowia. Nieznany stan jest zgłaszany tylko dla sond "http" lub "https" i występuje w następujących scenariuszach:

  • Gdy przez aplikację jest zwracany kod stanu innego niż 2xx
  • Gdy żądanie sondy upływa limit czasu
  • Gdy punkt końcowy aplikacji jest niemożliwy do osiągnięcia lub niepoprawnie skonfigurowany
  • W przypadku, gdy w treści odpowiedzi podano brakującą lub nieprawidłową wartość dla ApplicationHealthState
  • Kiedy okres prolongaty wygaśnie

Instancja w stanie Nieznany jest traktowana podobnie jak instancja w Złej kondycji. Jeśli to ustawienie zostanie włączone, naprawy wystąpień zostaną wykonane w nieznanym wystąpieniu, podczas gdy uaktualnienia stopniowe zostaną wstrzymane, dopóki wystąpienie nie powróci do stanu w dobrej kondycji.

W poniższej tabeli przedstawiono interpretację stanu kondycji dla uaktualnień stopniowego i napraw wystąpień:

Stan kondycji Interpretacja aktualizacji stopniowej Wyzwalacz napraw wystąpień
Inicjowanie Poczekaj, aż stan będzie zdrowy, niezdrowy lub nieznany Nie.
Zdrowy Zdrowy Nie.
Niezdrowy Niezdrowy Tak
Nieznane Niezdrowy Tak

Schemat rozszerzenia dla bogatych stanów zdrowotnych

Poniższy kod JSON przedstawia schemat rozszerzenia Rich Health States. Rozszerzenie wymaga co najmniej żądania "http" lub "https" z skojarzonym portem lub ścieżką żądania odpowiednio. Sondy TCP są również obsługiwane, ale nie będą mogły skonfigurować ApplicationHealthState za pośrednictwem treści odpowiedzi i nie będą miały dostępu do stanu Nieznany.

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

Wartości właściwości

Nazwisko Wartość / przykład Typ danych
apiVersion 2018-10-01 data
wydawca Microsoft.ManagedServices łańcuch
typ ApplicationHealthLinux (Linux), ApplicationHealthWindows (Windows) łańcuch
wersjaTypeHandlera 2.0 łańcuch

Ustawienia

Nazwisko Wartość / przykład Typ danych
protokół http lub https lub tcp łańcuch
port Opcjonalnie, gdy protokół jest http lub https, obowiązkowy, gdy protokół jest tcp int (integer)
ścieżka żądania Obowiązkowe, gdy protokół jest http lub https, niedozwolone, gdy protokół jest tcp łańcuch
interwałWSekundach Opcjonalnie wartość domyślna to 5 sekund. Jest to interwał między poszczególnymi sondami kondycji. Jeśli na przykład intervalInSeconds == 5, sonda zostanie wysłana do lokalnego punktu końcowego aplikacji co 5 sekund. Minimalna wartość to 5 sekund, wartość maksymalna to 60 sekund. int (integer)
liczbaSond Opcjonalnie wartość domyślna to 1. Jest to liczba kolejnych sond wymaganych do zmiany stanu kondycji. Jeśli na przykład numberOfProbles == 3, będziesz potrzebować 3 kolejnych sygnałów "W dobrej kondycji", aby zmienić stan kondycji z "W złej kondycji"/"Nieznany" na stan "W dobrej kondycji". To samo wymaganie dotyczy zmiany stanu kondycji na stan "W złej kondycji" lub "Nieznany". Minimalna wartość to 1 sonda, maksymalna to 24 sondy. int (integer)
okres prolongaty Opcjonalne, domyślne = intervalInSeconds * numberOfProbes; maksymalny okres prolongaty wynosi 14400 sekund int (integer)

Binarne Stany Zdrowotne

Raportowanie binarnego stanu zdrowia zawiera dwa stany, Zdrowy i Niezdrowy. W poniższych tabelach przedstawiono krótki opis konfiguracji stanów zdrowia.

Protokół HTTP/HTTPS

Protokół Stan kondycji opis
http/https Zdrowy Aby wysłać sygnał Healthy, aplikacja powinna zwrócić kod odpowiedzi 200.
http/https Niezdrowy Wystąpienie zostanie oznaczone jako Niezdrowy, jeśli kod odpowiedzi 200 nie zostanie odebrany z aplikacji.

Protokół TCP

Protokół Stan kondycji opis
TCP Zdrowy Aby wysłać sygnał Zdrowy, należy wykonać pomyślne nawiązanie połączenia z podanym punktem końcowym aplikacji.
TCP Niezdrowy Wystąpienie zostanie oznaczone jako niezdatne, jeśli wystąpił błąd lub niekompletne nawiązanie połączenia z podanym punktem końcowym aplikacji.

Niektóre scenariusze, które mogą powodować złą kondycję, obejmują:

  • Gdy punkt końcowy aplikacji zwraca kod stanu inny niż 200
  • Jeśli w instancjach maszyn wirtualnych nie skonfigurowano punktu końcowego aplikacji do monitorowania kondycji aplikacji
  • Gdy punkt końcowy aplikacji jest niepoprawnie skonfigurowany
  • Gdy punkt końcowy aplikacji nie jest osiągalny

Schemat rozszerzenia dla binarnych stanów zdrowotnych

Poniższy kod JSON przedstawia schemat rozszerzenia Application Health. Rozszerzenie wymaga co najmniej żądania "tcp", "http" lub "https" z skojarzonym portem lub ścieżką żądania odpowiednio.

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

Wartości właściwości

Nazwisko Wartość / przykład Typ danych
apiVersion 2018-10-01 data
wydawca Microsoft.ManagedServices łańcuch
typ ApplicationHealthLinux (Linux), ApplicationHealthWindows (Windows) łańcuch
wersjaTypeHandlera 1.0 łańcuch

Ustawienia

Nazwisko Wartość / przykład Typ danych
protokół http lub https lub tcp łańcuch
port Opcjonalnie, gdy protokół jest http lub https, obowiązkowy, gdy protokół jest tcp int (integer)
ścieżka żądania Obowiązkowe, gdy protokół jest http lub https, niedozwolone, gdy protokół jest tcp łańcuch
interwałWSekundach Opcjonalnie wartość domyślna to 5 sekund. Jest to interwał między poszczególnymi sondami kondycji. Jeśli na przykład intervalInSeconds == 5, sonda zostanie wysłana do lokalnego punktu końcowego aplikacji co 5 sekund. Minimalna wartość to 5 sekund, wartość maksymalna to 60 sekund. int (integer)
liczbaSond Opcjonalnie wartość domyślna to 1. Jest to liczba kolejnych sond wymaganych do zmiany stanu kondycji. Jeśli na przykład numberOfProbles == 3, będą potrzebne 3 sygnały "W dobrej kondycji" z rzędu, aby zmienić stan kondycji z "W złej kondycji" na stan "W dobrej kondycji". To samo wymaganie dotyczy zmiany stanu kondycji na stan "W złej kondycji". Minimalna wartość to 1 sonda, maksymalna to 24 sondy. int (integer)

Wdrażanie rozszerzenia Application Health

Istnieje wiele sposobów wdrażania rozszerzenia Application Health do swoich grup skalowania, co pokazano w poniższych przykładach.

Zaawansowane stany zdrowia

W poniższym przykładzie dodano rozszerzenie Application Health — Rich States (o nazwie myHealthExtension) do extensionProfile w modelu zestawu skalowania opartego na systemie Windows.

Można także użyć tego przykładu, aby uaktualnić istniejące rozszerzenie z Binary do rozszerzonych stanów zdrowotnych, wykonując wywołanie PATCH zamiast 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>
    }
  }
}

Użyj PATCH polecenia , aby edytować już wdrożone rozszerzenie.

Uaktualnij maszyny wirtualne, aby zainstalować rozszerzenie.

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

Binarne Stany Zdrowotne

W poniższym przykładzie dodano rozszerzenie Application Health (o nazwie myHealthExtension) do rozszerzeniaProfile w modelu zestawu skalowania zestawu skalowania opartego na systemie Windows.

Możesz również użyć tego przykładu, aby zmienić istniejące rozszerzenie z Rich Health State na Binary Health, wykonując wywołanie PATCH zamiast 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>"
    }
  }
}

Użyj PATCH polecenia , aby edytować już wdrożone rozszerzenie.

Uaktualnij maszyny wirtualne, aby zainstalować rozszerzenie.

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

Rozwiązywanie problemów

Potrzebna pomoc dotycząca konfigurowania odpowiedzi sondy

Zobacz przykłady dotyczące kondycji aplikacji, aby zapoznać się z przykładami odpowiedzi sondy zdrowia wysyłanych do lokalnego punktu końcowego.

Wyświetlanie kondycji maszyny wirtualnej — pojedyncze wystąpienie

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

Wyświetlanie stanu VMHealth – wywołanie wsadowe

Jest to dostępne tylko dla zestawów skalowania maszyn wirtualnych z jednolitym zarządzaniem.

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

Stan kondycji nie jest wyświetlany

Jeśli stan kondycji nie jest wyświetlany w witrynie Azure Portal lub za pośrednictwem wywołania GET, sprawdź, czy maszyna wirtualna została uaktualniona do najnowszego modelu. Jeśli maszyna wirtualna nie znajduje się w najnowszym modelu, uaktualnij maszynę wirtualną i zostanie wyświetlony stan kondycji.

Dziennik danych wyjściowych wykonywania rozszerzenia

Dane wyjściowe wykonywania rozszerzenia są rejestrowane w plikach znajdujących się w następujących katalogach:

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

Dzienniki okresowo przechwytują również stan kondycji aplikacji.

Następne kroki

Dowiedz się, jak wdrożyć aplikację w zestawach skalowania maszyn wirtualnych.