Freigeben über


Verwenden der Anwendungsintegritätserweiterung mit Azure-VMs

Die Überwachung der Anwendungsintegrität ist ein wichtiges Signal für das Verwalten Ihrer VMs. Azure Virtual Machines bietet Unterstützung für automatische VM-Gastpatches, die für eine sichere Aktualisierung Ihrer VMs von der Integritätsüberwachung der einzelnen Instanzen abhängig sind.

In diesem Artikel erfahren Sie, wie Sie mit den beiden Typen Binary Health States oder Rich Health States der Anwendungsintegritätserweiterung die Integrität Ihrer Anwendungen überwachen, die auf Azure-VMs bereitgestellt werden.

Die Anwendungsintegritätsüberwachung ist auch für VM-Skalierungsgruppen verfügbar und unterstützt die Aktivierung von Funktionen wie Parallele Upgrades, Automatische Upgrades für Betriebssystemimages und Automatische Instanzreparaturen. Um diese Funktionen mit den zusätzlichen Vorteilen der Skalierung, Verfügbarkeit und Flexibilität für Skalierungsgruppen zu nutzen, können Sie Ihre VM an eine vorhandene Skalierungsgruppe anfügen oder eine neue Skalierungsgruppe erstellen.

Voraussetzungen

In diesem Artikel wird davon ausgegangen, dass Sie mit Azure-VM-Erweiterungen vertraut sind.

Achtung

Die Application Health-Erweiterung erwartet, eine konsistente Testantwort am konfigurierten Port tcp oder Anforderungspfad http/https zu empfangen, um einen virtuellen Computer als Fehlerfrei zu bezeichnen. Wenn auf der VM keine Anwendung ausgeführt wird oder Sie keine Testantwort konfigurieren können, wird Ihre VM als Fehlerhaft (Binary Health States) oder Unbekannt (Rich Health States). angezeigt. Beispiele für das Ausgeben von Integritätstestantworten an einen lokalen Endpunkt finden Sie unter Beispiele für Anwendungsintegrität.

Anwendungsbereich der Application Health-Erweiterung

Die Anwendungsintegritätserweiterung meldet die Anwendungsintegrität innerhalb des virtuellen Computers. Die Erweiterung testet auf einem lokalen Anwendungsendpunkt und aktualisiert den Integritätsstatus basierend auf TCP-/HTTP(S)-Antworten, die von der Anwendung empfangen werden. Dieser Integritätsstatus wird von Azure verwendet, um Patchfehler während automatischer VM-Gastpatches zu überwachen und zu ermitteln.

Die Erweiterung meldet die Integrität aus einer VM heraus und kann in Situationen verwendet werden, in denen ein externer Test wie die Azure Load Balancer-Integritätstests nicht verwendet werden kann.

Die Anwendungsintegrität ist ein vom Kunden bereitgestelltes Signal für den Status Ihrer Anwendung, die innerhalb der VM ausgeführt wird. Die Anwendungsintegrität unterscheidet sich von der Ressourcenintegrität. Bei der Ressourcenintegrität handelt es sich um ein von der Plattform bereitgestelltes Signal, mit dem Ereignisse auf Dienstebene gemeldet werden, die sich auf die Leistung Ihrer VM auswirken.

Binary Health States und Rich Health States im Vergleich

Für Anwendungsintegritätserweiterungen stehen zwei Optionen zur Verfügung: Binary Health States und Rich Health States. In der folgenden Tabelle werden einige wichtige Unterschiede zwischen den beiden Optionen hervorgehoben. Allgemeine Empfehlungen finden Sie am Ende dieses Abschnitts.

