Integrare il monitoraggio delle prestazioni dell'applicazione nelle immagini del contenitore
Nota
I piani Basic, Standard ed Enterprise saranno deprecati a partire dalla metà di marzo 2025, con un periodo di ritiro di 3 anni. È consigliabile eseguire la transizione ad App Azure Container. Per altre informazioni, vedere l'annuncio di ritiro di Azure Spring Apps.
Il piano Standard a consumo e dedicato sarà deprecato a partire dal 30 settembre 2024, con un arresto completo dopo sei mesi. È consigliabile eseguire la transizione ad App Azure Container. Per altre informazioni, vedere Eseguire la migrazione del consumo di Azure Spring Apps Standard e del piano dedicato alle app Azure Container.
Questo articolo si applica a:✅ Basic/Standard ✅ Enterprise
Questo articolo illustra come integrare l'agente Java di Application Insights nell'immagine del contenitore. In modo analogo, è anche possibile integrare altri agenti di monitoraggio delle prestazioni delle applicazioni (APM) nell'immagine del contenitore, tra cui AppDynamics, New Relic e Dynatrace.
Azure Spring Apps si integra senza problemi con gli agenti APM. Quando si esegue la migrazione di applicazioni ad App Azure Container o servizio Azure Kubernetes (AKS), è necessario eseguire l'integrazione con APM durante la compilazione dell'immagine. Il processo è simile all'approccio usato da Azure Spring Apps. È anche possibile aggiungere un agente APM in un contenitore init-container separato e inserirlo in un'app contenitore durante l'inizializzazione.
Prerequisiti
Scegliere l'agente Java di Application Insights
Azure Spring Apps usa attualmente l'agente Java di Application Insights 3.5.2. È possibile scegliere un'altra versione in base alle esigenze. È possibile trovare tutte le versioni nella pagina delle versioni java di Application Insights.
È possibile trovare il stringa di connessione di Application Insights nel portale di Azure nel riquadro Panoramica dell'istanza di Application Insights. Questa stringa è necessaria per le istruzioni contenute in questo articolo.
Esistono alcune opzioni di configurazione per l'agente Java di Application Insights, ad esempio percentuale di campionamento e nome del ruolo cloud. Per altre informazioni, vedere Opzioni di configurazione di Application Insights per Java.
Se si usa un Dockerfile per compilare un'immagine del contenitore, vedere la sezione Usare Dockerfile . Se si usa Paketo Buildpacks per compilare un'immagine del contenitore, vedere la sezione Use Paketo Buildpacks (Usare Paketo Buildpacks ).
Usare Dockerfile
Usare la procedura seguente per modificare il Dockerfile:
- Scaricare l'agente Java di Application Insights e creare un file di configurazione, denominato applicationinsights.json.
- Aggiungere l'opzione
-javaagent
al punto di ingresso dell'immagine del contenitore.
Per altre informazioni sulla creazione di file JAR o file WAR con un Dockerfile, vedere Creare un'immagine del contenitore da un file JAR o WAR.
Compilare un file JAR
Nell'esempio seguente Dockerfile viene compilato un file JAR con le modifiche precedenti:
FROM mcr.microsoft.com/openjdk/jdk:17-mariner
ARG APP_INSIGHTS_VERSION
ARG APP_INSIGHTS_CONNECTION_STRING
ARG JAR_FILENAME
# Set up Application Insights agent
ADD https://github.com/microsoft/ApplicationInsights-Java/releases/download/${APP_INSIGHTS_VERSION}/applicationinsights-agent-${APP_INSIGHTS_VERSION}.jar \
/java-agent/applicationinsights-agent.jar
RUN echo "{\"connectionString\": \"${APP_INSIGHTS_CONNECTION_STRING}\"}" > applicationinsights.json \
&& mv applicationinsights.json /java-agent/applicationinsights.json
COPY $JAR_FILENAME /opt/app/app.jar
# Add -javaagent option
ENTRYPOINT ["java", "-javaagent:/java-agent/applicationinsights-agent.jar", "-jar", "/opt/app/app.jar"]
Quando si compila un'immagine del contenitore con questo Dockerfile, è necessario aggiungere argomenti di compilazione usando --build-arg
, come illustrato nell'esempio seguente:
docker build -t <image-name>:<image-tag> \
-f JAR.dockerfile \
--build-arg APP_INSIGHTS_VERSION=3.5.2 \
--build-arg APP_INSIGHTS_CONNECTION_STRING="<connection-string>" \
--build-arg JAR_FILENAME=<path-to-jar> \
.
Creare un file WAR
Nell'esempio seguente Dockerfile viene compilato un file WAR con le modifiche precedenti:
FROM mcr.microsoft.com/openjdk/jdk:17-mariner
ARG TOMCAT_VERSION
ARG TOMCAT_MAJOR_VERSION
ARG APP_INSIGHTS_VERSION
ARG APP_INSIGHTS_CONNECTION_STRING
ARG WAR_FILENAME
ARG TOMCAT_HOME=/opt/tomcat
# Set up Application Insights agent
ADD https://github.com/microsoft/ApplicationInsights-Java/releases/download/${APP_INSIGHTS_VERSION}/applicationinsights-agent-${APP_INSIGHTS_VERSION}.jar \
/java-agent/applicationinsights-agent.jar
RUN echo "{\"connectionString\": \"${APP_INSIGHTS_CONNECTION_STRING}\"}" > applicationinsights.json \
&& mv applicationinsights.json /java-agent/applicationinsights.json
# Set up Tomcat
ADD https://archive.apache.org/dist/tomcat/tomcat-$TOMCAT_MAJOR_VERSION/v$TOMCAT_VERSION/bin/apache-tomcat-$TOMCAT_VERSION.tar.gz \
$TOMCAT_HOME/apache-tomcat-$TOMCAT_VERSION.tar.gz
RUN tdnf update -y \
&& tdnf install -y tar \
&& tar -zxf $TOMCAT_HOME/apache-tomcat-$TOMCAT_VERSION.tar.gz -C $TOMCAT_HOME --strip-components 1 \
&& rm $TOMCAT_HOME/apache-tomcat-$TOMCAT_VERSION.tar.gz \
&& rm -r $TOMCAT_HOME/webapps/*
COPY $WAR_FILENAME $TOMCAT_HOME/webapps/app.war
# Add the -javaagent option
ENTRYPOINT ["/bin/sh", "-c" , "export CATALINA_OPTS=-javaagent:/java-agent/applicationinsights-agent.jar && /opt/tomcat/bin/catalina.sh run"]
Quando si compila un'immagine del contenitore con questo Dockerfile, è necessario aggiungere argomenti di compilazione usando --build-arg
, come illustrato nell'esempio seguente:
docker build -t <image-name>:<image-tag> \
-f WAR.dockerfile \
--build-arg APP_INSIGHTS_VERSION=3.5.2 \
--build-arg APP_INSIGHTS_CONNECTION_STRING="<connection-string>" \
--build-arg WAR_FILENAME=<path-to-war> \
--build-arg TOMCAT_VERSION=<version> \
--build-arg TOMCAT_MAJOR_VERSION=<major-version> \
.
Integrare altri agenti di monitoraggio delle prestazioni dell'applicazione usando Dockerfile
È possibile integrare altri agenti di monitoraggio delle prestazioni delle applicazioni (APM) in modo analogo. L'elenco seguente mostra alcuni altri agenti APM, insieme a una breve descrizione su come integrarli. Per istruzioni di download, vedere la documentazione ufficiale di APM.
- Dynatrace
- Scaricare l'agente Dynatrace nel Dockerfile.
- Impostare le variabili di ambiente seguenti in fase di esecuzione:
LD_PRELOAD=<path-to-agent>
DT_TENANT=<tenant>
DT_TENANTTOKEN=<token>
DT_CONNECTION_POINT=<connection-point>
-
DT_LOGLEVELCON=info
Per altre informazioni, vedere Configurare OneAgent nei contenitori per il monitoraggio solo dell'applicazione.
- AppDynamics
- Scaricare l'agente AppDynamics nel Dockerfile.
- Aggiungere
-javaagent:<path-to-agent>
alle opzioni JVM. - Impostare le variabili di ambiente necessarie, tra cui
APPDYNAMICS_AGENT_ACCOUNT_NAME
,APPDYNAMICS_AGENT_ACCOUNT_ACCESS_KEY
e così via, in fase di esecuzione. Per un elenco completo delle proprietà di configurazione, vedere Proprietà di configurazione dell'agente Java AppDynamics.
- New Relic
- Scaricare l'agente New Relic nel Dockerfile. Se si dispone di un file di configurazione dell'agente Java New Relic, copiarlo dal computer locale al contenitore. Per altre informazioni sui file di configurazione, vedere Configurazione dell'agente Java: File di configurazione.
- Aggiungere
-javaagent:<path-to-agent>
alle opzioni JVM. - Impostare le variabili
NEW_RELIC_LICENSE_KEY=<license-key>
di ambiente eNEW_RELIC_APP_NAME=<app-name>
in fase di esecuzione, se non sono state impostate in un file di configurazione o si desidera eseguire l'override dei valori in un file di configurazione.
Esiste un altro approccio per integrare un agente APM, che consiste nel precompilare un'immagine del contenitore per l'agente APM ed eseguirla come contenitore init. Per altre informazioni su questo approccio, vedere Esercitazione: Configurare l'agente Java di Application Performance Management (APM) con contenitori init in App Azure Container.
Usare i buildpack Di Paketo
Per integrare l'agente di Application Insights nell'immagine del contenitore, è necessaria un'associazione. Per altre informazioni sui binding, vedere Binding nella documentazione di Paketo.
Usare prima di tutto i comandi seguenti per creare un'associazione denominata application-insights nella directory dei binding nel computer locale. L'associazione è costituita da un solo file, denominato tipo. Il contenuto del file di tipo è il testo ApplicationInsights
, che indica un'associazione di Application Insights.
mkdir -p bindings/application-insights
echo "ApplicationInsights" > bindings/application-insights/type
Il diagramma seguente illustra la struttura di directory:
bindings
└── application-insights
└── type
Usare quindi il comando seguente per compilare l'immagine. Specificare l'associazione alla compilazione usando l'opzione --volume
. L'interfaccia della riga di comando del pacchetto monta la directory di associazione nel contenitore di compilazione. Quindi, il buildpack di Application Insights lo rileva e partecipa al processo di compilazione.
pack build <image-name>:<image-tag> \
--volume $(pwd)/bindings/application-insights:/platform/bindings/application-insights" \
--path <path-to-source-root> \
--builder <builder-name>
Per distribuire l'immagine del contenitore in un ambiente app Azure Container, è possibile usare l'interfaccia della riga di comando di Azure. Per altre informazioni, vedere Distribuire app di Azure Container con il comando az containerapp up. Esistono due approcci per passare l'stringa di connessione di Application Insights all'agente di Application Insights in fase di esecuzione. Un approccio consiste nel passare il stringa di connessione come variabile di ambiente. Per altre informazioni, vedere la sezione Configurare con le variabili di ambiente. L'altro approccio consiste nel passare il stringa di connessione tramite le associazioni. Per altre informazioni, vedere la sezione Configurare con binding .
Configurare con le variabili di ambiente
Per passare un stringa di connessione ad Application Insights, specificare APPLICATIONINSIGHTS_CONNECTION_STRING
nell'opzione --env-vars
, come illustrato nell'esempio seguente. È possibile specificare altre variabili di ambiente se si desidera passare più opzioni di configurazione all'agente.
az containerapp up \
--name <container-app-name> \
--image <image-name>:<image-tag> \
--resource-group <resource-group> \
--environment <environment-name> \
--location <location> \
--env-vars "APPLICATIONINSIGHTS_CONNECTION_STRING=<connection-string>"
Configurare con le associazioni
Per configurare l'agente di Application Insights con associazioni, è possibile archiviare il stringa di connessione di Application Insights, il tipo di associazione e qualsiasi altra configurazione come segreti nell'app contenitore. Montare i segreti in un volume in modo che il buildpack di Application Insights possa leggerli in fase di esecuzione.
Con il comando seguente si dichiarano due segreti a livello di applicazione: type
e connection-string
. Vengono montati in /bindings/application-insights nel contenitore. Il buildpack cerca le associazioni nella directory /bindings perché la SERVICE_BINDING_ROOT
variabile di ambiente è impostata.
az containerapp create \
--name <container-app-name> \
--image <image-name>:<image-tag> \
--resource-group <resource-group> \
--environment <environment-name> \
--secrets "type=ApplicationInsights" "connection-string=<connection-string>" \
--secret-volume-mount "/bindings/application-insights" \
--env-vars "SERVICE_BINDING_ROOT=/bindings"
In alternativa, è possibile archiviare le stringa di connessione in Azure Key Vault e farvi riferimento nei segreti. Per altre informazioni, vedere Gestire i segreti in App Azure Container.
Per distribuire l'immagine del contenitore in servizio Azure Kubernetes, vedere Come usare buildpack in Kubernetes per Java.
Integrare altri agenti di monitoraggio delle prestazioni delle applicazioni usando Paketo Buildpacks
Sono disponibili buildpack per vari agenti APM, inclusi gli agenti seguenti. Per altre informazioni sull'installazione e sulle configurazioni dell'associazione, vedere la documentazione per ogni agente.