Condividi tramite


Riprodurre in streaming i log dei componenti gestiti di Azure Spring Apps in tempo reale

Nota

I piani Basic, Standard ed Enterprise saranno deprecati a partire dalla metà di marzo 2025, con un periodo di ritiro di 3 anni. È consigliabile eseguire la transizione ad App Azure Container. Per altre informazioni, vedere l'annuncio di ritiro di Azure Spring Apps.

Il piano Standard a consumo e dedicato sarà deprecato a partire dal 30 settembre 2024, con un arresto completo dopo sei mesi. È consigliabile eseguire la transizione ad App Azure Container. Per altre informazioni, vedere Eseguire la migrazione del consumo di Azure Spring Apps Standard e del piano dedicato alle app Azure Container.

Questo articolo si applica a: ❎ Basic/Standard ✅ Enterprise

Questo articolo descrive come usare l'interfaccia della riga di comando di Azure per ottenere i log in tempo reale dei componenti gestiti per la risoluzione dei problemi. È anche possibile usare le impostazioni di diagnostica per analizzare i dati di diagnostica in Azure Spring Apps. Per altre informazioni, vedere Analizzare log e metriche con le impostazioni di diagnostica. Per altre informazioni sui log di streaming, vedere Trasmettere i log della console delle applicazioni di Azure Spring Apps in tempo reale e trasmettere i log dei processi di Azure Spring Apps in tempo reale.

Prerequisiti

  • Interfaccia della riga di comando di Azure con l'estensione Azure Spring Apps, versione 1.24.0 o successiva. È possibile installare l'estensione usando il comando seguente: az extension add --name spring.

Componenti gestiti supportati

La tabella seguente elenca i componenti gestiti attualmente supportati, insieme ai relativi sottocomponenti:

Componente gestito Sottocomponenti
Servizio di configurazione delle applicazioni application-configuration-service
flux-source-controller (Supportato in ACS Gen2 versione)
Spring Cloud Gateway spring-cloud-gateway
spring-cloud-gateway-operator
Spring Cloud Config Server config-server

È possibile usare il comando seguente per elencare tutti i sottocomponenti:

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

Assegnare un ruolo di Azure

Per trasmettere i log dei componenti gestiti, è necessario avere i ruoli di Azure pertinenti assegnati all'utente. Nella tabella seguente sono elencati i ruoli necessari e le operazioni per le quali vengono concessi questi ruoli:

Componente gestito Ruolo necessario Operazioni
Servizio di configurazione delle applicazioni Ruolo lettore del log del servizio di configurazione dell'applicazione di Azure Spring Apps Microsoft.AppPlatform/Spring/ApplicationConfigurationService/logstream/action
Spring Cloud Gateway Ruolo lettore log Spring Cloud Gateway di Azure Spring Apps Microsoft.AppPlatform/Spring/SpringCloudGateway/logstream/action
Spring Cloud Config Server Ruolo lettore log del server spring cloud di configurazione di Azure Spring Apps Microsoft.AppPlatform/Spring/configService/logstream/action

Usare la procedura seguente per assegnare un ruolo di Azure usando il portale di Azure:

  1. Apri il portale di Azure.

  2. Aprire l'istanza del servizio Azure Spring Apps.

  3. Nel riquadro di spostamento selezionare Controllo di accesso (IAM).

  4. Nella pagina Controllo di accesso (IAM) selezionare Aggiungi e quindi Selezionare Aggiungi assegnazione di ruolo.

    Screenshot del portale di Azure che mostra la pagina Controllo di accesso (IAM) con l'opzione Aggiungi assegnazione di ruolo evidenziata.

  5. Nella pagina Aggiungi assegnazione di ruolo, nell'elenco Nome cercare e selezionare il ruolo di destinazione e quindi selezionare Avanti.

    Screenshot del portale di Azure che mostra la pagina Aggiungi assegnazione di ruolo con il nome del ruolo lettore del log del servizio di configurazione applicazione evidenziato.

  6. Selezionare Membri e quindi cercare e selezionare il nome utente.

  7. Seleziona Rivedi + assegna.

Elencare tutte le istanze di un componente

Usare il comando seguente per elencare tutte le istanze di un componente:

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

Ad esempio, per elencare tutte le istanze di flux-source-controller in ACS Gen2, usare il comando seguente:

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

Visualizzare i log della parte finale

Questa sezione fornisce esempi di uso dell'interfaccia della riga di comando di Azure per produrre i log della parte finale.

Visualizzare i log della parte finale per un'istanza specifica

Per visualizzare i log della parte finale per un'istanza specifica, usare il az spring component logs comando con l'argomento -i/--instance , come illustrato nella sezione successiva.

Visualizzare i log della parte finale per un'istanza di application-configuration-service

Usare il comando seguente per visualizzare i log della parte finale per application-configuration-service:

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

Per ACS Gen2, il comando restituisce log simili all'esempio seguente:

...
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)
...

Visualizzare i log della parte finale per un'istanza di flux-source-controller

Usare il comando seguente per visualizzare i log della parte finale per flux-source-controller:

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

Il comando restituisce log simili all'esempio seguente:

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

Visualizzare i log della parte finale per un'istanza di spring-cloud-gateway

Usare il comando seguente per visualizzare i log della parte finale per spring-cloud-gateway:

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

Il comando restituisce log simili all'esempio seguente:

...
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)
...

Visualizzare i log della parte finale per un'istanza di spring-cloud-gateway-operator

Usare il comando seguente per visualizzare i log della parte finale per spring-cloud-gateway-operator:

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

