Streamen von Azure Spring Apps-Protokollen verwalteter Komponenten 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:❌ Basic/Standard ✔️ Enterprise

In diesem Artikel wird beschrieben, wie Sie die Azure CLI zum Abrufen von Echtzeitprotokollen verwalteter Komponenten für die Problembehandlung verwenden. 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.

Informationen zu Streamingprotokollen von Anwendungen in Azure Spring Apps finden Sie unter Streamen von Azure Spring Apps-Anwendungskonsolenprotokollen in Echtzeit.

Voraussetzungen

  • Azure CLI mit der Azure Spring Apps-Erweiterung, Version 1.19.0 oder höher. Sie können diese Erweiterung mit dem folgenden Befehl installieren: az extension add --name spring.

Unterstützte verwaltete Komponenten

In der folgenden Tabelle sind die verwalteten Komponenten aufgeführt, die derzeit unterstützt werden, sowie deren Unterkomponenten:

Verwaltete Komponente Unterkomponenten
Anwendungskonfigurationsdienst application-configuration-service
flux-source-controller (in ACS Gen2-Version unterstützt)
Spring Cloud Gateway spring-cloud-gateway
spring-cloud-gateway-operator

Sie können den folgenden Befehl verwenden, um alle Unterkomponenten aufzulisten:

az spring component list
    --resource-group <resource-group-name> \
    --service <Azure-Spring-Apps-instance-name>

Zuweisen einer Azure-Rolle

Damit Sie die Protokolle verwalteter Komponenten streamen können, müssen Ihnen die relevanten Azure-Rollen zugewiesen sein. In der folgenden Tabelle sind die erforderlichen Rollen und die Vorgänge aufgeführt, für die diesen Rollen Berechtigungen erteilt wurden:

Verwaltete Komponente Erforderliche Rolle Vorgänge
Anwendungskonfigurationsdienst Rolle „Protokollleser für den Azure Spring Apps-Anwendungskonfigurationsdienst“ Microsoft.AppPlatform/Spring/ApplicationConfigurationService/logstream/action
Spring Cloud Gateway Rolle „Spring Cloud Gateway-Protokollleser für Azure Spring Apps“ Microsoft.AppPlatform/Spring/SpringCloudGateway/logstream/action

Führen Sie die folgenden Schritte aus, um eine Azure-Rolle über das Azure-Portal zuzuweisen:

  1. Öffnen Sie das Azure-Portal.

  2. Öffnen Sie Ihre Azure Spring Apps-Dienstinstanz.

  3. Wählen Sie im Navigationsbereich Zugriffssteuerung (IAM) aus.

  4. Wählen Sie auf der Seite Zugriffssteuerung (IAM) die Option Hinzufügen und dann Rollenzuweisung hinzufügen aus.

    Screenshot: Azure-Portal mit der Seite „Zugriffssteuerung (IAM)“ mit hervorgehobener Option „Rollenzuweisung hinzufügen“

  5. Suchen Sie auf der Seite Rollenzuweisung hinzufügen in der Liste Name die Zielrolle, und wählen Sie sie und anschließend Weiter aus.

    Screenshot: Azure-Portal mit der Seite „Rollenzuweisung hinzufügen“ mit hervorgehobenem Namen „Protokollleserrolle für den Anwendungskonfigurationsdienst“

  6. Wählen Sie Mitglieder aus, suchen Sie nach Ihrem Benutzernamen, und wählen Sie diesen dann aus.

  7. Wählen Sie Überprüfen und zuweisen aus.

Auflisten aller Instanzen in einer Komponente

Verwenden Sie den folgenden Befehl, um alle Instanzen in einer Komponente aufzulisten:

az spring component instance list \
    --resource-group <resource-group-name> \
    --service <Azure-Spring-Apps-instance-name> \
    --component <component-name>

Wenn Sie beispielsweise alle Instanzen für flux-source-controller in der ACS Gen2-Version auflisten möchten, verwenden Sie den folgenden Befehl:

az spring component instance list \
    --resource-group <resource-group-name> \
    --service <Azure-Spring-Apps-instance-name> \
    --component flux-source-controller

Anzeigen von Protokollfragmenten

Dieser Abschnitt bietet Beispiele für die Verwendung der Azure CLI zum Erzeugen von Protokollfragmenten.

Anzeigen von Protokollfragmenten für eine bestimmte Instanz

Wenn Sie die Protokollfragmente für eine bestimmte Instanz anzeigen möchten, verwenden Sie den Befehl az spring component logs mit dem Argument -i/--instance, wie im nächsten Abschnitt gezeigt.

Anzeigen von Protokollfragmenten für eine Instanz von application-configuration-service

Führen Sie den folgenden Befehl aus, um die Protokollfragmente für application-configuration-service anzuzeigen:

