Tutorial: Configurar o agente Java do APM (Gerenciamento de Desempenho do Aplicativo) com contêineres init nos Aplicativos de Contêiner do Azure
Neste tutorial, você deve configurar o agente Java do APM (Gerenciamento de Desempenho do Aplicativo) com contêineres init nos Aplicativos de Contêiner do Azure. O APM ajuda a potencializar a observabilidade dos aplicativos de contêiner. É possível empacotar o plug-in do APM na mesma imagem ou Dockerfile que seu aplicativo, mas ele vincula questões de gerenciamento, como liberação e mitigação de CVE (Vulnerabilidades e Exposições Comuns). Em vez de vincular essas questões, é possível usar o agente Java e os contêineres init nos Aplicativos de Contêiner do Azure para injetar soluções de APM sem modificar a imagem do aplicativo.
Neste tutorial, você:
- Prepare uma imagem para configurar o agente Java e envie-a para um Registro de Contêiner do Azure.
- Crie um ambiente dos Aplicativos de Contêiner e um aplicativo de contêiner como o aplicativo Java de destino.
- Configure contêineres init e montagens de volume para configurar a integração do Application Insights.
Pré-requisitos
- Uma assinatura do Azure. Crie um gratuitamente..
- Uma instância do Application Insights.
- Uma instância do Registro de Contêiner do Azure ou de outro registro de imagem de contêiner.
- Docker, para criar uma imagem.
- A versão mais recente da CLI do Azure.
Configurar o ambiente
Siga estas etapas para definir variáveis de ambiente e verificar se a extensão dos Aplicativos de Contêiner está atualizada:
Use estes comandos para definir variáveis de ambiente:
export SUBSCRIPTION_ID="<SUBSCRIPTION_ID>" # Replace with your own Azure subscription ID export APP_INSIGHTS_RESOURCE_ID="/subscriptions/$SUBSCRIPTION_ID/resourceGroups/my-resource-group/providers/microsoft.insights/components/my-app-insights" export CONTAINER_REGISTRY_NAME="myacr" export RESOURCE_GROUP="my-resource-group" export ENVIRONMENT_NAME="my-environment" export CONTAINER_APP_NAME="my-container-app" export LOCATION="eastus"
Use estes comandos para entrar na CLI do Azure:
az login az account set --subscription $SUBSCRIPTION_ID
Use estes comandos para verificar se você tem a versão mais recente das extensões da CLI do Azure para os Aplicativos de Contêiner e o Application Insights:
az extension add --name containerapp --upgrade az extension add --name application-insights --upgrade
Use estes comandos para recuperar a cadeia de conexão da sua instância do Application Insights:
CONNECTION_STRING=$(az monitor app-insights component show \ --ids $APP_INSIGHTS_RESOURCE_ID \ --query connectionString)
Preparar a imagem de contêiner
Siga estas etapas no mesmo diretório para criar uma imagem de configuração para o agente Java do Application Insights:
Crie um Dockerfile com o conteúdo a seguir:
FROM mcr.microsoft.com/cbl-mariner/base/core:2.0 ARG version="3.5.4" RUN tdnf update -y && tdnf install -y curl ca-certificates RUN curl -L "https://github.com/microsoft/ApplicationInsights-Java/releases/download/${version}/applicationinsights-agent-${version}.jar" > agent.jar ADD setup.sh /setup.sh ENTRYPOINT ["/bin/sh", "setup.sh"]
Crie um arquivo setup.sh com o seguinte conteúdo:
#!/bin/sh if [[ -z "$CONNECTION_STRING" ]]; then echo "Environment variable CONNECTION_STRING is not found. Exiting..." exit 1 else echo "{\"connectionString\": \"$CONNECTION_STRING\"}" > /java-agent/applicationinsights.json cp agent.jar /java-agent/agent.jar fi
Use este comando para criar uma imagem:
docker build . --tag "$CONTAINER_REGISTRY_NAME.azurecr.io/samples/java-agent-setup:1.0.0"
Use estes comandos para enviar a imagem ao Registro de Contêiner do Azure ou a outro registro de imagem de contêiner:
az acr login --name $CONTAINER_REGISTRY_NAME docker push "$CONTAINER_REGISTRY_NAME.azurecr.io/samples/java-agent-setup:1.0.0"
Dica
O código relevante para esta etapa pode ser encontrado no repositório do GitHub azure-container-apps-java-samples.
Criar um ambiente de Aplicativos de Contêiner e um aplicativo de contêiner como o aplicativo Java de destino
Siga estas etapas para criar um ambiente dos Aplicativos de Contêiner e um aplicativo de contêiner como o aplicativo Java de destino:
Use este comando para criar um ambiente dos Aplicativos de Contêiner:
az containerapp env create \ --name $ENVIRONMENT_NAME \ --resource-group $RESOURCE_GROUP \ --location "$LOCATION" \ --query "properties.provisioningState"
Depois que você criar o ambiente dos Aplicativos de Contêiner, a linha de comando retornará uma mensagem
Succeeded
.Use este comando para criar um aplicativo de contêiner e configurações adicionais:
az containerapp create \ --name $CONTAINER_APP_NAME \ --environment $ENVIRONMENT_NAME \ --resource-group $RESOURCE_GROUP \ --query "properties.provisioningState"
Depois que você criar o aplicativo de contêiner, a linha de comando retornará uma mensagem
Succeeded
.
Definir um contêiner init, segredos, variáveis de ambiente e volumes para configurar a integração do Application Insights
Siga as etapas a seguir para configurar o contêiner init com segredos, variáveis de ambiente e volumes. Com essa configuração, é possível usar as informações armazenadas na instância do Application Insights.
Use este comando para gravar a configuração atual do aplicativo de contêiner em execução em um arquivo app.yaml no diretório atual:
az containerapp show \ --resource-group $RESOURCE_GROUP \ --name $CONTAINER_APP_NAME \ --output yaml \ > app.yaml
Siga as etapas abaixo para editar o arquivo app.yaml. As edições adicionam segredos, armazenamento efêmero e um contêiner init ao arquivo, além de atualizarem o contêiner de aplicativo.
Use como base o exemplo a seguir a fim de adicionar um segredo para a cadeia de conexão do Application Insights. Substitua
$CONNECTION_STRING
pela cadeia de conexão do Application Insights.properties: configuration: secrets: - name: app-insights-connection-string value: $CONNECTION_STRING
Use como base o exemplo abaixo para adicionar um volume de armazenamento efêmero para arquivos do agente Java:
properties: template: volumes: - name: java-agent-volume storageType: EmptyDir
Use como base o exemplo abaixo para adicionar um contêiner init com montagens de volume e variáveis de ambiente. Substitua
<CONTAINER_REGISTRY_NAME>
pelo nome do Registro de Contêiner do Azure.properties: template: initContainers: - image: <CONTAINER_REGISTRY_NAME>.azurecr.io/samples/java-agent-setup:1.0.0 name: java-agent-setup resources: cpu: 0.25 memory: 0.5Gi env: - name: CONNECTION_STRING secretRef: app-insights-connection-string volumeMounts: - mountPath: /java-agent volumeName: java-agent-volume
Use como base o exemplo abaixo para atualizar o contêiner de aplicativo com montagens de volume e variáveis de ambiente:
properties: template: containers: - name: test-java-app image: mcr.microsoft.com/azurespringapps/samples/hello-world:0.0.1 resources: cpu: 0.5 memory: 1Gi env: - name: JAVA_TOOL_OPTIONS value: -javaagent:/java-agent/agent.jar volumeMounts: - mountPath: /java-agent volumeName: java-agent-volume
Use este comando para atualizar o aplicativo de contêiner com o arquivo app.yaml modificado:
az containerapp update \ --resource-group $RESOURCE_GROUP \ --name $CONTAINER_APP_NAME \ --yaml app.yaml \ --query "properties.provisioningState"
Depois que você atualizar o aplicativo de contêiner, o comando retornará uma mensagem
Succeeded
. Agora é possível exibir a instância do Application Insights no portal do Azure para verificar se o aplicativo de contêiner está conectado.
Limpar os recursos
Os recursos que você criou neste tutorial contribuem para a fatura do Azure. Se você não precisar deles por muito tempo, use o seguinte comando para remover o grupo de recursos e os recursos contidos nele:
az group delete --resource-group $RESOURCE_GROUP
Conteúdo relacionado
Além do Azure Application Insights, há outras soluções populares do APM na comunidade. Se você quiser integrar seu Aplicativo de Contêiner do Azure a outros provedores de APM, basta substituir o JAR do agente Java e os arquivos de configuração relacionados.