Transmitir logs do console do aplicativo do Azure Spring Apps em tempo real

Observação

Azure Spring Apps é o novo nome do serviço Azure Spring Cloud. Embora o serviço tenha um novo nome, você verá o nome antigo em alguns locais por um tempo enquanto trabalhamos para atualizar ativos como capturas de tela, vídeos e diagramas.

Este artigo aplica-se a: ✔️ Java ✔️ C#

Este artigo se aplica ao: ✔️ nível Básico/Standard ✔️ nível Enterprise

Este artigo descreve como habilitar o streaming de log na CLI do Azure para obter logs do console do aplicativo em tempo real 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 obter logs de streaming de componentes gerenciados nos Aplicativos Spring do Azure, consulte Transmitir logs de componentes gerenciados do Azure Spring Apps em tempo real.

Pré-requisitos

Usar a CLI do Azure para produzir logs de cauda

Esta seção fornece exemplos de como usar a CLI do Azure para produzir logs de cauda. Para evitar especificar repetidamente o seu grupo de recursos e o nome da instância de serviço, use os seguintes comandos para definir o nome do seu grupo de recursos padrão e o nome do cluster:

az config set defaults.group=<service-group-name>
az config set defaults.spring=<service-instance-name>

O grupo de recursos e o nome do serviço são omitidos nos exemplos a seguir.

Exibir a parte final do log de um aplicativo com uma única instância

Se um aplicativo chamado auth-service tiver apenas uma instância, você poderá exibir o log da instância de aplicativo com o seguinte comando:

az spring app logs --name <application-name>

O comando retorna logs semelhantes aos exemplos a seguir, onde auth-service é o nome do aplicativo.

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

...

Exibir a parte final do log de um aplicativo com múltiplas instâncias

Se existirem várias instâncias para o aplicativo chamado auth-service, você poderá exibir o log da instância usando a opção -i/--instance.

Primeiro, execute o seguinte comando para obter os nomes das instâncias de aplicativo:

az spring app show --name auth-service --query properties.activeDeployment.properties.instances --output table

O comando produz resultados semelhantes à seguinte saída:

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

Em seguida, você pode transmitir logs de uma instância de aplicativo usando a opção -i/--instance, conforme a seguir:

az spring app logs --name auth-service --instance auth-service-default-12-75cc4577fc-pw7hb

Você também pode obter detalhes das instâncias de aplicativo no portal do Azure. Depois de selecionar Aplicativos no painel de navegação à esquerda do serviço do Azure Spring Apps, selecione Instâncias de Aplicativo.

Transmitir continuamente novos logs

Por padrão, az spring app logs imprime somente os logs existentes transmitidos para o console do aplicativo e, em seguida, é encerrado. Se você quiser transmitir novos logs, adicione o -f/--follow argumento, conforme mostrado no exemplo a seguir:

az spring app logs --name auth-service --follow

Quando você usar o argumento --follow para seguir logs instantâneos, o serviço de streaming de log do Azure Spring Apps enviará logs de pulsação para o cliente a cada minuto, a menos que o seu aplicativo esteja gravando logs constantemente. As mensagens de log de pulsação usam o seguinte formato: 2020-01-15 04:27:13.473: No log from server.

Use o seguinte comando para verificar todas as opções de log com suporte:

az spring app logs --help

Formatar logs JSON estruturados

Observação

A formatação de logs estruturados JSON exige a extensão spring versão 2.4.0 ou posteriores.

Os logs de aplicativos estruturados são exibidos no formato JSON, que pode ser difícil de ler. Você pode usar o argumento --format-json para formatar logs no formato JSON para um formato mais legível. Para obter mais informações, confira o Log de aplicativos estruturados para os Aplicativos do Azure Spring.

O exemplo a seguir mostra como usar o argumento --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

O argumento --format-json também aceita um formato personalizado opcional usando Formatar a sintaxe de cadeia de caracteres. Para obter mais informações, confira Formatar a sintaxe da cadeia de caracteres.

O exemplo a seguir mostra como usar Formatar a sintaxe da cadeia de caracteres:

# Custom format
$ az spring app logs --name auth-service --format-json="{message}{n}"
Disable delta property : false
Single vip registry refresh property : null

O formato padrão que está sendo usado é:

{timestamp} {level:>5} [{thread:>15.15}] {logger{39}:<40.40}: {message}{n}{stackTrace}

Transmitir um log de aplicativo do Azure Spring Apps 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

O Azure Spring Apps também permite que você acesse logs de aplicativos em tempo real de uma rede pública usando o portal do Azure ou a CLI do Azure.

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 é 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 do Azure Spring Apps implantada em sua rede virtual e selecione Rede no menu de navegação.

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

  3. Alterne o status dos recursos do Dataplane na rede pública para habilitar um ponto de extremidade de streaming de log na rede pública. Esse processo leva alguns minutos.

    Screenshot of the Azure portal that shows the Networking page with the Vnet injection tab selected and the Troubleshooting section highlighted.

Depois de habilitar o ponto de extremidade público do fluxo de log, você poderá acessar o log do aplicativo de uma rede pública, da mesma forma que acessaria uma instância normal.

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

O streaming de log usa a mesma chave que o ponto de extremidade de teste descrito em Configurar um ambiente de preparo no Azure Spring Apps para autenticar as conexões com as suas implantações. Como resultado, somente os usuários que têm acesso de leitura às chaves de teste podem acessar o streaming de log.

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 os logs do aplicativo na instância de injeção de rede virtual da Internet depois de habilitar um ponto de extremidade público de fluxo de log, verifique 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 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 Permitir
110 Nome da regra 443 TCP Internet Endereço IP do serviço Permitir

Próximas etapas