Compartilhar via


Transmitir os logs dos componentes gerenciados dos Aplicativos Spring do Azure em tempo real

Observação

Os planos Básico, Standard e Enterprise serão preteridos a partir de meados de março de 2025, com um período de desativação de 3 anos. Recomendamos a transição para os Aplicativos de Contêiner do Azure. Para mais informações, confira o anúncio de desativação dos Aplicativos Spring do Azure.

O plano Standard de consumo e dedicado será preterido a partir de 30 de setembro de 2024, com um desligamento completo após seis meses. Recomendamos a transição para os Aplicativos de Contêiner do Azure. Para mais informações, confira Migrar o plano Standard de consumo e dedicado dos Aplicativos Spring do Azure para os Aplicativos de Contêiner do Azure.

Este artigo se aplica a(o):❌ Básico/Standard ✔️ Enterprise

Este artigo descreve como usar a CLI do Azure para obter logs em tempo real de componentes gerenciados para solução de problemas. Você também pode usar as configurações de diagnóstico para analisar dados de diagnóstico no Azure Spring Apps. Para obter mais informações, consulte Analisar logs e métricas com configurações de diagnóstico. Para mais informações sobre o streaming de logs, consulte Transmita os logs do console de aplicativos do Aplicativos Spring do Azure em tempo real e Transmita logs de componentes gerenciados do Aplicativos Spring do Azure em tempo real.

Pré-requisitos

  • CLI do Azure com a extensão Aplicativos Spring do Azure, versão 1.24.0 ou superior. Você pode instalar essa extensão executando o seguinte comando: az extension add --name spring.

Componentes gerenciados com suporte

A tabela a seguir lista os componentes gerenciados com suporte no momento, juntamente com os respectivos subcomponentes:

Componente gerenciado Subcomponentes
Serviço de Configuração do Aplicativo application-configuration-service
flux-source-controller (Com suporte na versão do ACS Gen2)
Spring Cloud Gateway spring-cloud-gateway
spring-cloud-gateway-operator
Servidor de Configuração do Spring Cloud config-server

Você pode usar o seguinte comando para listar todos os subcomponentes:

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

Atribuir uma função do Azure

Para transmitir logs de componentes gerenciados, você precisa ter as funções relevantes do Azure atribuídas a você. A tabela a seguir lista as funções necessárias e as operações para as quais essas funções recebem permissões:

Componente gerenciado Função necessária Operações
Serviço de Configuração do Aplicativo Função de leitor de logs do serviço de configuração de aplicativo dos Aplicativos Spring do Azure Microsoft.AppPlatform/Spring/ApplicationConfigurationService/logstream/action
Spring Cloud Gateway Função leitor de log de Gateway de Spring Cloud dos Aplicativos Spring do Azure Microsoft.AppPlatform/Spring/SpringCloudGateway/logstream/action
Servidor de Configuração do Spring Cloud Função de Leitor de Log do Servidor de Configuração do Spring Cloud do Azure Spring Apps Microsoft.AppPlatform/Spring/configService/logstream/action

Use as seguintes etapas para atribuir uma função do Azure usando o portal do Azure:

  1. Abra o Portal do Azure.

  2. Abra a sua instância de serviço dos Aplicativos Spring do Azure.

  3. No painel de navegação à esquerda, selecione Controle de Acesso (IAM).

  4. Na página Controle de Acesso (IAM), selecione Adicionar e, em seguida, Adicionar atribuição de função.

    Captura de tela do portal do Azure que mostra a página Controle de Acesso (IAM) com a opção Adicionar atribuição de função realçada.

  5. Na página Adicionar atribuição de função, na lista Nome, pesquise e selecione a função de destino e selecione Avançar.

    Captura de tela do portal do Azure que mostra a página Adicionar atribuição de função com o nome da função Leitor de Log do Serviço de Configuração de Aplicativo realçado.

  6. Selecione Membros e, em seguida, pesquise e selecione seu nome de usuário.

  7. Selecione Examinar + atribuir.

Listar todas as instâncias em um componente

Use o seguinte comando para listar todas as instâncias em um componente:

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

Por exemplo, para listar todas as instâncias de flux-source-controller na versão do ACS Gen2, use o seguinte comando:

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

Exibir parte final dos logs

Esta seção fornece exemplos de como usar a CLI do Azure para produzir a parte final dos logs.

Exibir a parte final dos logs para uma instância específica

Para exibir as partes finais dos logs de uma instância específica, use o comando az spring component logs com o argumento -i/--instance, conforme mostrado na próxima seção.

Exibir as partes finais dos logs de uma instância do application-configuration-service

Use o seguinte comando para exibir as partes finais dos logs para 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>

Para o ACS Gen2, o comando retorna logs semelhantes ao seguinte exemplo:

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

Exibir as partes finais dos logs de uma instância do flux-source-controller

Use o seguinte comando para exibir as partes finais dos logs para 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>

