Tutorial: Configurar o agente Java do Application Performance Management (APM) com contêineres init em Aplicativos de Contêiner do Azure
Neste tutorial, você configura o agente Java do Application Performance Management (APM) com contêineres init nos Aplicativos de Contêiner do Azure. O APM ajuda a melhorar a observabilidade para seus aplicativos de contêiner. Você pode empacotar o plug-in APM na mesma imagem ou Dockerfile com seu aplicativo, mas ele une as preocupações de gerenciamento, como liberação e mitigação de vulnerabilidades e exposições comuns (CVE). Em vez de unir as preocupações, você pode usar o agente Java e os contêineres init nos Aplicativos de Contêiner do Azure para injetar soluções APM sem modificar a imagem do aplicativo.
Neste tutorial:
- Prepare uma imagem para configurar o agente Java e envie-a por push para um Registro de Contêiner do Azure.
- Crie um ambiente de aplicativos de contêiner e um aplicativo de contêiner como o aplicativo Java de destino.
- Configure contêineres de inicialização e montagens de volume para configurar a integração do Application Insights.
Pré-requisitos
- Uma subscrição do Azure. Crie um gratuitamente..
- Uma instância do Application Insights.
- Uma instância do Registro de Contêiner do Azure ou outro registro de imagem de contêiner.
- Docker, para construir uma imagem.
- A versão mais recente da CLI do Azure.
Configurar o ambiente
Use as seguintes etapas para definir variáveis de ambiente e garantir que sua extensão Container Apps esteja atualizada:
Defina variáveis de ambiente usando os seguintes comandos:
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"
Entre na CLI do Azure usando os seguintes comandos:
az login az account set --subscription $SUBSCRIPTION_ID
Use os comandos a seguir para garantir que você tenha a versão mais recente das extensões da CLI do Azure para Aplicativos de Contêiner e Application Insights:
az extension add --name containerapp --upgrade az extension add --name application-insights --upgrade
Recupere a cadeia de conexão para sua instância do Application Insights usando os seguintes comandos:
CONNECTION_STRING=$(az monitor app-insights component show \ --ids $APP_INSIGHTS_RESOURCE_ID \ --query connectionString)
Preparar a imagem do recipiente
Para criar uma imagem de configuração para o agente Java do Application Insights, use as seguintes etapas no mesmo diretório:
Crie um Dockerfile com o seguinte conteúdo:
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
Crie uma imagem usando o seguinte comando:
docker build . --tag "$CONTAINER_REGISTRY_NAME.azurecr.io/samples/java-agent-setup:1.0.0"
Envie a imagem por push para o Registro de Contêiner do Azure ou outro registro de imagem de contêiner usando os seguintes comandos:
az acr login --name $CONTAINER_REGISTRY_NAME docker push "$CONTAINER_REGISTRY_NAME.azurecr.io/samples/java-agent-setup:1.0.0"
Gorjeta
Você pode encontrar o código relevante para esta etapa 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
Para criar um ambiente de Aplicativos de Contêiner e um aplicativo de contêiner como o aplicativo Java de destino, use as seguintes etapas:
Crie um ambiente de aplicativos de contêiner usando o seguinte comando:
az containerapp env create \ --name $ENVIRONMENT_NAME \ --resource-group $RESOURCE_GROUP \ --location "$LOCATION" \ --query "properties.provisioningState"
Depois de criar com êxito o ambiente Container Apps, a linha de comando retorna uma
Succeeded
mensagem.Crie um aplicativo de contêiner para configuração adicional usando o seguinte comando:
az containerapp create \ --name $CONTAINER_APP_NAME \ --environment $ENVIRONMENT_NAME \ --resource-group $RESOURCE_GROUP \ --query "properties.provisioningState"
Depois de criar o aplicativo contêiner, a linha de comando retorna uma
Succeeded
mensagem.
Configurar contêiner de inicialização, segredos, variáveis de ambiente e volumes para configurar a integração do Application Insights
Use as etapas a seguir para configurar seu contêiner de inicialização com segredos, variáveis de ambiente e volumes. Essa configuração permite que você use as informações armazenadas com sua instância do Application Insights.
Escreva a configuração atual do aplicativo contêiner em execução em um arquivo app.yaml no diretório atual, usando o seguinte comando:
az containerapp show \ --resource-group $RESOURCE_GROUP \ --name $CONTAINER_APP_NAME \ --output yaml \ > app.yaml
Use as etapas a seguir para editar seu arquivo app.yaml . As edições adicionam segredos, armazenamento efêmero e um contêiner de inicialização ao arquivo e atualizam o contêiner do aplicativo.
Adicione um segredo para a cadeia de conexão do Application Insights usando o exemplo a seguir. Substitua
$CONNECTION_STRING
pela cadeia de conexão do Application Insights.properties: configuration: secrets: - name: app-insights-connection-string value: $CONNECTION_STRING
Adicione um volume de armazenamento efêmero para arquivos do agente Java usando o exemplo a seguir:
properties: template: volumes: - name: java-agent-volume storageType: EmptyDir
Adicione um contêiner de inicialização com montagens de volume e variáveis de ambiente usando o exemplo a seguir. 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
Atualize o contêiner do aplicativo com montagens de volume e variáveis de ambiente usando o exemplo a seguir:
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
Atualize o aplicativo contêiner com o arquivo app.yaml modificado usando o seguinte comando:
az containerapp update \ --resource-group $RESOURCE_GROUP \ --name $CONTAINER_APP_NAME \ --yaml app.yaml \ --query "properties.provisioningState"
Depois de atualizar o aplicativo contêiner, o comando retorna uma
Succeeded
mensagem. Agora você pode verificar se seu aplicativo de contêiner está conectado, exibindo sua instância do Application Insights no portal do Azure.
Clean up resources (Limpar recursos)
Os recursos criados neste tutorial contribuem para a sua fatura do Azure. Se você não precisar deles a longo prazo, use o seguinte comando para remover o grupo de recursos e seus recursos:
az group delete --resource-group $RESOURCE_GROUP
Conteúdos relacionados
Além do Azure Application Insights, existem outras soluções APM populares na comunidade. Se você quiser integrar seu Aplicativo de Contêiner do Azure com outros provedores de APM, basta substituir o JAR do agente Java e os arquivos de configuração relacionados.