Solucionar problemas comuns do Azure Spring Apps

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 se aplica ao: ✔️ nível Básico/Standard ✔️ nível Enterprise

Este artigo fornece instruções para solucionar problemas de desenvolvimento no Azure Spring Apps. Para obter mais informações, consulte Perguntas frequentes sobre Aplicativos Spring do Azure.

Disponibilidade, desempenho e problemas de aplicativos

Não consigo iniciar meu aplicativo

Quando o aplicativo não pode ser iniciado, você pode descobrir que seu ponto de extremidade não pode ser conectado ou retorna um erro 502 após algumas tentativas.

Para solucionar problemas, exporte os logs para o Azure Log Analytics. A tabela para os logs de aplicativo Spring é denominada AppPlatformLogsforSpring. Para saber mais, consulte Analisar logs e métricas com configurações de diagnóstico.

A seguinte mensagem de erro pode aparecer em seus logs: org.springframework.context.ApplicationContextException: Unable to start web server

A mensagem indica um dos dois prováveis problemas:

  • Um dos grãos ou uma de suas dependências está ausente.
  • Uma das propriedades do Bean está ausente ou é inválida. Nesse caso, "java.lang.IllegalArgumentException" é exibido.

As associações de serviço também podem causar falhas de inicialização do aplicativo. Para consultar os logs, use palavras-chave relacionadas aos serviços associados. Por exemplo, vamos supor que seu aplicativo tenha uma associação a uma instância do MySQL definida como hora do sistema local. Se o aplicativo falhar ao iniciar, a seguinte mensagem de erro poderá aparecer no log:

"java.sql.SQLException: o valor de fuso horário do servidor “Tempo Universal Coordenado” não é reconhecido ou representa mais de um fuso horário."

Para corrigir esse erro, acesse o server parameters de sua instância do MySQL e altere o valor de time_zone para SYSTEM to +0:00.

Meu aplicativo falha ou gera um erro inesperado

Ao depurar falhas de aplicativo, comece verificando o status da execução e o status de descoberta do aplicativo. Para fazer isso, acesse Aplicativos no portal do Azure para certificar-se de que todos os aplicativos tenham o status Em execução e ATIVO.

  • Se o status for Em execução mas o status de descoberta não for ATIVO, acesse a seção “Meu aplicativo não pode ser registrado”.

  • Se o status de descoberta for ATIVO, acesse Métricas para verificar a integridade do aplicativo. Inspecione as seguintes métricas:

    • tomcat.global.error:

      Todas as exceções de aplicativo Spring são contadas aqui. Se este número for muito alto, acesse o Azure Log Analytics para inspecionar seus logs de aplicativo.

    • jvm.memory.max:

      a quantidade máxima de memória disponível para o aplicativo. O valor pode ser indefinido ou pode mudar ao longo do tempo, se for definido. Se estiver definido, a quantidade de memória usada e comprometida será sempre menor ou igual ao máximo. No entanto, uma alocação de memória pode falhar com uma mensagem OutOfMemoryError se a alocação tentar aumentar a memória usada de maneira que usada > comprometida, mesmo se usada <= máx. ainda for verdadeiro. Nesse caso, tente aumentar o tamanho de heap máximo usando o parâmetro -Xmx.

    • jvm.memory.used:

      A quantidade de memória em bytes que o aplicativo usa atualmente. Para um aplicativo Java de carregamento normal, essa série de métricas forma um padrão de sawtooth, em que o uso de memória aumenta e diminui em pequenos incrementos de forma constante e então cai subitamente. Esse padrão se repete. Essa série de métricas ocorre devido à coleta de lixo dentro da máquina virtual Java, em que as ações de coleta representam quedas no padrão sawtooth.

      Essa métrica é importante para ajudar a identificar problemas de memória, como:

      • Uma explosão de memória no início.
      • A alocação de memória de sobretensão para um caminho lógico específico.
      • Vazamentos de memória gradual.

    Para saber mais, consulte Métricas.

    Observação

    Essas métricas estão disponíveis apenas para aplicativos do Spring Boot. Para habilitar essas métricas, adicione a dependência spring-boot-starter-actuator. Para obter mais informações, consulte a seção Adicionar dependência do acionador de Gerenciar e monitorar com o Spring Boot Actuator.

  • Se o aplicativo falhar ao iniciar, verifique se o aplicativo tem parâmetros jvm válidos. Se a memória jvm estiver definida com um valor muito alto, a seguinte mensagem de erro poderá aparecer em seus logs:

    "a memória necessária 2728741K é maior que os 2000M disponíveis para alocação"

Para saber mais sobre o Log Analytics, confira Introdução ao Log Analytics no Azure Monitor.