Features Binary Health States Rich Health States
Verfügbare Integritätsstatus Zwei verfügbare Status: Fehlerfrei, Fehlerhaft Vier verfügbare Zustände: Fehlerfrei, Fehlerhaft, Initialisierung, Unbekannt1
Senden von Integritätssignalen Integritätssignale werden über HTTP/HTTPS-Antwortcodes oder TCP-Verbindungen gesendet. Integritätssignale werden im HTTP/HTTPS-Protokoll über den Testantwortcode und den Antworttext gesendet. Integritätssignale über das TCP-Protokoll werden von Binary Health States nicht verändert.
Identifizieren von Fehlerhaft-Instanzen Instanzen werden automatisch in den Zustand Fehlerhaft versetzt, wenn von der Anwendung kein Signal vom Typ Fehlerfrei empfangen wird. Eine Fehlerhaft-Instanz kann auf ein Problem mit der Erweiterungskonfiguration (z. B. einen nicht erreichbaren Endpunkt) oder ein Problem mit der Anwendung (z. B. Nicht-200-Statuscode) hinweisen. Instanzen werden nur dann in den Zustand Fehlerhaft versetzt, wenn die Anwendung eine Testantwort vom Typ Fehlerhaft ausgibt. Benutzer sind für die Implementierung benutzerdefinierter Logik verantwortlich, um Instanzen mit Fehlerhaft-Anwendungen zu identifizieren und zu kennzeichnen2. Instanzen mit falschen Erweiterungseinstellungen (z. B. nicht erreichbarer Endpunkt) oder ungültigen Integritätstestantworten fallen unter den Status Unbekannt2.
Zustand Initialisierung für neu erstellte Instanzen Der Zustand Initialisierung ist nicht verfügbar. Es kann einige Zeit dauern, bevor neu erstellte Instanzen einen stabilen Zustand erreichen. Der Zustand Initialisierung ermöglicht es neu erstellten Instanzen, in einen stabilen Integritätszustand zu wechseln, bevor der Integritätszustand als Fehlerfrei, Fehlerhaft oder Unbekannt angezeigt wird.
HTTP/HTTPS-Protokoll Unterstützt Unterstützt
TCP-Protokoll Unterstützt Eingeschränkte Unterstützung: Der Zustand Unbekannt ist im TCP-Protokoll nicht verfügbar. Informationen zum Integritätszustandsverhalten in TCP finden Sie in der Protokolltabelle zu Rich Health States.

1 Der Zustand Unbekannt ist im TCP-Protokoll nicht verfügbar. 2 Nur anwendbar für das HTTP/HTTPS-Protokoll. Das TCP-Protokoll führt dasselbe Verfahren zur Identifizierung von Instanzen mit dem Zustand Fehlerhaft durch wie bei Binary Health States.

Verwenden Sie Binary Health States in folgenden Fällen:

  • Sie möchten keine benutzerdefinierte Logik konfigurieren, um eine fehlerhafte Instanz zu identifizieren und zu kennzeichnen.
  • Sie benötigen keine Initialisierung-Toleranzperiode für neu erstellte Instanzen.

Verwenden Sie Rich Health States in folgenden Fällen:

  • Sie senden Integritätssignale über das HTTP/HTTPS-Protokoll und können Integritätsinformationen über den Testantworttext übermitteln.
  • Sie möchten benutzerdefinierte Logik verwenden, um fehlerhafte Instanzen zu identifizieren und zu markieren.
  • Sie möchten eine Toleranzperiode für die Initialisierung festlegen, sodass neu erstellte Instanzen in einen stabilen Integritätszustand versetzt werden können.

Binary Health States

Binary Health States-Berichte enthalten zwei Integritätszustände: Fehlerfrei und Fehlerhaft. Die folgenden Tabellen enthalten eine kurze Beschreibung der Konfiguration der Integritätszustände.

HTTP/HTTPS-Protokoll

Protocol Integritätsstatus BESCHREIBUNG
http/https Healthy Um ein Fehlerfrei-Signal zu senden, muss die Anwendung einen 200-Antwortcode zurückgeben.
http/https Fehlerhaft Die Instanz wird als Fehlerhaft markiert, wenn kein 200-Antwortcode von der Anwendung empfangen wird.

TCP-Protokoll

