Partage via


Intégrer APM (Application Performance Monitoring) dans des images conteneur

Remarque

Les plans Essentiel, Standard et Entreprise seront déconseillés à compter de la mi-mars 2025, avec une période de mise hors service de 3 ans. Nous vous recommandons de passer à Azure Container Apps. Pour plus d’informations, consultez l’annonce de mise hors service d’Azure Spring Apps.

Le plan de consommation standard et dédiée sera déconseillé à compter du 30 septembre 2024, avec un arrêt complet après six mois. Nous vous recommandons de passer à Azure Container Apps. Pour plus d’informations, consultez Migrer le plan de consommation standard et dédiée Azure Spring Apps vers Azure Container Apps.

Cet article s’applique à :✅ Essentiel/Standard ✅ Entreprise

Cet article explique comment intégrer l’agent Java Application Insights à votre image conteneur. De la même façon, vous pouvez également intégrer d’autres agents APM (Application Performance Monitoring) dans votre image conteneur, notamment AppDynamics, New Relic et Dynatrace.

Azure Spring Apps s’intègre sans problème aux agents APM. Lors de la migration d’applications vers Azure Container Apps ou Azure Kubernetes Service (AKS), vous devez intégrer APM lors de la génération de l’image. Le processus est semblable à l’approche utilisée par Azure Spring Apps. Vous pouvez également ajouter un agent APM dans un conteneur d’initialisation distinct et l’injecter dans une application conteneur pendant son initialisation.

Prérequis

Choisir l’agent Java Application Insights

Actuellement, Azure Spring Apps utilise l’agent Java Application Insights 3.5.2. Vous pouvez choisir une autre version en fonction de vos besoins. Vous trouverez toutes les versions dans la page des versions de Java Application Insights.

Vous trouverez la chaîne de connexion Application Insights dans le portail Azure, dans le volet Vue d’ensemble de votre instance Application Insights. Cette chaîne est requise pour les instructions de cet article.

Il existe certaines options de configuration pour l’agent Java Application Insights, telles que le pourcentage d’échantillonnage et le nom du rôle cloud. Pour plus d’informations, consultez Options de configuration d’Application Insights pour Java.

Si vous utilisez un fichier Dockerfile pour générer une image conteneur, consultez la section Utiliser un fichier Dockerfile. Si vous utilisez des buildpacks Paketo pour générer une image conteneur, consultez la section Utiliser des buildpacks Paketo.

Utiliser un fichier Dockerfile

Suivez ces étapes pour modifier votre fichier Dockerfile :

  1. Téléchargez l’agent Java Application Insights et créez un fichier de configuration pour celui-ci, que vous allez appeler applicationinsights.json.
  2. Ajoutez l’option -javaagent au point d’entrée de l’image conteneur.

Pour en savoir plus sur la génération d’un fichier JAR ou d’un fichier WAR avec un fichier Dockerfile, consultez Générer une image conteneur à partir d’un fichier JAR ou WAR.

Générer un fichier JAR

L’exemple de fichier Dockerfile suivant crée un fichier JAR avec les modifications précédentes :

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"]

Lorsque vous générez une image conteneur avec ce fichier Dockerfile, vous devez ajouter des arguments de génération à l’aide de --build-arg, comme illustré dans l’exemple suivant :

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

Générer un fichier WAR

L’exemple de fichier Dockerfile suivant génère un fichier WAR avec les modifications précédentes :

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"]

Lorsque vous générez une image conteneur avec ce fichier Dockerfile, vous devez ajouter des arguments de génération à l’aide de --build-arg, comme illustré dans l’exemple suivant :

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

Intégrer d’autres agents APM à l’aide d’un fichier Dockerfile

Vous pouvez intégrer d’autres agents APM (Application Performance Monitoring) d’une façon similaire. La liste suivante présente quelques agents APM, ainsi qu’une brève description sur la façon de les intégrer. Pour les instructions de téléchargement, consultez la documentation officielle d’APM.

  • DynaTrace
  • AppDynamics
    • Téléchargez l’agent AppDynamics dans le fichier Dockerfile.
    • Ajoutez -javaagent:<path-to-agent> aux options JVM.
    • Définissez les variables d’environnement requises, notamment APPDYNAMICS_AGENT_ACCOUNT_NAME, APPDYNAMICS_AGENT_ACCOUNT_ACCESS_KEY, et ainsi de suite, au moment du runtime. Pour obtenir la liste complète des propriétés de configuration, consultez Propriétés de configuration de l’agent Java AppDynamics.
  • New Relic
    • Téléchargez l’agent New Relic dans le fichier Dockerfile. Si vous disposez d’un fichier config de l’agent Java New Relic, copiez-le d’un ordinateur local vers votre conteneur. Pour plus d’informations sur les fichiers config, consultez Configuration de l’agent Java : Fichier config.
    • Ajoutez -javaagent:<path-to-agent> aux options JVM.
    • Définissez les variables d’environnement NEW_RELIC_LICENSE_KEY=<license-key> et NEW_RELIC_APP_NAME=<app-name> au moment du runtime, si vous ne les avez pas définies dans un fichier config ou si vous souhaitez remplacer les valeurs d’un fichier config.