Meu aplicativo experimenta alto uso da CPU ou alta utilização de memória

Se seu aplicativo apresentar alta utilização de CPU ou memória, uma das duas coisas será verdadeira:

  • Todas as instâncias de aplicativo apresentam alto uso de CPU ou de memória.
  • Algumas das instâncias de aplicativo apresentam alto uso de CPU ou de memória.

Para verificar qual situação se aplica, use as seguintes etapas:

  1. Vá para Métricas e selecione Percentual de Uso da CPU de Serviço ouMemória de Serviço Usada.
  2. Adicione um filtro App= para especificar qual aplicativo você deseja monitorar.
  3. Divida as métricas por Instância.

Se todas as instâncias estiverem apresentando um alto uso de CPU ou memória, você precisará escalar horizontalmente o aplicativo ou aumentar o uso de CPU ou memória. Para obter mais informações, consulte Tutorial: Dimensionar um aplicativo no Azure Spring Apps.

Se algumas instâncias estiverem apresentando alto uso de CPU ou memória, verifique o status da instância e seu status de descoberta.

Para obter mais informações, consulte Métricas para o Azure Spring Apps.

Se todas as instâncias estiverem em execução, vá para o Azure Log Analytics para consultar os logs de aplicativo e examine sua lógica de código. Essa revisão ajuda você a ver se alguma delas pode afetar o particionamento de escala. Para obter mais informações, consulte Analisar logs e métricas com configurações de diagnóstico.

Para saber mais sobre o Log Analytics, confira Introdução ao Log Analytics no Azure Monitor. Consulte os logs usando a linguagem de consulta Kusto.

Lista de verificação para implantar seu aplicativo Spring ao Azure Spring Apps

Antes de carregar seu aplicativo, verifique se ele atende aos seguintes critérios:

  • O aplicativo pode ser executado localmente com a versão do Java Runtime.
  • A configuração de ambiente (CPU/RAM/Instâncias) atende ao requisito mínimo definido pelo provedor de aplicativos.
  • Os itens de configuração têm seus valores esperados. Para saber mais, confira Configurar uma instância do Spring Cloud Config Server para seu serviço. Para o plano Enterprise, consulte Usar o Serviço de Configuração do Aplicativo.
  • As variáveis de ambiente têm seus valores esperados.
  • Os parâmetros de JVM têm seus valores esperados.
  • É recomendável desabilitar ou remover o Servidor de Configuração e o serviço Registro de Serviço do Spring do pacote de aplicativos.
  • Se algum recurso do Azure for ser associado via Associação de serviço, verifique se os recursos de destino estão ativos e em execução.

Configuração e gerenciamento

Encontrei um problema ao criar uma instância do serviço do Azure Spring Apps

Quando você configura uma instância do serviço do Azure Spring Apps usando o portal do Azure, o Azure Spring Apps executa a validação para você.

Mas se você tentar configurar a instância de serviço de Aplicativos Spring do Azure usando a CLI do Azure ou o modelo do Azure Resource Manager, verifique se você atende às seguintes condições:

  • A assinatura está ativa.
  • O serviço Aplicativos Spring do Azure está disponível na região que você está usando. Para obter mais informações, consulte Perguntas frequentes dos Aplicativos Spring do Azure.
  • O grupo de recursos da instância já foi criado.
  • O nome do recurso está em conformidade com a regra de nomenclatura. O nome deve conter apenas letras minúsculas, números e hifens. O primeiro caractere deve ser uma letra. O último caractere deve ser uma letra ou um número. O valor precisa conter de 2 a 32 caracteres.

Se você quiser configurar a instância do serviço do Azure Spring Apps usando o modelo do Resource Manager, primeiro consulte Entender a estrutura e a sintaxe dos modelos do Azure Resource Manager.

O nome da instância de serviço de Aplicativos Spring do Azure é usado para solicitar um nome de subdomínio em azuremicroservices.io. Portanto, a configuração falhará se o nome entrar em conflito com um existente. Você pode encontrar mais detalhes nos logs de atividade.

Não consigo implantar um aplicativo .NET Core

Você não pode carregar um arquivo .zip para um aplicativo .NET Core Steeltoe usando o portal do Azure ou o modelo do Resource Manager.

Quando você implantar seu pacote de aplicativos usando a CLI do Azure, ela será sondada periodicamente no andamento da implantação e, no final, ela mostra o resultado da implantação.

Verifique se o aplicativo está empacotado no formato .zip correto. Se não for empacotado corretamente, o processo deixará de responder ou você receberá uma mensagem de erro.

Não consigo implantar um pacote JAR

