Partager via


Tutoriel : Configurer un conteneur side-car pour une application Linux dans Azure App Service

Dans ce didacticiel, vous ajoutez un collecteur OpenTelemetry en tant que conteneur side-car à une application Linux (Bring Your Own Code) dans Azure App Service. Pour les conteneurs personnalisés, consultez Tutoriel : Configurer un conteneur side-car pour un conteneur personnalisé dans Azure App Service.

Dans Azure App Service, vous pouvez ajouter jusqu’à neuf conteneurs side-car pour chaque application Linux. Les conteneurs Sidecar vous permettent de déployer des services et des fonctionnalités supplémentaires sur vos applications Linux sans les rendre étroitement couplés au conteneur principal (intégré). Par exemple, vous pouvez ajouter des services de surveillance, de journalisation, de configuration et de mise en réseau en tant que conteneurs sidecar. Un sidecar collecteur OpenTelemetry serait par exemple utilisé pour la surveillance.

Pour plus d’informations sur le conteneur sidecar dans App Service, consultez :

Si vous n’avez pas d’abonnement Azure, créez un compte gratuit Azure avant de commencer.

1. Configuration des ressources nécessaires

Vous commencez par créer les ressources utilisées par le tutoriel. Elles sont utilisées pour ce scénario spécifique et ne sont pas nécessaires pour les conteneurs sidecar en général.

  1. Dans Azure Cloud Shell, exécutez les commandes suivantes. Assurez-vous de fournir le <environment-name>.

    git clone https://github.com/Azure-Samples/app-service-sidecar-tutorial-prereqs
    cd app-service-sidecar-tutorial-prereqs
    azd env new <environment-name>
    azd provision
    
  2. Lorsque vous y êtes invité, indiquez l'abonnement et la région de votre choix. Par exemple :

    • Abonnement : votre abonnement.
    • Région : (Europe) Europe Ouest.

    Une fois le déploiement terminé, la sortie suivante doit s’afficher :

     APPLICATIONINSIGHTS_CONNECTION_STRING = InstrumentationKey=...;IngestionEndpoint=...;LiveEndpoint=...
     Azure container registry name = <registry-name>
     Managed identity resource ID = <managed-identity-resource-id>
     Managed identity client ID = <managed-identity-client-id>
    
     Open resource group in the portal: https://portal.azure.com/#@/resource/subscriptions/<subscription-id>/resourceGroups/<group-name>
     
  3. Copiez ces valeurs de sortie pour une utilisation ultérieure. Vous pouvez également les trouver sur le portail, dans les pages de gestion des ressources respectives.

    Remarque

    azd provision utilise les modèles inclus pour créer les ressources Azure suivantes :

    • Un groupe de ressources basé sur le nom de l'environnement.
    • Un registre de conteneurs avec deux images déployées :
      • Image Nginx avec le module OpenTelemetry ;
      • Image collecteur OpenTelemetry configurée pour l’exportation vers Azure Monitor.
    • Une identité gérée attribuée par l’utilisateur avec l’autorisation AcrPull sur le groupe de ressources (pour extraire des images du registre).
    • Un espace de travail d'analyse des journaux.
    • Un composant Application Insights.

2. Créer une application web

Dans cette étape, vous déployez un modèle d’application ASP.NET Core. De retour dans Azure Cloud Shell, exécutez les commandes suivantes. Remplacez <app-name> par un nom d’application unique.

cd ~
dotnet new webapp -n MyFirstAzureWebApp --framework net8.0
cd MyFirstAzureWebApp
az webapp up --name <app-name> --os-type linux

Après quelques minutes, cette application Web .NET est déployée en tant que MyFirstAzureWebApp.dll sur une nouvelle application App Service.

3. Ajout d’un conteneur sidecar

Dans cette section, vous ajoutez un conteneur sidecar à votre application Linux. L’expérience du portail est toujours en cours de déploiement. Si ce n’est pas encore disponible pour vous, continuez avec l’onglet Utiliser le modèle ARM ci-dessous.

  1. Dans le Portail Microsoft Azure, accédez à la page de gestion de l’application

  2. Dans la page de gestion de l’application, dans le menu de gauche, sélectionnez Centre de déploiement.

  3. Sélectionnez la bannière Vous souhaitez ajouter des conteneurs à exécuter parallèlement à votre application ? Cliquez ici pour l'essayer.

    Si vous ne voyez pas la bannière, cela signifie que l'interface utilisateur du portail n'est pas encore déployée pour votre abonnement. Sélectionnez plutôt l’onglet Utiliser le modèle ARM et continuez.

  4. Lorsque la page se recharge, sélectionnez l’onglet Conteneurs (nouveau).

  5. Sélectionnez Ajouter et configurez le nouveau conteneur comme suit :

    • Nom : otel-collector
    • Source d’image : Azure Container Registry
    • Authentification : Informations d'identification de l'administrateur
    • Registre : Registre créé par azd provision
    • Image : otel-collector
    • Balise : la plus récente
  6. Sélectionnez Appliquer.

    Capture d’écran montrant comment configurer un conteneur sidecar dans le Centre de déploiement d’une application web.

4. Configuration des variables d’environnement

Pour l’exemple de scénario, le sidecar otel-collector est configuré pour exporter les données OpenTelemetry vers Azure Monitor, mais il a besoin de la chaîne de connexion comme variable d’environnement (consultez le fichier de configuration OpenTelemetry pour l’image otel-collector).