Il existe une autre approche pour intégrer un agent APM, qui consiste à pré-générer une image conteneur pour l’agent APM et à l’exécuter en tant que conteneur d’initialisation. Pour plus d’informations sur cette approche, consultez Tutoriel : Configurer l’agent Java APM (Application Performance Management) avec des conteneurs d’initialisation dans Azure Container Apps.

Utiliser des buildpacks Paketo

Pour intégrer l’agent Application Insights dans votre image conteneur, vous avez besoin d’une liaison. Pour plus d’informations sur les liaisons, consultez Bindings (Liaisons) dans la documentation Paketo.

Tout d’abord, utilisez les commandes suivantes pour créer une liaison nommée application-insights dans le répertoire bindings sur votre ordinateur local. La liaison se compose d’un seul fichier appelé type. Le contenu du fichier type est le texte ApplicationInsights, qui indique une liaison Application Insights.

mkdir -p bindings/application-insights
echo "ApplicationInsights" > bindings/application-insights/type

Le schéma suivant montre la structure du répertoire :

bindings
└── application-insights
    └── type

Exécutez ensuite la commande suivante pour générer l’image. Fournissez la liaison à votre génération en utilisant l’option --volume. L’interface CLI de pack monte le répertoire bindings dans le conteneur de génération. Ensuite, le buildpack Application Insights le détecte et participe au processus de génération.

pack build <image-name>:<image-tag> \
    --volume $(pwd)/bindings/application-insights:/platform/bindings/application-insights" \
    --path <path-to-source-root> \
    --builder <builder-name>

Pour déployer l’image conteneur dans un environnement Azure Container Apps, vous pouvez utiliser Azure CLI. Pour plus d’informations, consultez Déployer Azure Container Apps avec la commande az containerapp up. Il existe deux approches pour passer la chaîne de connexion Application Insights à l’agent Application Insights au moment du runtime. Une approche consiste à passer la chaîne de connexion en tant que variable d’environnement. Pour plus d’informations, consultez la section Configurer avec des variables d’environnement. L’autre approche consiste à passer la chaîne de connexion via des liaisons. Pour plus d’informations, consultez la section Configurer avec des liaisons.

Configurer avec des variables d’environnement

Pour passer une chaîne de connexion à Application Insights, spécifiez APPLICATIONINSIGHTS_CONNECTION_STRING dans l’option --env-vars, comme illustré dans l’exemple suivant. Vous pouvez spécifier d’autres variables d’environnement si vous souhaitez passer d’autres options de configuration à l’agent.

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>"

Configurer avec des liaisons

Pour configurer l’agent Application Insights avec des liaisons, vous pouvez stocker la chaîne de connexion Application Insights, le type de liaison et toute autre configuration en tant que secrets dans votre application conteneur. Montez les secrets dans un volume afin que le buildpack Application Insights puisse les lire au moment du runtime.

Avec la commande suivante, vous déclarez deux secrets au niveau de l’application : type et connection-string. Ils sont montés pour /bindings/application-insights dans le conteneur. Le buildpack recherche les liaisons dans le répertoire /bindings parce que la variable d’environnement SERVICE_BINDING_ROOT est définie.

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"

Vous pouvez également stocker la chaîne de connexion dans Azure Key Vault et la référencer dans les secrets. Pour plus d’informations, consultez Gérer les secrets dans Azure Container Apps.

Pour déployer l’image conteneur sur Azure Kubernetes Service, consultez Comment utiliser des buildpacks dans Kubernetes pour Java.

Intégrer d’autres agents APM à l’aide des buildpacks Paketo

Il existe des buildpacks pour différents agents APM, notamment les agents suivants. Pour plus d’informations sur l’installation et les configurations de liaisons, consultez la documentation de chaque agent.