Tutoriel : Configurer l’agent Java APM (Application Performance Management) avec des conteneurs init dans Azure Container Apps
Dans ce tutoriel, vous configurez l’agent Java APM (Application Performance Management) avec des conteneurs init dans Azure Container Apps. APM contribue à améliorer l’observabilité de vos applications conteneur. Vous pouvez créer un package du plug-in APM dans la même image ou le même fichier Dockerfile que votre application, mais cela lie les préoccupations de gestion, par exemple la publication et l’atténuation des CVE (vulnérabilités et risques courants). Au lieu de lier les problèmes ensemble, vous pouvez utiliser l’agent Java et les conteneurs init dans Azure Container Apps pour injecter des solutions APM sans modifier l’image de votre application.
Dans ce tutoriel, vous allez :
- Préparez une image pour configurer l’agent Java et envoyez-la à Azure Container Registry.
- Créez un environnement Container Apps et une application conteneur en tant qu’application Java cible.
- Configurez les conteneurs init et les montages de volume pour mettre en place l’intégration d’Application Insights.
Prérequis
- Un abonnement Azure. Créez-en un gratuitement.
- Une instance d’Application Insights.
- Une instance d’Azure Container Registry ou un autre registre d’images conteneur.
- Docker, pour générer une image.
- La version la plus récente d’Azure CLI.
Configurer l’environnement
Procédez comme suit pour définir des variables d’environnement et vérifier que votre extension Container Apps est à jour :
Définissez des variables d’environnement à l’aide des commandes suivantes :
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"
Connectez-vous à Azure CLI à l’aide des commandes suivantes :
az login az account set --subscription $SUBSCRIPTION_ID
Utilisez les commandes suivantes pour vous assurer que vous disposez de la dernière version des extensions Azure CLI pour Container Apps et Application Insights :
az extension add --name containerapp --upgrade az extension add --name application-insights --upgrade
Récupérez la chaîne de connexion de votre instance Application Insights à l’aide des commandes suivantes :
CONNECTION_STRING=$(az monitor app-insights component show \ --ids $APP_INSIGHTS_RESOURCE_ID \ --query connectionString)
Préparer l’image conteneur
Pour générer une image d’installation pour l’agent Java Application Insights, procédez comme suit dans le même répertoire :
Créez un Dockerfile avec le contenu suivant :
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"]
Créez un fichier setup.sh avec le contenu suivant :
#!/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
Créez une image à l’aide de la commande suivante :
docker build . --tag "$CONTAINER_REGISTRY_NAME.azurecr.io/samples/java-agent-setup:1.0.0"
Envoyez l’image à Azure Container Registry ou à un autre registre d’images conteneur à l’aide des commandes suivantes :
az acr login --name $CONTAINER_REGISTRY_NAME docker push "$CONTAINER_REGISTRY_NAME.azurecr.io/samples/java-agent-setup:1.0.0"
Conseil
Vous trouverez du code pertinent pour cette étape dans le dépôt GitHub azure-container-apps-java-samples.
Créer un environnement Container Apps et une application conteneur en tant qu’application Java cible
Pour créer un environnement Container Apps et une application conteneur comme application Java cible, procédez comme suit :
Créez un environnement Container Apps à l’aide de la commande suivante :
az containerapp env create \ --name $ENVIRONMENT_NAME \ --resource-group $RESOURCE_GROUP \ --location "$LOCATION" \ --query "properties.provisioningState"
Une fois que vous avez créé l’environnement Container Apps, la ligne de commande retourne un message
Succeeded
.Créez une application conteneur pour une configuration supplémentaire à l’aide de la commande suivante :
az containerapp create \ --name $CONTAINER_APP_NAME \ --environment $ENVIRONMENT_NAME \ --resource-group $RESOURCE_GROUP \ --query "properties.provisioningState"
Après avoir créé l’application conteneur, la ligne de commande retourne un message
Succeeded
.
Configurer le conteneur init, les secrets, les variables d’environnement et les volumes pour mettre en place l’intégration d’Application Insights
Utilisez les étapes suivantes pour configurer votre conteneur init avec des secrets, des variables d’environnement et des volumes. Cette configuration vous permet d’utiliser les informations stockées avec votre instance Application Insights.
Écrivez la configuration actuelle de l’application conteneur en cours d’exécution dans un fichier app.yaml dans le répertoire actuel, à l’aide de la commande suivante :
az containerapp show \ --resource-group $RESOURCE_GROUP \ --name $CONTAINER_APP_NAME \ --output yaml \ > app.yaml
Procédez comme suit pour modifier votre fichier app.yaml. Les modifications ajoutent des secrets, un stockage éphémère et un conteneur init au fichier et mettent à jour le conteneur d’application.
Ajoutez un secret pour la chaîne de connexion Application Insights à l’aide de l’exemple suivant. Remplacez
$CONNECTION_STRING
par votre chaîne de connexion Application Insights.properties: configuration: secrets: - name: app-insights-connection-string value: $CONNECTION_STRING
Ajoutez un volume de stockage éphémère pour les fichiers d’agent Java à l’aide de l’exemple suivant :
properties: template: volumes: - name: java-agent-volume storageType: EmptyDir
Ajoutez un conteneur init avec des montages de volume et des variables d’environnement à l’aide de l’exemple suivant. Remplacez
<CONTAINER_REGISTRY_NAME>
par le nom de votre instance d’Azure Container Registry.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
Mettez à jour le conteneur d’application avec des montages de volumes et des variables d’environnement à l’aide de l’exemple suivant :
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
Mettez à jour l’application conteneur avec le fichier app.yaml modifié à l’aide de la commande suivante :
az containerapp update \ --resource-group $RESOURCE_GROUP \ --name $CONTAINER_APP_NAME \ --yaml app.yaml \ --query "properties.provisioningState"
Après avoir mis à jour l’application conteneur, la commande retourne un message
Succeeded
. Vous pouvez maintenant vérifier que votre application conteneur est connectée, en consultant votre instance Application Insights dans le portail Azure.
Nettoyer les ressources
Les ressources que vous avez créées dans ce tutoriel s’ajoutent à votre facture Azure. Si vous n’en avez pas besoin à long terme, utilisez la commande suivante pour supprimer le groupe de ressources et ses ressources :
az group delete --resource-group $RESOURCE_GROUP
Contenu connexe
À part Azure Application Insights, il existe d’autres solutions APM populaires dans la communauté. Si vous souhaitez intégrer votre instance d’Azure Container Apps à d’autres fournisseurs APM, remplacez simplement le fichier JAR de l’agent Java et les fichiers config associés.