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 :
- Présentation des sidecars pour Azure App Service pour Linux : désormais en disponibilité générale
- Annonce de la disponibilité générale de l’extensibilité de sidecar dans Azure App Service
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.
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
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>
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.
Dans le Portail Microsoft Azure, accédez à la page de gestion de l’application
Dans la page de gestion de l’application, dans le menu de gauche, sélectionnez Centre de déploiement.
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.
Lorsque la page se recharge, sélectionnez l’onglet Conteneurs (nouveau).
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
Sélectionnez Appliquer.
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.
Accédez à la page de gestion de l’application App Service.
Dans le menu de gauche, sélectionnez Variables d’environnement.
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.
Sélectionnez Appliquer, puis Appliquer, puis Confirmer.
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.
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
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.
De retour dans la page de gestion de l'application, dans le menu de gauche, sélectionnez Configuration.
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.
Sélectionnez Enregistrer, puis Continuer.
5. Vérification dans Application Insights
Le sidecar otel-collector doit maintenant exporter des données vers Application Insights.
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.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.
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 ?
- Comment instrumenter d’autres piles de langages ?
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 :