Compartilhar via


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

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:

  1. 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"
    
  2. Use estes comandos para entrar na CLI do Azure:

    az login
    az account set --subscription $SUBSCRIPTION_ID
    
  3. 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
    
  4. 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:

  1. 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"]
    
  2. 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
    
  3. Use este comando para criar uma imagem:

    docker build . --tag "$CONTAINER_REGISTRY_NAME.azurecr.io/samples/java-agent-setup:1.0.0"
    
  4. 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:

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

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

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

    1. 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
      
    2. 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
      
    3. 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
      
    4. 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
      
  3. 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

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.