Protocol Integritätsstatus BESCHREIBUNG
TCP Healthy Um ein Fehlerfrei-Signal zu senden, muss ein erfolgreicher Handshake mit dem bereitgestellten Anwendungsendpunkt durchgeführt werden.
TCP Fehlerhaft Die Instanz wird als Fehlerhaft markiert, wenn ein fehlerhafter oder unvollständiger Handshake mit dem angegebenen Anwendungsendpunkt aufgetreten ist.

Unter anderem können folgende allgemeine Szenarien zum Zustand Fehlerhaft führen:

  • Der Anwendungsendpunkt gibt einen Nicht-200-Statuscode zurück
  • Wenn kein Anwendungsendpunkt innerhalb der VM konfiguriert ist, um den Integritätsstatus der Anwendung bereitzustellen
  • Wenn der Anwendungsendpunkt nicht ordnungsgemäß konfiguriert ist.
  • Wenn der Anwendungsendpunkt nicht erreichbar ist

Rich Health States

Rich Health States-Berichte enthalten vier Integritätszustände: Initialisierung, Fehlerfrei, Fehlerhaft und Unbekannt. Die folgenden Tabellen enthalten eine kurze Beschreibung der Konfiguration des jeweiligen Integritätszustands.

HTTP/HTTPS-Protokoll

Protocol Integritätsstatus BESCHREIBUNG
http/https Healthy Um das Signal Fehlerfrei zu senden, wird von der Anwendung eine Testantwort erwartet, die Folgendes enthält: Testantwortcode: Status 2xx, Testantworttext: {"ApplicationHealthState": "Healthy"}
http/https Fehlerhaft Um das Signal Fehlerhaft zu senden, wird von der Anwendung eine Testantwort erwartet, die Folgendes enthält: Testantwortcode: Status 2xx, Testantworttext: {"ApplicationHealthState": "Unhealthy"}
http/https Wird initialisiert... Die Instanz wechselt zur Startzeit der Erweiterung automatisch in den Zustand Initialisierung. Weitere Informationen finden Sie unter Zustand „Initialisierung“.
http/https Unbekannt Ein Zustand Unbekannt kann in den folgenden Szenarien auftreten: ein Nicht-2xx-Statuscode wird von der Anwendung zurückgegeben, bei der Testanforderung tritt ein Timeout auf, der Anwendungsendpunkt ist nicht erreichbar oder falsch konfiguriert, ein fehlender oder ungültiger Wert wird im Antworttext für ApplicationHealthState angegeben, oder die Toleranzperiode läuft ab. Weitere Informationen finden Sie unter Zustand „Unbekannt“.

TCP-Protokoll

Protocol Integritätsstatus BESCHREIBUNG
TCP Healthy Um ein Fehlerfrei-Signal zu senden, muss ein erfolgreicher Handshake mit dem bereitgestellten Anwendungsendpunkt durchgeführt werden.
TCP Fehlerhaft Die Instanz wird als Fehlerhaft markiert, wenn ein fehlerhafter oder unvollständiger Handshake mit dem angegebenen Anwendungsendpunkt aufgetreten ist.
TCP Wird initialisiert... Die Instanz wechselt zur Startzeit der Erweiterung automatisch in den Zustand Initialisierung. Weitere Informationen finden Sie unter Zustand „Initialisierung“.

Zustand „Initialisierung“

Dieser Zustand gilt nur für Rich Health States. Der Zustand Initialisierung tritt nur einmal zur Startzeit der Erweiterung auf und kann durch die Erweiterungseinstellungen gracePeriod und numberOfProbes konfiguriert werden.

Beim Start der Erweiterung verbleibt die Anwendungsintegrität im Zustand Initialisierung, bis eins von zwei Szenarien auftritt:

  • Derselbe Integritätsstatus (Fehlerfrei oder Fehlerhaft) wird mehrmals gemeldet, wie über numberOfProbes konfiguriert.
  • Die gracePeriod läuft ab

Wenn derselbe Integritätsstatus (Fehlerfrei oder Fehlerhaft) in Folge gemeldet wird, wechselt die Anwendungsintegrität aus dem Zustand Initialisierung in den gemeldeten Integritätszustand (Fehlerfrei oder Fehlerhaft).

