Teilen über


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-Befehlszeilenschnittstelle aktivieren, um Anwendungskonsolenprotokolle in Echtzeit für die Problembehandlung zu erhalten. 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. Weitere Informationen zum Streamen von Protokollen finden Sie unter Streamen von Azure Spring Apps-Auftragsprotokollen in Echtzeit und Streamen von Azure Spring Apps-Protokollen zu verwalteten Komponenten in Echtzeit.

Voraussetzungen

Verwenden der Azure-Befehlszeilenschnittstelle zum Generieren von Protokollfragmenten

Dieser Abschnitt bietet Beispiele für die Verwendung der Azure CLI zum Erzeugen von Protokollfragmenten. 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 ähnlich den folgenden Beispielen zurück, wobei auth-service der Anwendungsname ist.

...
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 generiert 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 wie im folgenden Beispiel gezeigt hinzu:

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 eines Azure Spring Apps-App-Protokolls an eine VNet-Injektionsinstanz

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 die Aktivierung des Protokollstreamingendpunkts im öffentlichen Netzwerk wird Ihrem virtuellen Netzwerk eine öffentliche IP-Adresse für eingehenden Datenverkehr hinzugefügt. Seien Sie vorsichtig, wenn dies für Sie ein Problem darstellt.

Verwenden Sie die folgenden Schritte, um einen Endpunkt für das Protokollstreaming im öffentlichen Netzwerk zu aktivieren:

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

  2. Wählen Sie die Registerkarte VNet-Injektion aus.

  3. Ändern Sie den Status von Ressourcen auf Datenebene im öffentlichen Netzwerk in Aktivieren, um einen Endpunkt für das Protokollstreaming im öffentlichen Netzwerk zu aktivieren. Dieser Vorgang dauert einige Minuten.

    Screenshot: Seite „Netzwerk“ im Azure-Portal mit ausgewählter Registerkarte „VNet-Injektion“ und hervorgehobenem Abschnitt „Problembehandlung“

Nachdem Sie den öffentlichen Endpunkt für den Protokollstream aktiviert haben, können Sie aus einem öffentlichen Netzwerk genau so auf die App-Protokolle zugreifen, wie Sie auf eine normale Instanz zugreifen würden.

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 unter Tutorial: Filtern von Netzwerkdatenverkehr mithilfe einer Netzwerksicherheitsgruppe über das 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 Endpunkts für den Protokollstream nicht über das Internet auf App-Protokolle in der VNet-Injektionsinstanz zugreifen können, überprüfen Sie Ihre Netzwerksicherheitsgruppe, um zu ermitteln, ob Sie solchen eingehenden Datenverkehr zugelassen haben.

Die folgende Tabelle zeigt ein Beispiel für eine empfohlene Basisregel: 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