Streamen von Azure Spring Apps-Anwendungskonsolenprotokollen in Echtzeit

Hinweis

Azure Spring Apps ist der neue Name für den Azure Spring Cloud-Dienst. Obwohl der Dienst umbenannt wurde, wird der alte Name noch an einigen Stellen verwendet, solange wir Ressourcen wie Screenshots, Videos und Diagramme aktualisieren.

Dieser Artikel gilt für: ✔️ Java ✔️ C#

Dieser Artikel gilt für: ✔️ Basic/Standard ✔️ Enterprise

In diesem Artikel wird beschrieben, wie Sie das Protokollstreaming in der Azure CLI aktivieren, um Anwendungskonsolenprotokolle in Echtzeit zur Problembehandlung abzurufen. Sie können auch Diagnoseeinstellungen verwenden, um Diagnosedaten in Azure Spring Apps zu analysieren. Weitere Informationen finden Sie unter Analysieren von Protokollen und Metriken mit Diagnoseeinstellungen.

Streamingprotokolle verwalteter Komponenten in Azure Spring Apps finden Sie in Echtzeit unter Stream Von Azure Spring Apps verwaltete Komponentenprotokolle.

Voraussetzungen

Verwenden der Azure CLI zum Erstellen von Tail-Protokollen

Dieser Abschnitt enthält Beispiele für die Verwendung der Azure CLI zum Erstellen von Tail-Protokollen. Legen Sie den Namen der Standardressourcengruppe und den Clusternamen mit den folgenden Befehlen fest, um die wiederholte Angabe von Ressourcengruppen- und Dienstinstanznamen zu vermeiden:

az config set defaults.group=<service-group-name>
az config set defaults.spring=<service-instance-name>

Der Ressourcengruppenname und der Dienstname werden in den folgenden Beispielen ausgelassen.

Anzeigen des Protokollfragments für eine App mit einer einzelnen Instanz

Wenn eine App mit dem Namen auth-service nur über eine Instanz verfügt, können Sie das Protokoll der App-Instanz mit dem folgenden Befehl anzeigen:

az spring app logs --name <application-name>

Der Befehl gibt Protokolle zurück, die den folgenden Beispielen ähneln. Dabei auth-service handelt es sich um den Anwendungsnamen.

...
2020-01-15 01:54:40.481  INFO [auth-service,,,] 1 --- [main] o.apache.catalina.core.StandardService  : Starting service [Tomcat]
2020-01-15 01:54:40.482  INFO [auth-service,,,] 1 --- [main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.22]
2020-01-15 01:54:40.760  INFO [auth-service,,,] 1 --- [main] o.a.c.c.C.[Tomcat].[localhost].[/uaa]  : Initializing Spring embedded WebApplicationContext
2020-01-15 01:54:40.760  INFO [auth-service,,,] 1 --- [main] o.s.web.context.ContextLoader  : Root WebApplicationContext: initialization completed in 7203 ms

...

Anzeigen des Protokollfragments für eine App mit mehreren Instanzen

Wenn mehrere Instanzen für eine App mit dem Namen auth-service vorhanden sind, können Sie das Instanzprotokoll mithilfe der Option -i/--instance anzeigen.

Führen Sie zuerst den folgenden Befehl aus, um die Namen der App-Instanz abzurufen:

az spring app show --name auth-service --query properties.activeDeployment.properties.instances --output table

Der Befehl erzeugt Ergebnisse ähnlich der folgenden Ausgabe:

Name                                         Status    DiscoveryStatus
-------------------------------------------  --------  -----------------
auth-service-default-12-75cc4577fc-pw7hb  Running   UP
auth-service-default-12-75cc4577fc-8nt4m  Running   UP
auth-service-default-12-75cc4577fc-n25mh  Running   UP

Anschließend können Sie Protokolle einer App-Instanz mit der Option -i/--instance wie folgt streamen:

az spring app logs --name auth-service --instance auth-service-default-12-75cc4577fc-pw7hb

Sie können auch Details zu App-Instanzen im Azure-Portal anzeigen. Nachdem Sie im linken Navigationsbereich Ihres Azure Spring Apps-Diensts Apps ausgewählt haben, wählen Sie App-Instanzen aus.

Fortlaufendes Streamen neuer Protokolle

Standardmäßig gibt az spring app logs nur vorhandene Protokolle aus, die an die App-Konsole gestreamt werden, und wird dann beendet. Wenn Sie neue Protokolle streamen möchten, fügen Sie das -f/--follow Argument hinzu, wie im folgenden Beispiel gezeigt:

az spring app logs --name auth-service --follow

Wenn Sie das Argument --follow verwenden, um sofortige Protokolle zu verfolgen, sendet der Azure Spring Apps-Protokollstreamingdienst jede Minute Heartbeatprotokolle an den Client – es sei denn, dass Ihre Anwendung ständig Protokolle schreibt. Heartbeatprotokollnachrichten verwenden das folgende Format: 2020-01-15 04:27:13.473: No log from server.

Verwenden Sie den folgenden Befehl, um alle unterstützten Protokollierungsoptionen zu überprüfen:

az spring app logs --help

Formatieren strukturierter JSON-Protokolle

Hinweis

Das Formatieren von JSON-strukturierten Protokollen erfordert die Spring-Erweiterung, Version 2.4.0 oder höher.

Strukturierte Anwendungsprotokolle werden im JSON-Format angezeigt, was schwierig zu lesen sein kann. Sie können das Argument --format-json verwenden, um Protokolle im JSON-Format in ein besser lesbares Format zu formatieren. Weitere Informationen finden Sie unter Strukturiertes Anwendungsprotokoll für Azure Spring Apps.

Das folgende Beispiel zeigt die Verwendung des Arguments --format-json:

