Condividi tramite


Esercitazione: Configurare l'agente Java di Application Performance Management (APM) con contenitori init in App Contenitore di Azure

In questa esercitazione viene configurato l'agente Java di Application Performance Management (APM) con contenitori init in App Contenitore di Azure. APM consente di migliorare l'osservabilità per le app contenitore. È possibile creare un pacchetto del plug-in APM nella stessa immagine o Dockerfile con l'app, ma associa i problemi di gestione, ad esempio vulnerabilità ed esposizioni comuni (CVE). Invece di collegare le preoccupazioni, è possibile usare l'agente Java e i contenitori init in App Contenitore di Azure per inserire soluzioni APM senza modificare l'immagine dell'app.

In questa esercitazione:

  • Preparare un'immagine per configurare l'agente Java ed eseguirne il push in un Registro Azure Container.
  • Creare un ambiente app contenitore e un'app contenitore come app Java di destinazione.
  • Configurare contenitori init e montaggi di volumi per configurare l'integrazione di Application Insights.

Prerequisiti

Configurare l'ambiente

Usare la procedura seguente per definire le variabili di ambiente e assicurarsi che l'estensione App contenitore sia aggiornata:

  1. Definire le variabili di ambiente usando i comandi seguenti:

    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. Accedere all'interfaccia della riga di comando di Azure usando i comandi seguenti:

    az login
    az account set --subscription $SUBSCRIPTION_ID
    
  3. Usare i comandi seguenti per assicurarsi di avere la versione più recente delle estensioni dell'interfaccia della riga di comando di Azure per App contenitore e Application Insights:

    az extension add --name containerapp --upgrade
    az extension add --name application-insights --upgrade
    
  4. Recuperare il stringa di connessione per l'istanza di Application Insights usando i comandi seguenti:

    CONNECTION_STRING=$(az monitor app-insights component show \
        --ids $APP_INSIGHTS_RESOURCE_ID \
        --query connectionString)
    

Preparare l'immagine del contenitore

Per compilare un'immagine di installazione per l'agente Java di Application Insights, seguire questa procedura nella stessa directory:

  1. Creare un Dockerfile con il contenuto seguente:

    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. Creare un file setup.sh con il contenuto seguente:

    #!/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. Creare un'immagine usando il comando seguente:

    docker build . --tag "$CONTAINER_REGISTRY_NAME.azurecr.io/samples/java-agent-setup:1.0.0"
    
  4. Eseguire il push dell'immagine in Registro Azure Container o in un altro registro immagini del contenitore usando i comandi seguenti:

    az acr login --name $CONTAINER_REGISTRY_NAME
    docker push "$CONTAINER_REGISTRY_NAME.azurecr.io/samples/java-agent-setup:1.0.0"
    

Suggerimento

È possibile trovare il codice pertinente a questo passaggio nel repository GitHub azure-container-apps-java-samples .

Creare un ambiente app contenitore e un'app contenitore come app Java di destinazione

Per creare un ambiente app contenitore e un'app contenitore come app Java di destinazione, seguire questa procedura:

  1. Creare un ambiente app contenitore usando il comando seguente:

    az containerapp env create \
        --name $ENVIRONMENT_NAME \
        --resource-group $RESOURCE_GROUP \
        --location "$LOCATION" \
        --query "properties.provisioningState"
    

    Dopo aver creato correttamente l'ambiente App contenitore, la riga di comando restituisce un Succeeded messaggio.

  2. Creare un'app contenitore per un'ulteriore configurazione usando il comando seguente:

    az containerapp create \
        --name $CONTAINER_APP_NAME \
        --environment $ENVIRONMENT_NAME \
        --resource-group $RESOURCE_GROUP \
        --query "properties.provisioningState"
    

    Dopo aver creato l'app contenitore, la riga di comando restituisce un Succeeded messaggio.

Configurare contenitori init, segreti, variabili di ambiente e volumi per configurare l'integrazione di Application Insights

Usare la procedura seguente per configurare il contenitore init con segreti, variabili di ambiente e volumi. Questa configurazione consente di usare le informazioni archiviate con l'istanza di Application Insights.

  1. Scrivere la configurazione corrente dell'app contenitore in esecuzione in un file app.yaml nella directory corrente usando il comando seguente:

    az containerapp show \
        --resource-group $RESOURCE_GROUP \
        --name $CONTAINER_APP_NAME \
        --output yaml \
    > app.yaml
    
  2. Seguire questa procedura per modificare il file app.yaml . Le modifiche aggiungono segreti, archiviazione temporanea e un contenitore init al file e aggiornano il contenitore dell'app.

    1. Aggiungere un segreto per il stringa di connessione di Application Insights usando l'esempio seguente. Sostituire $CONNECTION_STRING con il stringa di connessione di Application Insights.

      properties:
        configuration:
           secrets:
           - name: app-insights-connection-string
             value: $CONNECTION_STRING
      
    2. Aggiungere un volume di archiviazione temporaneo per i file dell'agente Java usando l'esempio seguente:

      properties:
        template:
          volumes:
          - name: java-agent-volume
            storageType: EmptyDir
      
    3. Aggiungere un contenitore init con montaggi di volumi e variabili di ambiente usando l'esempio seguente. Sostituire <CONTAINER_REGISTRY_NAME> con il nome Registro Azure Container.

      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. Aggiornare il contenitore dell'app con montaggi di volumi e variabili di ambiente usando l'esempio seguente:

      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. Aggiornare l'app contenitore con il file app.yaml modificato usando il comando seguente:

    az containerapp update \
        --resource-group $RESOURCE_GROUP \ 
        --name $CONTAINER_APP_NAME \
        --yaml app.yaml \
        --query "properties.provisioningState"
    

    Dopo aver aggiornato l'app contenitore, il comando restituisce un Succeeded messaggio. È ora possibile verificare che l'app contenitore sia connessa visualizzando l'istanza di Application Insights nel portale di Azure.

Pulire le risorse

Le risorse create in questa esercitazione contribuiscono alla fattura di Azure. Se non sono necessarie a lungo termine, usare il comando seguente per rimuovere il gruppo di risorse e le relative risorse:

az group delete --resource-group $RESOURCE_GROUP

Oltre a app Azure lication Insights, sono disponibili altre soluzioni APM più diffuse nella community. Se si vuole integrare l'app Azure Container con altri provider APM, è sufficiente sostituire il file JAR dell'agente Java e i file di configurazione correlati.