Não é possível carregar o pacote de origem do arquivo Java (JAR) usando o portal do Azure ou o modelo do Resource Manager.

Quando você implantar seu pacote de aplicativos usando a CLI do Azure, ela será sondada periodicamente no andamento da implantação e, no final, ela mostra o resultado da implantação.

Se a sondagem for interrompida, você ainda poderá usar o seguinte comando para buscar os logs de implantação:

az spring app show-deploy-log --name <app-name>

Verifique se o aplicativo está empacotado no formato JAR executável correto. Se não for empacotado corretamente, você receberá uma mensagem de erro semelhante ao exemplo a seguir: Error: Invalid or corrupt jarfile /jar/38bc8ea1-a6bb-4736-8e93-e8f3b52c8714

Não consigo implantar um pacote de origem

Não é possível carregar o pacote JAR de origem usando o portal do Azure ou o modelo do Resource Manager.

Quando você implantar seu pacote de aplicativos usando a CLI do Azure, ela será sondada periodicamente no andamento da implantação e, no final, ela mostra o resultado da implantação.

Se a sondagem for interrompida, você ainda poderá usar o seguinte comando para buscar os logs de implantação e build:

az spring app show-deploy-log --name <app-name>

No entanto, uma instância de serviço de Aplicativos Spring do Azure pode disparar apenas um trabalho de build para um pacote de origem ao mesmo tempo. Para obter mais informações, confira Implantar um aplicativo e Configurar um ambiente de preparo no Azure Spring Apps.

Meu aplicativo não pode ser registrado

Na maioria dos casos, essa situação ocorre quando as Dependências necessárias e a Descoberta de serviço não estão configuradas corretamente em seu arquivo de Modelo de Objeto do Projeto (POM). Depois de configurado, o ponto de extremidade do servidor do registro de serviço interno é injetado como uma variável de ambiente com seu aplicativo. Em seguida, os aplicativos podem se registrar por conta própria no servidor do Registro de Serviço e descobrir outros microsserviços dependentes.

Aguarde pelo menos dois minutos antes que uma instância recém-registrada comece a receber tráfego.

Se você estiver migrando de uma solução baseada no Spring Cloud existente para o Azure, remova ou desabilite as instâncias do Registro de Serviço e do Servidor de Configuração para evitar conflitos com as instâncias gerenciadas fornecidas por Aplicativos Spring do Azure.

Você também pode verificar os logs do cliente do Registro de Serviço no Azure Log Analytics. Para obter mais informações, consulte Analisar logs e métricas com configurações de diagnóstico

Para saber mais sobre o Log Analytics, confira Introdução ao Log Analytics no Azure Monitor. Consulte os logs usando a linguagem de consulta Kusto.

Desejo inspecionar as variáveis de ambiente de meu aplicativo

As variáveis de ambiente informam a estrutura do Azure Spring Apps, garantindo que o Azure entenda onde e como configurar os serviços que compõem seu aplicativo. Verificar se as variáveis de ambiente estão corretas é uma primeira etapa necessária para solucionar problemas potenciais. Use o ponto de extremidade do Atuador do Spring Boot para examinar as variáveis de ambiente.

Aviso

Esse procedimento expõe as variáveis de ambiente usando o ponto de extremidade de teste. Não prossiga se o ponto de extremidade de teste estiver publicamente acessível ou se você tiver atribuído um nome de domínio ao aplicativo.

  1. Ir para https://<your-application-test-endpoint>/actuator/health.

    Uma resposta semelhante a {"status":"UP"} indica que o ponto de extremidade foi habilitado. Se a resposta for negativa, inclua a seguinte dependência em seu arquivo POM.xml:

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    
  2. Com o ponto de extremidade do acionador do Spring Boot habilitado, vá para a portal do Azure e procure a página de configuração do seu aplicativo. Adicione uma variável de ambiente com o nome MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE e o valor *.

  3. Reinicie o aplicativo.

  4. Vá até https://<your-application-test-endpoint>/actuator/env e inspecione a resposta. Ele deverá ser parecido com:

    {
        "activeProfiles": [],
        "propertySources": {,
            "name": "server.ports",
            "properties": {
                "local.server.port": {
                    "value": 1025
                }
            }
        }
    }
    

Observe o nó filho chamado systemEnvironment. Esse nó contém as variáveis de ambiente do aplicativo.

Importante

Lembre-se de reverter a exposição das variáveis de ambiente antes de tornar o aplicativo acessível ao público. Acesse o portal do Azure, procure a página de configuração do aplicativo e exclua esta variável de ambiente: MANAGEMENT_ENDPOINTS_WEB_EXPOSURE_INCLUDE.

Não consigo encontrar métricas ou logs para meu aplicativo

