Como monitorar aplicativos do Spring Boot com o Agente Java do Elastic APM
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 Consumo Standard e dedicado será preterido a partir de 30 de setembro de 2024, com 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 dedicado e consumo Standard dos Aplicativos Spring do Azure para os Aplicativos de Contêiner do Azure.
Este artigo se aplica a: ✔️ Básico/Standard ❌ Enterprise
Este artigo explica como usar o Elastic APM para monitorar aplicativos do Spring Boot em execução no Azure Spring Apps.
Com a solução Elastic Observability, você pode obter observabilidade unificada para:
- Monitorar aplicativos usando o Agente Java do Elastic APM e usando o armazenamento persistente com o Azure Spring Apps.
- Use as configurações de diagnóstico para enviar logs do Azure Spring Apps para o Elastic. Para obter mais informações, confira Analisar logs com o Elastic (ELK) usando configurações de diagnóstico.
O vídeo a seguir apresenta observabilidade unificada para aplicativos do Spring Boot usando o Elastic.
Pré-requisitos
Implantar o aplicativo Spring Petclinic
Este artigo usa o exemplo Spring Petclinic para seguir as etapas necessárias. Use as seguintes etapas para implantar o aplicativo de exemplo:
Siga as etapas em Implantar aplicativos Spring Boot usando o Azure Spring Apps e o MySQL até chegar à seção Implantar aplicativos Spring Boot e definir variáveis de ambiente.
Use a extensão do Azure Spring Apps para a CLI do Azure com o seguinte comando para criar um aplicativo a ser executado no Azure Spring Apps:
az spring app create \ --resource-group <your-resource-group-name> \ --service <your-Azure-Spring-Apps-instance-name> \ --name <your-app-name> \ --is-public true
Habilitar o armazenamento persistente personalizado para o Azure Spring Apps
Use as seguintes etapas para habilitar o armazenamento persistente personalizado:
Siga as etapas em Como habilitar seu armazenamento persistente no Azure Spring Apps.
Use o comando da CLI do Azure a seguir para adicionar armazenamento persistente para seus aplicativos do Azure Spring Apps.
az spring app append-persistent-storage \ --resource-group <your-resource-group-name> \ --service <your-Azure-Spring-Apps-instance-name> \ --name <your-app-name> \ --persistent-storage-type AzureFileVolume \ --share-name <your-Azure-file-share-name> \ --mount-path <unique-mount-path> \ --storage-name <your-mounted-storage-name>
Ativar o Agente Java do Elastic APM
Antes de continuar, você precisa ter à mão suas informações de conectividade do servidor do APM do Elastic APM, o que pressupõe que você implantou o Elastic no Azure. Para obter mais informações, confira Como implantar e gerenciar o Elastic no Microsoft Azure. Para obter essas informações, use as seguintes etapas:
No portal do Azure, acesse a página Visão geral da implantação do Elastic e, em seguida, selecione Gerenciar Implantação de Nuvem do Elastic.
Na sua implantação no Console do Elastic Cloud, selecione a seção APM e Frota para obter o ponto de extremidade e o token secreto do Servidor do APM do Elastic.
Baixe o Agente Java do Elastic APM da Central do Maven.
Upload Carregue o Agente do Elastic APM no armazenamento persistente personalizado que você habilitou anteriormente. Acesse o Compartilhamento de Arquivos do Azure e selecione Upload para adicionar o arquivo JAR do agente.
Depois de ter o ponto de extremidade do Elastic APM e o token secreto, use o comando a seguir para ativar o Agente Java do Elastic APM ao implantar aplicativos. O espaço reservado
<agent-location>
refere-se ao local de armazenamento montado do Agente Java do Elastic APM.az spring app deploy \ --name <your-app-name> \ --artifact-path <unique-path-to-your-app-jar-on-custom-storage> \ --jvm-options='-javaagent:<elastic-agent-location>' \ --env ELASTIC_APM_SERVICE_NAME=<your-app-name> \ ELASTIC_APM_APPLICATION_PACKAGES='<your-app-package-name>' \ ELASTIC_APM_SERVER_URL='<your-Elastic-APM-server-URL>' \ ELASTIC_APM_SECRET_TOKEN='<your-Elastic-APM-secret-token>'
Automatizar o provisionamento
Também é possível executar um pipeline de automação de provisionamento usando o Terraform, o Bicep ou um modelo do ARM (Azure Resource Manager). Esse pipeline pode fornecer uma experiência pragmática completa para instrumentar e monitorar novos aplicativos que você criar e implantar.
Automatizar o provisionamento usando o Terraform
Para configurar as variáveis de ambiente em um modelo do Terraform, adicione o seguinte código ao modelo, substituindo os espaços reservados <...> por seus próprios valores. Para saber mais, confira Gerenciar uma Implantação Ativa do Azure Spring Apps.
resource "azurerm_spring_cloud_java_deployment" "example" {
...
jvm_options = "-javaagent:<elastic-agent-location>"
...
environment_variables = {
"ELASTIC_APM_SERVICE_NAME"="<your-app-name>",
"ELASTIC_APM_APPLICATION_PACKAGES"="<your-app-package>",
"ELASTIC_APM_SERVER_URL"="<your-Elastic-APM-server-URL>",
"ELASTIC_APM_SECRET_TOKEN"="<your-Elastic-APM-secret-token>"
}
}
Automatizar o provisionamento usando um arquivo Bicep
Para configurar as variáveis de ambiente em um arquivo Bicep, adicione o seguinte código ao arquivo, substituindo os espaços reservados <...> pelos seus valores. Para obter mais informações, consulte Microsoft.AppPlatform Spring/apps/deployments.
deploymentSettings: {
environmentVariables: {
ELASTIC_APM_SERVICE_NAME='<your-app-name>',
ELASTIC_APM_APPLICATION_PACKAGES='<your-app-package>',
ELASTIC_APM_SERVER_URL='<your-Elastic-APM-server-URL>',
ELASTIC_APM_SECRET_TOKEN='<your-Elastic-APM-secret-token>'
},
jvmOptions: '-javaagent:<elastic-agent-location>',
...
}
Automatizar o provisionamento usando um modelo ARM
Para configurar as variáveis de ambiente em um modelo do ARM, adicione o seguinte código ao modelo, substituindo os espaços reservados <...> por seus próprios valores. Para obter mais informações, consulte Microsoft.AppPlatform Spring/apps/deployments.
"deploymentSettings": {
"environmentVariables": {
"ELASTIC_APM_SERVICE_NAME"="<your-app-name>",
"ELASTIC_APM_APPLICATION_PACKAGES"="<your-app-package>",
"ELASTIC_APM_SERVER_URL"="<your-Elastic-APM-server-URL>",
"ELASTIC_APM_SECRET_TOKEN"="<your-Elastic-APM-secret-token>"
},
"jvmOptions": "-javaagent:<elastic-agent-location>",
...
}
Atualizar o Agente Java do Elastic APM
Para planejar seu upgrade, confira Atualizar versões para o Elastic Cloud no Azure e Alterações interruptivas para o APM. Após ter atualizado o Servidor do APM, carregue o arquivo JAR do agente de Java do APM do Elastic no armazenamento persistente personalizado. Em seguida, reinicie seus aplicativos com as opções de JVM atualizadas que apontam para o JAR do agente de Java do APM do Elastic atualizado.
Monitorar aplicativos e métricas com o Elastic APM
Use as seguintes etapas para monitorar aplicativos e métricas:
No portal do Azure, acesse a página Visão geral da implantação do Elastic e, em seguida, selecione o link do Kibana.
Depois que o Kibana for aberto, pesquise por APM na barra de pesquisa e selecione APM.
O Kibana APM é o aplicativo com curadoria para dar suporte a fluxos de trabalho de Monitoramento de Aplicativo. Aqui você pode ver os detalhes de alto nível, como os horários de solicitação/resposta, a taxa de transferência e as transações em um serviço com o maior impacto sobre a duração.
Você pode analisar detalhadamente uma determinada transação para entender detalhes específicos dela, como o rastreamento distribuído.
O Agente Java do Elastic APM também captura as métricas de JVM dos aplicativos do Azure Spring Apps que estão disponíveis com o aplicativo Kibana para usuários para fins de solução de problemas.
Usando o mecanismo de IA embutido na solução Elastic, você também pode habilitar a Detecção de Anomalias nos Serviços do Azure Spring Apps e escolher uma ação apropriada, como uma notificação de Teams, a criação de uma questão do JIRA, uma chamada à API baseada em webhook e outros.