O comando retorna logs semelhantes ao seguinte exemplo:

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

Exibir as partes finais dos logs de uma instância do spring-cloud-gateway

Use o seguinte comando para exibir as partes finais dos logs para 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>

O comando retorna logs semelhantes ao seguinte exemplo:

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

Exibir as partes finais dos logs para uma instância do spring-cloud-gateway-operator

Use o seguinte comando para exibir as partes finais dos logs para 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>

O comando retorna logs semelhantes ao seguinte exemplo:

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

Exibir logs final de uma instância do servidor de configuração

Use o seguinte comando para exibir as partes finais dos logs para config-server:

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

O comando retorna logs semelhantes ao seguinte exemplo:

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

Exibir as partes finais dos logs para todas as instâncias em um comando

Para exibir as partes finais dos logs de todas as instâncias, use o argumento --all-instances, conforme mostrado no comando a seguir. O nome da instância é o prefixo de cada linha de log. Quando há várias instâncias, os logs são impressos em lote para cada instância, portanto, os logs de uma instância não são intercalados com os logs de outra instância.

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

Transmitir novos logs continuamente

Por padrão, az spring component logs imprime somente os logs existentes transmitidos para o console do aplicativo e, em seguida, é encerrado. Se você quiser transmitir novos logs, adicione o argumento -f/--follow.

Quando você usar a opção -f/--follow para seguir logs instantâneos, o serviço de streaming de log dos Aplicativos Spring do Azure enviará logs de pulsação para o cliente a cada minuto, a menos que o componente esteja gravando logs constantemente. As mensagens de log de pulsação usam o seguinte formato: 2023-12-18 09:12:17.745: No log from server.

Transmitir logs para uma instância específica

Use o seguinte comando para transmitir logs para uma instância específica:

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

Transmitir logs para todas as instâncias

Use o seguinte comando para transmitir logs para todas as instâncias:

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

Quando você transmite logs para várias instâncias em um componente, os logs de uma instância intercalam com logs de outras.

Transmitir logs em uma instância de injeção de rede virtual

Para uma instância de Aplicativos do Azure Spring implantada em uma rede virtual personalizada, você pode acessar o streaming de log por padrão de uma rede privada. Para obter mais informações, confira Implantar o Azure Spring Apps em uma rede virtual

Os Aplicativos Spring do Azure também permitem que você acesse logs de componentes gerenciados em tempo real de uma rede pública.

Observação

Habilitar o ponto de extremidade de streaming de log na rede pública adiciona um IP de entrada público à sua rede virtual. Certifique-se de ter cuidado se isso for uma preocupação para você.

Use as seguintes etapas para habilitar um ponto de extremidade de streaming de log na rede pública:

  1. Selecione a instância de serviço dos Aplicativos Spring do Azure implantada na sua rede virtual e selecione Rede no menu de navegação.

  2. Selecione a guia Injeção de Vnet.

  3. Alterne o status de Recursos de plano de dados na rede pública para Habilitar para habilitar um ponto de extremidade de streaming de log na rede pública. Esse processo leva alguns minutos.

    Captura de tela do portal do Azure que mostra a página Rede com a guia Injeção de Vnet selecionada e a seção Solução de problemas realçada.

Depois de habilitar o ponto de extremidade público do fluxo de log, você pode acessar os logs de componentes gerenciados de uma rede pública, assim como acessaria uma instância normal.

Proteger o tráfego para o ponto de extremidade público de streaming de log

O streaming de log para componentes gerenciados usa o RBAC do Azure para autenticar as conexões com os componentes. Como resultado, somente os usuários que têm as funções adequadas podem acessar os logs.

Para garantir a segurança dos seus aplicativos ao expor um ponto de extremidade público para eles, proteja o ponto de extremidade filtrando o tráfego de rede para o seu serviço com um grupo de segurança de rede. Para obter mais informações, consulteTutorial: Filtrar o tráfego de rede com um grupo de segurança de rede usando o portal do Azure. Um grupo de segurança de rede contém regras de segurança que permitem ou negam o tráfego de rede de entrada ou de saída em relação a vários tipos de recursos do Azure. Para cada regra, você pode especificar origem e destino, porta e protocolo.

Observação

Se você não conseguir acessar logs de aplicativo na instância de injeção de VNet da Internet depois de habilitar um ponto de extremidade público de fluxo de log, verifique o seu grupo de segurança de rede para ver se você permitiu esse tráfego de entrada.

A tabela a seguir mostra um exemplo de uma regra básica que recomendamos. Você pode usar comandos como nslookup com o ponto de extremidade <service-name>.private.azuremicroservices.io para obter o endereço IP de destino de um serviço.

Priority Nome Porta Protocolo Origem Destino Ação
100 Nome da regra 80 TCP Internet Endereço IP do serviço Allow
110 Nome da regra 443 TCP Internet Endereço IP do serviço Allow

Próximas etapas