Vous configurez des variables d’environnement pour les conteneurs comme n’importe quelle application App Service, en configurant les paramètres d’application. La totalité des conteneurs de l’application peuvent accéder aux paramètres d’application.

  1. Accédez à la page de gestion de l’application App Service.

  2. Dans le menu de gauche, sélectionnez Variables d’environnement.

  3. Ajoutez un paramètre d’application en sélectionnant Ajouter et configurez-le comme suit :

    • Nom : APPLICATIONINSIGHTS_CONNECTION_STRING
    • Valeur : chaîne de connexion dans la sortie de azd provision. Si vous avez perdu la session Cloud Shell, vous pouvez également la trouver dans la page Vue d’ensemble de la ressource Application Insight, sous Chaîne de connexion.
  4. Sélectionnez Appliquer, puis Appliquer, puis Confirmer.

    Capture d’écran montrant la page Configuration d’une application web avec deux paramètres d’application ajoutés.

5. Configurez l'instrumentation au démarrage

Dans cette étape, vous créez l’instrumentation de votre application selon les étapes décrites dans l’instrumentation zéro code OpenTelemetry .NET.

  1. De retour dans Cloud Shell, créez startup.sh avec les lignes suivantes.

    cat > startup.sh << 'EOF'
    #!/bin/bash
    
    # Download the bash script
    curl -sSfL https://github.com/open-telemetry/opentelemetry-dotnet-instrumentation/releases/latest/download/otel-dotnet-auto-install.sh -O
    
    # Install core files
    sh ./otel-dotnet-auto-install.sh
    
    # Enable execution for the instrumentation script
    chmod +x $HOME/.otel-dotnet-auto/instrument.sh
    
    # Setup the instrumentation for the current shell session
    . $HOME/.otel-dotnet-auto/instrument.sh
    
    export OTEL_SERVICE_NAME="MyFirstAzureWebApp-Azure"
    export OTEL_EXPORTER_OTLP_ENDPOINT="http://localhost:4318"
    export OTEL_TRACES_EXPORTER="otlp"
    export OTEL_METRICS_EXPORTER="otlp"
    export OTEL_LOGS_EXPORTER="otlp"
    
    # Run your application with instrumentation
    OTEL_SERVICE_NAME=myapp OTEL_RESOURCE_ATTRIBUTES=deployment.environment=staging,service.version=1.0.0 dotnet /home/site/wwwroot/MyFirstAzureWebApp.dll
    EOF
    
  2. Déployez ce fichier sur votre application avec la commande Azure CLI suivante. Si vous êtes toujours dans le répertoire ~/MyFirstAzureWebApp, aucun autre paramètre n’est nécessaire car az webapp up par défaut sont déjà définies pour le groupe de ressources et le nom de l’application.

    az webapp deploy --src-path startup.sh --target-path /home/site/startup.sh --type static
    

    Conseil

    Cette approche déploie le fichier startup.sh séparément de votre application. De cette façon, la configuration de l’instrumentation est distincte de votre code d’application. Cependant, vous pouvez utiliser d’autres méthodes de déploiement pour déployer le script avec votre application.

  3. De retour dans la page de gestion de l'application, dans le menu de gauche, sélectionnez Configuration.

  4. Définissez la commande de démarrage sur /home/site/startup.sh. Il s’agit du même chemin que celui que vous avez déployé à l’étape précédente.

  5. Sélectionnez Enregistrer, puis Continuer.

    Capture d’écran qui montre comment configurer un fichier de démarrage personnalisé pour une application App Service dans le Portail Microsoft Azure.

5. Vérification dans Application Insights

Le sidecar otel-collector doit maintenant exporter des données vers Application Insights.

  1. De retour dans l’onglet de navigateur pour https://<app-name>.azurewebsites.net, actualisez la page quelques fois pour générer certaines requêtes web.

  2. Revenez à la page de présentation du groupe de ressources, puis sélectionnez la ressource Application Insights créée par azd up. Désormais, des données doivent apparaître dans les graphiques par défaut.

    Capture d’écran de la page Application Insights montrant les données présentes dans les graphiques par défaut.

Remarque

Dans ce scénario de surveillance très courant, Application Insights n’est qu’une des cibles OpenTelemetry que vous pouvez utiliser, telles que Jaeger, Prometheus et Zipkin.

6. Nettoyer les ressources

Lorsque vous n’avez plus besoin de l’environnement, vous pouvez supprimer les groupes de ressources et toutes les ressources associées. Exécutez simplement ces commandes dans Cloud Shell :

cd ~/MyFirstAzureWebApp
az group delete --yes
cd ~/app-service-sidecar-tutorial-prereqs
azd down

Forum aux questions

Comment les conteneurs side-car gèrent-ils la communication interne ?

Les conteneurs side-car partagent le même hôte réseau que le conteneur principal, de sorte que le conteneur principal (et les autres conteneurs side-car) peuvent atteindre n'importe quel port du side-car avec localhost:<port>. L'exemple startup.sh utilise localhost:4318 pour accéder au port 4318 sur le sidecar otel-collector.

Dans la boîte de dialogue Modifier le conteneur, la zone Port n’est actuellement pas utilisée par App Service. Vous pouvez l'utiliser dans le cadre des métadonnées du side-car, par exemple pour indiquer le port sur lequel le side-car écoute.

Comment instrumenter d’autres piles de langages ?

Vous pouvez utiliser une approche similaire pour instrumenter des applications dans d’autres piles de langages. Pour plus d'informations, consultez la documentation OpenTelemetry :

Plus de ressources