Partage via


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

Configurer l’environnement

Procédez comme suit pour définir des variables d’environnement et vérifier que votre extension Container Apps est à jour :

  1. 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"
    
  2. Connectez-vous à Azure CLI à l’aide des commandes suivantes :

    az login
    az account set --subscription $SUBSCRIPTION_ID
    
  3. 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
    
  4. 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 :

  1. 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"]
    
  2. 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
    
  3. 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"
    
  4. 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 :

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

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

  1. É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
    
  2. 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.

    1. 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
      
    2. 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
      
    3. 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
      
    4. 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
      
  3. 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

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