Beispiel

Wenn numberOfProbes = 3, bedeutet dies:

  • Um vom Zustand Initialisierung zum Zustand Fehlerfrei zu wechseln: Die Anwendungsintegritätserweiterung muss drei aufeinanderfolgende Fehlerfrei-Signale über HTTP/HTTPS oder das TCP-Protokoll empfangen.
  • Um vom Zustand Initialisierung zum Zustand Fehlerhaft zu wechseln: Die Anwendungsintegritätserweiterung muss drei aufeinanderfolgende Fehlerhaft-Signale über HTTP/HTTPS oder das TCP-Protokoll empfangen.

Wenn gracePeriod abläuft, bevor die Anwendung einen aufeinanderfolgenden Integritätsstatus meldet, wird die Instanzintegrität wie folgt bestimmt:

  • HTTP-/HTTPS-Protokoll: Die Anwendungsintegrität wechselt von Initialisierung zu Unbekannt.
  • TCP-Protokoll: Die Anwendungsintegrität wechselt von Initialisierung zu Fehlerhaft.

Unbekannter Status

Der Zustand Unbekannt gilt nur für Rich Health States. Dieser Zustand wird nur für http- oder https-Tests gemeldet und tritt in den folgenden Szenarien auf:

  • Ein Nicht-2xx-Statuscode wird von der Anwendung zurückgegeben.
  • Für die Testanforderung tritt ein Timeout ein.
  • Der Anwendungsendpunkt ist nicht erreichbar oder falsch konfiguriert.
  • Im Antworttext fehlt ein Wert für ApplicationHealthState, oder er wird falsch angegeben.
  • Die Toleranzperiode läuft ab.

Erweiterungsschema für Binary Health States

Der folgende JSON-Code zeigt das Schema für die Application Health-Erweiterung. Die Erweiterung erfordert mindestens eine „Tcp“-, „http“- oder „https“-Anforderung mit einem zugeordneten Port bzw. Anforderungspfad.

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

Eigenschaftswerte

Name Wert/Beispiel Datentyp
apiVersion 2018-10-01 oder höher Datum
publisher Microsoft.ManagedServices Zeichenfolge
type ApplicationHealthLinux (Linux), ApplicationHealthWindows (Windows) Zeichenfolge
typeHandlerVersion 1.0 Zeichenfolge

Einstellungen

Name Wert/Beispiel Datentyp
Protokoll http oder https oder tcp Zeichenfolge
port Optional, wenn das Protokoll http oder https ist, obligatorisch, wenn das Protokoll tcp ist. INT
requestPath Obligatorisch, wenn das Protokoll http oder https ist, nicht zulässig, wenn das Protokoll tcp ist. Zeichenfolge
intervalInSeconds Optional, der Standardwert ist 5 Sekunden. Mit dieser Einstellung wird das Intervall zwischen den einzelnen Integritätstests festgelegt. Wenn beispielsweise intervalInSeconds == 5 ist, wird ein Test einmal alle 5 Sekunden an den lokalen Anwendungsendpunkt gesendet. INT
numberOfProbes Optional, der Standardwert ist 1. Diese Einstellung ist die Anzahl der aufeinanderfolgenden Tests, die für die Änderung des Integritätsstatus erforderlich sind. Wenn beispielsweise numberOfProbles == 3 ist, benötigen Sie 3 aufeinander folgende „Fehlerfrei“-Signale, um den Integritätsstatus von „Fehlerhaft“ in den Zustand „Fehlerfrei“ zu ändern. Die gleiche Anforderung gilt für die Änderung des Integritätsstatus in den Zustand „Fehlerhaft“. INT

Erweiterungsschema für Rich Health States