az spring component logs \
    --resource-group <resource-group-name> \
    --service <Azure-Spring-Apps-instance-name> \
    --name application-configuration-service \
    --instance <instance-name>

Bei ACS Gen2 gibt der Befehl Protokolle wie im folgenden Beispiel zurück:

...
2023-12-18T07:09:54.020Z  INFO  16715 --- [main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8090 (https)
2023-12-18T07:09:54.116Z  INFO  16715 --- [main] org.apache.juli.logging.DirectJDKLog     : Starting service [Tomcat]
2023-12-18T07:09:54.117Z  INFO  16715 --- [main] org.apache.juli.logging.DirectJDKLog     : Starting Servlet engine: [Apache Tomcat/10.1.12]
2023-12-18T07:09:54.522Z  INFO  16715 --- [main] org.apache.juli.logging.DirectJDKLog     : Initializing Spring embedded WebApplicationContext
2023-12-18T07:09:54.524Z  INFO  16715 --- [main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 14100 ms
2023-12-18T07:09:56.920Z  INFO  16715 --- [main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8090 (https) with context path ''
2023-12-18T07:09:57.528Z  INFO  16715 --- [main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8081 (http)
2023-12-18T07:09:57.529Z  INFO  16715 --- [main] org.apache.juli.logging.DirectJDKLog     : Starting service [Tomcat]
2023-12-18T07:09:57.529Z  INFO  16715 --- [main] org.apache.juli.logging.DirectJDKLog     : Starting Servlet engine: [Apache Tomcat/10.1.12]
2023-12-18T07:09:57.629Z  INFO  16715 --- [main] org.apache.juli.logging.DirectJDKLog     : Initializing Spring embedded WebApplicationContext
2023-12-18T07:09:57.629Z  INFO  16715 --- [main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 603 ms
2023-12-18T07:09:57.824Z  INFO  16715 --- [main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8081 (http) with context path ''
2023-12-18T07:09:58.127Z  INFO  16715 --- [main] o.springframework.boot.StartupInfoLogger : Started ReconcilerApplication in 21.005 seconds (process running for 22.875)
...

Anzeigen von Protokollfragmenten für eine Instanz von flux-source-controller

Führen Sie den folgenden Befehl aus, um die Protokollfragmente für flux-source-controller anzuzeigen:

az spring component logs \
    --resource-group <resource-group-name> \
    --service <Azure-Spring-Apps-instance-name> \
    --name flux-source-controller \
    --instance <instance-name>

Der Befehl gibt Protokolle wie im folgenden Beispiel zurück:

...
{"level":"info","ts":"2023-12-18T07:07:54.615Z","logger":"controller-runtime.metrics","msg":"Metrics server is starting to listen","addr":":8080"}
{"level":"info","ts":"2023-12-18T07:07:54.615Z","logger":"setup","msg":"starting manager"}
{"level":"info","ts":"2023-12-18T07:07:54.615Z","msg":"Starting server","path":"/metrics","kind":"metrics","addr":"[::]:8080"}
{"level":"info","ts":"2023-12-18T07:07:54.615Z","msg":"Starting server","kind":"health probe","addr":"[::]:9440"}
{"level":"info","ts":"2023-12-18T07:07:54.817Z","logger":"runtime","msg":"attempting to acquire leader lease flux-system/source-controller-leader-election...\n"}
{"level":"info","ts":"2023-12-18T07:07:54.830Z","logger":"runtime","msg":"successfully acquired lease flux-system/source-controller-leader-election\n"}
...

Anzeigen von Protokollfragmenten für eine Instanz von spring-cloud-gateway

Führen Sie den folgenden Befehl aus, um die Protokollfragmente für spring-cloud-gateway anzuzeigen:

az spring component logs \
    --resource-group <resource-group-name> \
    --service <Azure-Spring-Apps-instance-name> \
    --name spring-cloud-gateway \
    --instance <instance-name>

Der Befehl gibt Protokolle wie im folgenden Beispiel zurück:

...
2023-12-11T14:13:40.310Z  INFO 1 --- [           main] i.p.s.c.g.s.SsoDeactivatedConfiguration  : SSO is deactivated, setting up default security filters
2023-12-11T14:13:40.506Z  INFO 1 --- [           main] .h.HazelcastReactiveSessionConfiguration : Configuring Hazelcast as a session management storage
2023-12-11T14:13:51.008Z  INFO 1 --- [           main] o.s.b.web.embedded.netty.NettyWebServer  : Netty started on port 8443
2023-12-11T14:13:51.810Z  INFO 1 --- [           main] o.s.b.a.e.web.EndpointLinksResolver      : Exposing 7 endpoint(s) beneath base path '/actuator'
2023-12-11T14:13:52.410Z  INFO 1 --- [           main] o.s.b.web.embedded.netty.NettyWebServer  : Netty started on port 8090
2023-12-11T14:13:52.907Z  INFO 1 --- [           main] i.p.s.c.g.r.h.HazelcastRateLimitsRemover : Removing Hazelcast map 'GLOBAL_RATE_LIMIT' with rate limit information
2023-12-11T14:13:52.912Z  INFO 1 --- [           main] i.p.s.cloud.gateway.GatewayApplication   : Started GatewayApplication in 36.084 seconds (process running for 38.651)
...

Anzeigen von Protokollfragmenten für eine Instanz von spring-cloud-gateway-operator

Führen Sie den folgenden Befehl aus, um die Protokollfragmente für spring-cloud-gateway-operator anzuzeigen:

az spring component logs \
    --resource-group <resource-group-name> \
    --service <Azure-Spring-Apps-instance-name> \
    --name spring-cloud-gateway-operator \
    --instance <instance-name>

Der Befehl gibt Protokolle wie im folgenden Beispiel zurück:

...
2023-12-01T08:37:05.080Z  INFO 1 --- [           main] c.v.t.s.OperatorApplication              : Starting OperatorApplication v2.0.6 using Java 17.0.7 with PID 1 (/workspace/BOOT-INF/classes started by cnb in /workspace)
2023-12-01T08:37:05.157Z  INFO 1 --- [           main] c.v.t.s.OperatorApplication              : No active profile set, falling back to 1 default profile: "default"
2023-12-01T08:37:14.379Z  INFO 1 --- [           main] o.s.b.a.e.web.EndpointLinksResolver      : Exposing 1 endpoint(s) beneath base path '/actuator'
2023-12-01T08:37:15.274Z  INFO 1 --- [           main] o.s.b.web.embedded.netty.NettyWebServer  : Netty started on port 8080
2023-12-01T08:37:15.366Z  INFO 1 --- [           main] c.v.t.s.OperatorApplication              : Started OperatorApplication in 11.489 seconds (process running for 12.467)
...

Anzeigen von Protokollfragmenten für alle Instanzen in einem Befehl

Wenn Sie die Protokollfragmente für alle Instanzen anzeigen möchten, verwenden Sie das Argument --all-instances, wie im folgenden Befehl dargestellt. Der Instanzname ist das Präfix jeder Protokollzeile. Bei mehreren Instanzen werden Protokolle für jede Instanz als Batch ausgegeben, sodass sich Protokolle einer Instanz nicht mit den Protokollen einer anderen Instanz überlappen.

az spring component logs \
    --resource-group <resource-group-name> \
    --service <Azure-Spring-Apps-instance-name> \
    --name <component-name> \
    --all-instances

Fortlaufendes Streamen neuer Protokolle

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

Wenn Sie die Option -f/--follow verwenden, um sofortige Protokolle anzufügen, sendet der Azure Spring Apps-Protokollstreamingdienst jede Minute Heartbeatprotokolle an den Client – es sei denn, die Komponente schreibt ständig Protokolle. Heartbeatprotokollnachrichten verwenden das folgende Format: 2023-12-18 09:12:17.745: No log from server.

Streamen von Protokollen für eine bestimmte Instanz

Verwenden Sie den folgenden Befehl, um Protokolle für eine bestimmte Instanz zu streamen:

az spring component logs \
    --resource-group <resource-group-name> \
    --service <Azure-Spring-Apps-instance-name> \
    --name <component-name> \
    --instance <instance-name> \
    --follow

Streamen von Protokollen für alle Instanzen

Verwenden Sie den folgenden Befehl, um Protokolle für alle Instanzen zu streamen:

az spring component logs \
    --resource-group <resource-group-name> \
    --service <Azure-Spring-Apps-instance-name> \
    --name <component-name> \
    --all-instances \
    --follow

Wenn Sie Protokolle für mehrere Instanzen in einer Komponente streamen, überlappen sich die Protokolle einer Instanz mit den Protokollen anderer Instanzen.

Streamen von Protokollen in einer 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 außerdem den Zugriff auf Protokolle verwalteter Komponenten in Echtzeit aus einem öffentlichen Netzwerk.

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 Protokolle verwalteter Komponenten zugreifen, wie Sie auf eine normale Instanz zugreifen würden.

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

Das Protokollstreaming für verwaltete Komponenten verwendet Azure RBAC, um die Verbindungen mit den Komponenten zu authentifizieren. Daher können nur Benutzer, die über die richtigen Rollen verfügen, auf die Protokolle zugreifen.

Um die Sicherheit Ihrer verwalteten Komponenten 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 Protokolle verwalteter Komponenten in der VNet-Injektionsinstanz zugreifen können, überprüfen Sie Ihre Netzwerksicherheitsgruppe, um festzustellen, 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