Partilhar via


Transmita logs de componentes gerenciados do Azure Spring Apps em tempo real

Note

Os planos Basic, Standarde Enterprise entraram em um período de aposentadoria em 17 de março de 2025. Para obter mais informações, consulte o anúncio de aposentadoria do Azure Spring Apps.

Este artigo aplica-se a: ❎ Basic/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 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 obter mais informações sobre logs de streaming, consulte Transmitir logs do console do aplicativo Azure Spring Apps em tempo real e Transmitir logs de trabalho do Azure Spring Apps em tempo real.

Prerequisites

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

Componentes gerenciados suportados

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

Componente gerenciado Subcomponents
Serviço de Configuração de Aplicativos application-configuration-service
flux-source-controller (Suportado na versão ACS Gen2)
Gateway de nuvem Spring 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ê deve 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 obrigatória Operations
Serviço de Configuração de Aplicativos Função de Leitor de Log do Serviço de Configuração de Aplicativo do Azure Spring Apps Microsoft.AppPlatform/Spring/ApplicationConfigurationService/logstream/action
Gateway de nuvem Spring Função de leitor de log do Azure Spring Apps Spring Cloud Gateway Microsoft.AppPlatform/Spring/SpringCloudGateway/logstream/action
Servidor de configuração do Spring Cloud Função de leitor de log do Azure Spring Apps Spring Cloud Config Server 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 sua instância de serviço do Azure Spring Apps.

  3. No painel de navegação, selecione Controle de acesso (IAM).

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

    Captura de ecrã do portal do Azure que mostra a página Controlo 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 , procure e selecione a função de destino e, em seguida, selecione Avançar.

    Captura de ecrã do portal do Azure que mostra a página Adicionar atribuição de função com o nome da Função de Leitor de Registo do Serviço de Configuração de Aplicação realçado.

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

  7. Selecione Verificar + 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 da flux-source-controller 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

Ver registos finais

Esta seção apresenta exemplos de como usar a CLI do Azure para produzir logs finais.

Exibir logs de cauda para uma instância específica

Para exibir os registos de cauda de uma instância específica, use os comandos az spring component logs com o argumento -i/--instance, conforme mostrado na próxima seção.

Exibir logs finais para uma instância de application-configuration-service

Use o seguinte comando para visualizar os últimos 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 exemplo a seguir:

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

Visualizar logs finais para uma instância de flux-source-controller

Use o seguinte comando para visualizar os logs de tail 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 exemplo a seguir:

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

Visualizar logs de término para uma instância de Spring Cloud Gateway

Use o seguinte comando para ver as últimas entradas de 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 exemplo a seguir:

...
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 logs de cauda para uma instância de spring-cloud-gateway-operator

Utilize o seguinte comando para visualizar os últimos 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 exemplo a seguir:

...
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 de cauda para uma instância do config-server

Use o seguinte comando para ver os logs finais 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 exemplo a seguir:

...
{"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 logs de cauda para todas as instâncias em um comando

Para exibir os logs de cauda para todas as instâncias, use o --all-instances argumento, 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, para que os logs de uma instância não sejam 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

Transmita novos logs continuamente

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

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

Registos de fluxo de 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

Registos de transmissão para todas as instâncias

Use o seguinte comando para transmitir registos 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 se efetua a transmissão de registos de várias instâncias num componente, os registos de uma instância intercalam com os de outras.

Transmitir registos numa instância de injeção de rede virtual

Para uma instância do Azure Spring Apps implantada numa rede virtual personalizada, é possível aceder à transmissão de registos por padrão a partir de uma rede privada. Para obter mais informações, consulte Implantar aplicativos Azure Spring em uma rede virtual

O Azure Spring Apps também permite que você acesse logs de componentes gerenciados em tempo real de uma rede pública.

Note

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

Use as seguintes etapas para configurar um endpoint de streaming de log na rede pública.

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

  2. Selecione o separador Injeção Vnet.

  3. Altere o estado dos recursos do Dataplane na rede pública para Ativar, de modo a ativar um endpoint de transmissão de log na rede pública. Este processo demora alguns minutos.

    Captura de ecrã do portal do Azure que mostra a página Rede com o separador Injeção de Vnet selecionado e a secção Resolução de Problemas realçada.

Depois de ativar o ponto de extremidade público do fluxo de logs, pode aceder aos logs dos componentes geridos a partir de uma rede pública, tal como acederia a uma instância normal.

Segurar o tráfego para o ponto de extremidade público de transmissão de logs

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

Para garantir a segurança de seus componentes gerenciados quando você expõe um ponto de extremidade público para eles, proteja o ponto de extremidade filtrando o tráfego de rede para seu serviço com um grupo de segurança de rede. Para obter mais informações, consulte Tutorial: 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 de vários tipos de recursos do Azure. Para cada regra, pode especificar a origem e o destino, a porta e o protocolo.

Note

Se não conseguir aceder aos registos de componentes geridos na instância de injeção de rede virtual a partir da Internet depois de ativar um ponto de extremidade público de fluxo de registos, verifique o seu grupo de segurança de rede para ver se 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 Name Port Protocol Source Destination Action
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óximos passos