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
- Una sottoscrizione di Azure. Crearne uno gratuitamente.
- Istanza di Application Insights.
- Istanza di Registro Azure Container o di un altro registro immagini del contenitore.
- Docker, per compilare un'immagine.
- L'ultima versione dell'interfaccia della riga di comando di Azure.
Configurare l'ambiente
Usare la procedura seguente per definire le variabili di ambiente e assicurarsi che l'estensione App contenitore sia aggiornata:
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"
Accedere all'interfaccia della riga di comando di Azure usando i comandi seguenti:
az login az account set --subscription $SUBSCRIPTION_ID
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
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:
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"]
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
Creare un'immagine usando il comando seguente:
docker build . --tag "$CONTAINER_REGISTRY_NAME.azurecr.io/samples/java-agent-setup:1.0.0"
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:
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.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.
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
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.
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
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
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
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
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
Contenuto correlato
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.