# Raw JSON log
$ az spring app logs --name auth-service
{"timestamp":"2021-05-26T03:35:27.533Z","logger":"com.netflix.discovery.DiscoveryClient","level":"INFO","thread":"main","mdc":{},"message":"Disable delta property : false"}
{"timestamp":"2021-05-26T03:35:27.533Z","logger":"com.netflix.discovery.DiscoveryClient","level":"INFO","thread":"main","mdc":{},"message":"Single vip registry refresh property : null"}

# Formatted JSON log
$ az spring app logs --name auth-service --format-json
2021-05-26T03:35:27.533Z  INFO [           main] com.netflix.discovery.DiscoveryClient   : Disable delta property : false
2021-05-26T03:35:27.533Z  INFO [           main] com.netflix.discovery.DiscoveryClient   : Single vip registry refresh property : null

Das Argument --format-json akzeptiert auch ein optionales, angepasstes Format unter Verwendung der Syntax der Formatzeichenfolge („format string syntax“). Weitere Informationen finden Sie unter Syntax der Formatzeichenfolge („Format String Syntax“).

Das folgende Beispiel zeigt die Verwendung der Syntax der Formatzeichenfolge („format string syntax“):

# Custom format
$ az spring app logs --name auth-service --format-json="{message}{n}"
Disable delta property : false
Single vip registry refresh property : null

Das verwendete Standardformat lautet:

{timestamp} {level:>5} [{thread:>15.15}] {logger{39}:<40.40}: {message}{n}{stackTrace}

Streamen einer Azure Spring Apps-App-Anmeldung in einer Instanz für virtuelle Netzwerkeinjektion

Bei einer Azure Spring Apps-Instanz, die in einem benutzerdefinierten virtuellen Netzwerk bereitgestellt wird, können Sie standardmäßig über ein privates Netzwerk auf das Protokollstreaming zugreifen. Weitere Informationen finden Sie unter Bereitstellen von Azure Spring Apps in einem virtuellen Netzwerk.

Azure Spring Apps ermöglicht ihnen auch den Zugriff auf App-Protokolle in Echtzeit aus einem öffentlichen Netzwerk über das Azure-Portal oder mithilfe der Azure CLI.

Hinweis

Durch Aktivieren des Protokollstreamingendpunkts im öffentlichen Netzwerk wird Ihrem virtuellen Netzwerk eine öffentliche eingehende IP hinzugefügt. Achten Sie darauf, Vorsicht zu verwenden, wenn dies ein Anliegen für Sie ist.

Führen Sie die folgenden Schritte aus, um einen Protokollstreamingendpunkt im öffentlichen Netzwerk zu aktivieren:

  1. Wählen Sie die Azure Spring Apps-Dienstinstanz aus, die in Ihrem virtuellen Netzwerk bereitgestellt wurde, und wählen Sie dann im Navigationsmenü "Netzwerk" aus.

  2. Wählen Sie die Registerkarte " Vnet Injection" aus .

  3. Wechseln Sie den Status von Dataplane-Ressourcen im öffentlichen Netzwerk, um einen Protokollstreamingendpunkt im öffentlichen Netzwerk zu aktivieren. Dieser Vorgang dauert einige Minuten.

    Screenshot of the Azure portal that shows the Networking page with the Vnet injection tab selected and the Troubleshooting section highlighted.

Nachdem Sie den öffentlichen Protokolldatenstrom-Endpunkt aktiviert haben, können Sie auf das App-Protokoll über ein öffentliches Netzwerk zugreifen, genau wie auf eine normale Instanz.

Sichern des Datenverkehrs an den öffentlichen Endpunkt für das Protokollstreaming

Das Protokollstreaming verwendet denselben Schlüssel wie der in Einrichten einer Stagingumgebung in Azure Spring Apps beschriebene Testendpunkt, um die Verbindungen mit Ihren Bereitstellungen zu authentifizieren. Daher können nur Benutzer, die über Lesezugriff für die Testschlüssel verfügen, auf Protokollstreaming zugreifen.

Um die Sicherheit Ihrer Anwendungen sicherzustellen, wenn Sie einen öffentlichen Endpunkt für sie verfügbar machen, schützen Sie den Endpunkt, indem Sie den Netzwerkdatenverkehr an Ihren Dienst mit einer Netzwerksicherheitsgruppe filtern. Weitere Informationen finden Sie im Lernprogramm: Filtern des Netzwerkdatenverkehrs mit einer Netzwerksicherheitsgruppe mithilfe der Azure-Portal. Eine Netzwerksicherheitsgruppe enthält Sicherheitsregeln, die eingehenden Netzwerkdatenverkehr an verschiedene Typen von Azure-Ressourcen oder ausgehenden Netzwerkdatenverkehr von diesen zulassen oder verweigern. Für jede Regel können Sie die Quelle und das Ziel, den Port und das Protokoll angeben.

Hinweis

Wenn Sie nach dem Aktivieren eines öffentlichen Protokolldatenstroms nicht auf App-Protokolle in der Instanz für das virtuelle Netzwerkeinfügung aus dem Internet zugreifen können, überprüfen Sie Ihre Netzwerksicherheitsgruppe, um festzustellen, ob Sie einen solchen eingehenden Datenverkehr zugelassen haben.

Die folgende Tabelle zeigt ein Beispiel für eine grundlegende Regel, die empfohlen wird. Sie können Befehle wie nslookup mit dem Endpunkt <service-name>.private.azuremicroservices.io verwenden, um die Ziel-IP-Adresse eines Diensts abzurufen.

Priority Name Port Protokoll Quelle Ziel Aktion
100 Regelname 80 TCP Internet Dienst-IP-Adresse Zulassen
110 Regelname 443 TCP Internet Dienst-IP-Adresse Zulassen

Nächste Schritte