Il comando restituisce log simili all'esempio seguente:

...
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)
...

Visualizzare i log della parte finale per un'istanza di config-server

Usare il comando seguente per visualizzare i log della parte finale per config-server:

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

Il comando restituisce log simili all'esempio seguente:

...
{"app":"config-server","ts":"2024-05-08T05:38:29.44Z","logger":"org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext","level":"INFO","class":"org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext","method":"prepareWebApplicationContext","file":"ServletWebServerApplicationContext.java","line":291,"thread":"main","message":"Root WebApplicationContext: initialization completed in 3771 ms"}
{"app":"config-server","ts":"2024-05-08T05:38:31.058Z","logger":"com.microsoft.azure.spring.service.CloudConfigServerApplication","level":"INFO","class":"org.springframework.boot.StartupInfoLogger","method":"logStarted","file":"StartupInfoLogger.java","line":57,"thread":"main","message":"Started CloudConfigServerApplication in 6.888 seconds (process running for 8.986)"}
...

Visualizzare i log della parte finale per tutte le istanze in un unico comando

Per visualizzare i log della parte finale per tutte le istanze, usare l'argomento --all-instances , come illustrato nel comando seguente. Il nome dell'istanza è il prefisso di ogni riga di log. Quando sono presenti più istanze, i log vengono stampati in batch per ogni istanza, quindi i log di un'istanza non vengono interleavati con i log di un'altra istanza.

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

Trasmettere continuamente nuovi log

Per impostazione predefinita, az spring component logs stampa solo i log esistenti trasmessi alla console e quindi esce. Se si desidera trasmettere nuovi log, aggiungere l'argomento -f/--follow .

Quando si usa l'opzione -f/--follow per la coda dei log istantanei, il servizio di streaming dei log di Azure Spring Apps invia i log heartbeat al client ogni minuto, a meno che il componente non scriva costantemente i log. I messaggi del log heartbeat usano il formato seguente: 2023-12-18 09:12:17.745: No log from server.

Trasmettere i log per un'istanza specifica

Usare il comando seguente per trasmettere i log per un'istanza specifica:

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

Trasmettere i log per tutte le istanze

Usare il comando seguente per trasmettere i log per tutte le istanze:

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

Quando si trasmetteno i log per più istanze in un componente, i log di un'istanza si interleave con i log di altri.

Trasmettere i log in un'istanza di inserimento di rete virtuale

Per un'istanza di Azure Spring Apps distribuita in una rete virtuale personalizzata, è possibile accedere allo streaming dei log per impostazione predefinita da una rete privata. Per altre informazioni, vedere Distribuire Azure Spring Apps in una rete virtuale

Azure Spring Apps consente anche di accedere ai log dei componenti gestiti in tempo reale da una rete pubblica.

Nota

L'abilitazione dell'endpoint di streaming dei log nella rete pubblica aggiunge un indirizzo IP in ingresso pubblico alla rete virtuale. Assicurarsi di prestare attenzione se si tratta di una preoccupazione per te.

Usare la procedura seguente per abilitare un endpoint di streaming dei log nella rete pubblica:

  1. Selezionare l'istanza del servizio Azure Spring Apps distribuita nella rete virtuale quindi selezionare Rete nel menu di spostamento.

  2. Selezionare la scheda Inserimento rete virtuale.

  3. Cambiare lo stato delle risorse di Dataplane nella rete pubblica in Abilita per abilitare un endpoint di streaming dei log nella rete pubblica. Questo processo richiede qualche minuto.

    Screenshot del portale di Azure che mostra la pagina Rete con la scheda Vnet injection selezionata e la sezione Risoluzione dei problemi evidenziata.

Dopo aver abilitato l'endpoint pubblico del flusso di log, è possibile accedere ai log dei componenti gestiti da una rete pubblica esattamente come si accede a un'istanza normale.

Proteggere il traffico verso l'endpoint pubblico dello streaming di log

Il flusso di log per i componenti gestiti usa il controllo degli accessi in base al ruolo di Azure per autenticare le connessioni ai componenti. Di conseguenza, solo gli utenti che dispongono dei ruoli appropriati possono accedere ai log.

Per garantire la sicurezza dei componenti gestiti quando si espone un endpoint pubblico, proteggere l'endpoint filtrando il traffico di rete al servizio con un gruppo di sicurezza di rete. Per altre informazioni vedere Esercitazione: Filtrare il traffico di rete con un gruppo di sicurezza di rete usando il portale di Azure. Un gruppo di sicurezza di rete contiene regole di sicurezza che consentono o rifiutano il traffico di rete in ingresso o in uscita da diversi tipi di risorse di Azure. Per ogni regola, è possibile specificare origine e destinazione, porta e protocollo.

Nota

Se non è possibile accedere ai log dei componenti gestiti nell'istanza di inserimento della rete virtuale da Internet dopo aver abilitato un endpoint pubblico del flusso di log, controllare il gruppo di sicurezza di rete per verificare se è stato consentito tale traffico in ingresso.

Nella tabella seguente viene illustrato un esempio di regola di base consigliata. È possibile usare comandi come nslookup con l'endpoint <service-name>.private.azuremicroservices.io per ottenere l'indirizzo IP di destinazione di un servizio.

Priorità Nome Porta Protocollo Source (Sorgente) Destination Azione
100 Nome regola 80 TCP Internet Indirizzo IP del servizio Consenti
110 Nome regola 443 TCP Internet Indirizzo IP del servizio Consenti

Passaggi successivi