Der folgende JSON-Code zeigt das Schema für die Rich Health States-Erweiterung. Die Erweiterung erfordert mindestens eine „http“- oder „https“-Anforderung mit einem zugeordneten Port bzw. Anforderungspfad. TCP-Tests werden ebenfalls unterstützt, können aber nicht ApplicationHealthState über den Testantworttext festlegen und haben keinen Zugriff auf den Zustand Unbekannt.

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

Eigenschaftswerte

Name Wert/Beispiel Datentyp
apiVersion 2018-10-01 oder höher Datum
publisher Microsoft.ManagedServices Zeichenfolge
type ApplicationHealthLinux (Linux), ApplicationHealthWindows (Windows) Zeichenfolge
typeHandlerVersion 2.0 Zeichenfolge

Einstellungen

Name Wert/Beispiel Datentyp
Protokoll http oder https oder tcp Zeichenfolge
port Optional, wenn das Protokoll http oder https ist, obligatorisch, wenn das Protokoll tcp ist. INT
requestPath Obligatorisch, wenn das Protokoll http oder https ist, nicht zulässig, wenn das Protokoll tcp ist. Zeichenfolge
intervalInSeconds Optional, der Standardwert ist 5 Sekunden. Mit dieser Einstellung wird das Intervall zwischen den einzelnen Integritätstests festgelegt. Wenn beispielsweise intervalInSeconds == 5 ist, wird ein Test einmal alle 5 Sekunden an den lokalen Anwendungsendpunkt gesendet. INT
numberOfProbes Optional, der Standardwert ist 1. Diese Einstellung ist die Anzahl der aufeinanderfolgenden Tests, die für die Änderung des Integritätsstatus erforderlich sind. Wenn beispielsweise numberOfProbles == 3 ist, benötigen Sie 3 aufeinander folgende „Fehlerfrei“-Signale, um den Integritätsstatus von „Fehlerhaft“/„Unbekannt“ in den Zustand „Fehlerfrei“ zu ändern. Die gleiche Anforderung gilt für die Änderung des Integritätsstatus in den Zustand „Fehlerhaft“ oder „Unbekannt“. INT
gracePeriod Optional, Standard = intervalInSeconds * numberOfProbes; die maximale Toleranzperiode beträgt 7.200 Sekunden INT

Bereitstellen der Application Health-Erweiterung

Es gibt mehrere Möglichkeiten, die Anwendungsintegritätserweiterung für Ihre VMs bereitzustellen, wie in den folgenden Beispielen beschrieben.

Binary Health States

Im folgenden Beispiel wird die Anwendungsintegritätserweiterung namens myHealthExtension einer Windows-basierten VM hinzugefügt.

Sie können dieses Beispiel auch verwenden, um eine vorhandene Erweiterung von Rich Health State in Binary Health zu ändern, indem Sie anstelle eines PUT-Aufrufs einen PATCH-Aufruf ausführen.

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

Verwenden Sie PATCH, um eine bereits bereitgestellte Erweiterung zu bearbeiten.

Rich Health States

Im folgenden Beispiel wird die Erweiterung Application Health – Rich States (mit dem Namen „myHealthExtension“) einer Windows-basierten VM hinzugefügt.

Sie können dieses Beispiel auch verwenden, um eine vorhandene Erweiterung von Binary in Rich Health State zu ändern, indem Sie anstelle eines PUT einen PATCH-Aufruf ausführen.

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

Verwenden Sie PATCH, um eine bereits bereitgestellte Erweiterung zu bearbeiten.

Problembehandlung

Benötigen Sie Hilfe beim Konfigurieren einer Testantwort?

Beispiele für das Ausgeben von Integritätstestantworten an einen lokalen Endpunkt finden Sie unter Beispiele für Anwendungsintegrität.

Anzeigen von VMHealth

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

Beispielantwort (siehe vmHealth-Objekt, um den aktuellen VM-Status anzuzeigen):

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

Ausgabeprotokoll für die Erweiterungsausführung

Die Ausgabe der Erweiterungsausführung wird in Dateien in folgenden Verzeichnissen protokolliert:

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

Die Protokolle erfassen auch in regelmäßigen Abständen den Integritätsstatus der Anwendung.