Vá para Aplicativos para certificar-se de que os status do aplicativo sejam Em execução e ATIVO.

Verifique se o JMX está habilitado no pacote de aplicativos. Esse recurso pode ser habilitado com a propriedade de configuração spring.jmx.enabled=true.

Verifique se a dependência spring-boot-actuator está habilitada no pacote de aplicativos e se ela foi inicializada com êxito.

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

Se os logs do aplicativo puderem ser arquivados em uma conta de armazenamento, mas não enviados para o Azure Log Analytics, verifique se você configurou seu espaço de trabalho corretamente. Para obter mais informações, consulte Criar um workspace do Log Analytics. Além disso, lembre-se de que o plano Básico não fornece um SLA (Contrato de Nível de Serviço). Para mais informações, consulte Contratos de Nível de Serviço (SLA) para Serviços Online.

Plano Enterprise

Erro 112039: falha ao efetuar a compra no Azure Marketplace

Falha na criação de uma instância do plano Enterprise de Aplicativos Spring do Azure com o código de erro “112039”. Para obter mais informações, verifique a mensagem de erro detalhada na lista a seguir:

  • “Falha ao efetuar a compra no Azure Marketplace porque o RP Microsoft.SaaS não está registrado na assinatura do Azure.”: o plano Enterprise de Aplicativos Spring do Azure compra uma oferta de SaaS do VMware.

    Você precisa registrar o provedor de recursos Microsoft.SaaS antes de criar a instância Enterprise de Aplicativos Spring do Azure. Consulte como registrar um provedor de recursos.

  • “Falha ao carregar o produto de catálogo vmware-inc.azure-spring-cloud-vmware-tanzu-2 no mercado da assinatura do Azure.”: o endereço da conta de cobrança da sua assinatura do Azure não está na localização com suporte.

    Para obter mais informações, confira a seção Nenhum plano disponível para o mercado '<Localização>'.

  • "Falha ao efetuar a compra no Azure Marketplace devido à verificação de assinatura no contrato legal do Marketplace. Verifique se a assinatura do Azure concordou com os termos de vmware-inc.azure-spring-cloud-vmware-tanzu-2.asa-ent-hr-mtr”: sua assinatura do Azure não assinou os termos da oferta e do plano a serem adquiridos.

    Acesse sua assinatura do Azure e execute o seguinte comando da CLI do Azure para concordar com os termos:

    az term accept \
        --publisher vmware-inc \
        --product azure-spring-cloud-vmware-tanzu-2 \
        --plan asa-ent-hr-mtr
    

    Se isso não ajudar, entre em contato com a equipe de suporte com as informações a seguir.

    • AZURE_TENANT_ID: a ID de locatário do Azure que hospeda a assinatura do Azure
    • AZURE_SUBSCRIPTION_ID: a ID da assinatura do Azure usada para criar a instância do Azure Spring Apps
    • SPRING_CLOUD_NAME: o nome da instância com falha
    • ERROR_MESSAGE: a mensagem de erro observada

Não há nenhum plano disponível para o mercado '<Localização>'

Quando você acessar a oferta de SaaS do plano Enterprise de Aplicativos Spring do Azure no Azure Marketplace, poderá encontrar a mensagem “Não há planos disponíveis para o mercado “<Localização>”” como na imagem a seguir.

Captura de tela do portal do Azure que mostra que não há planos disponíveis para a mensagem de erro de mercado.

O plano Enterprise de Aplicativos Spring do Azure exige que os clientes paguem uma licença para componentes do Tanzu por meio de uma oferta do Azure Marketplace. Para compras no Azure Marketplace, o país ou a região da conta de cobrança da sua assinatura do Azure deve estar nas localizações geográficas com suporte da oferta de SaaS.

O plano Enterprise de Aplicativos Spring do Azure agora dá suporte a todas as localizações geográficas com suporte no Azure Marketplace. Confira Localização geográfica com suporte no Marketplace.

Veja a conta de cobrança da sua assinatura se tiver acesso de administrador. Confira Exibir contas de cobrança.

Preciso do suporte do VMware Spring Runtime (somente plano Enterprise)

O plano Enterprise tem suporte interno do VMware Spring Runtime para que você possa abrir os tíquetes de suporte no VMware se considera que o problema está no escopo do suporte do VMware Spring Runtime. Para entender melhor o próprio suporta a VMware Spring Runtime, consulte o VMware Spring Runtime. Para obter mais informações sobre como registrar e usar esse serviço de suporte, consulte a seção Suporte nas Perguntas frequentes do plano Enterprise do VMware. No caso de outros problemas, abra um tíquete de suporte com a Microsoft.

Próximas etapas