Tutorial: Konfigurieren eines Sidecar-Containers für eine Linux-App in Azure App Service
In diesem Tutorial fügen Sie einen OpenTelemetry-Collector als Sidecar-Container zu einer Linux-(bring-your-own-code)-App in Azure App Service hinzu. Informationen zu benutzerdefinierten Containern finden Sie unter Tutorial: Konfigurieren eines Sidecar-Containers für benutzerdefinierte Container in Azure App Service.
In Azure App Service können Sie bis zu neun Sidecar-Container für jede Linux-App hinzufügen. Mit Sidecar-Containern können Sie zusätzliche Dienste und Features für Ihre Linux-Apps bereitstellen, ohne sie eng mit dem (integrierten) Hauptcontainer zu verkoppeln. Sie können beispielsweise Überwachungs-, Protokollierungs-, Konfigurations- und Netzwerkdienste als Sidecar-Container hinzufügen. Ein OpenTelemetry-Collector-Sidecar ist ein solches Überwachungsbeispiel.
Weitere Informationen zum Seitencontainer in App Service finden Sie unter:
- Einführung in Sidecars für Azure App Service für Linux: Jetzt allgemein verfügbar
- Ankündigung der allgemeinen Verfügbarkeit der Sidecar-Erweiterbarkeit in Azure App Service
Wenn Sie kein Azure-Abonnement haben, erstellen Sie ein kostenloses Azure-Konto, bevor Sie beginnen.
1. Einrichten der erforderlichen Ressourcen
Zuerst erstellen Sie die Ressourcen, die das Tutorial verwendet. Sie werden für dieses bestimmte Szenario verwendet und sind im Allgemeinen nicht für Sidecar-Container erforderlich.
Führen Sie in Azure Cloud Shell die folgenden Befehle aus. Stellen Sie sicher, dass Sie die
<environment-name>
bereitstellen.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
Wenn Sie dazu aufgefordert werden, geben Sie das Abonnement und die Region Ihrer Wahl an. Zum Beispiel:
- Abonnement: Ihr Abonnement.
- Region: (Europa) Europa, Westen.
Wenn die Bereitstellung abgeschlossen ist, sollte die folgende Ausgabe angezeigt werden:
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>
Öffnen Sie den Ressourcengruppenlink auf einer Browserregisterkarte. Sie benötigen diese Ausgabewerte später.
Hinweis
azd provision
verwendet die enthaltenen Vorlagen, um die folgenden Azure-Ressourcen zu erstellen:- Eine Ressourcengruppe basierend auf dem Umgebungsnamen.
- Eine Containerregistrierung mit zwei bereitgestellten Images:
- Ein Nginx-Image mit dem OpenTelemetry-Modul
- Ein OpenTelemetry-Collector-Image, das für den Export in Azure Monitorkonfiguriert ist
- Eine vom Benutzer zugewiesene verwaltete Identität mit der Berechtigung für die
AcrPull
Ressourcengruppe (um Bilder aus der Registrierung abzurufen). - Ein Log Analytics-Arbeitsbereich.
- Eine Application Insights-Komponente.
2. Erstellen einer Web-App
In diesem Schritt stellen Sie eine Vorlage ASP.NET Core-Anwendung bereit. Führen Sie wieder in Azure Cloud Shell die folgenden Befehle aus. Ersetzen Sie <app-name>
durch einen eindeutigen App-Namen.
cd ~
dotnet new webapp -n MyFirstAzureWebApp --framework net8.0
cd MyFirstAzureWebApp
az webapp up --name <app-name> --os-type linux
Nach ein paar Minuten wird diese .NET-Webanwendung als MyFirstAzureWebApp.dll für eine neue App Service-App bereitgestellt.
3. Hinzufügen eines Sidecar-Containers
In diesem Abschnitt fügen Sie Ihrer Linux-App einen Sidecar-Container hinzu. Die Portaloberfläche wird noch eingeführt. Wenn sie noch nicht verfügbar ist, fahren Sie mit der Registerkarte Verwendung der ARM-Vorlage weiter unten fort.
Navigieren Sie im Azure-Portal zur Verwaltungsseite der App
Wählen Sie auf der Verwaltungsseite der App im linken Menü Bereitstellungscenter aus.
Wählen Sie das folgende Banner aus: Möchten Sie Container hinzuzufügen, die zusammen mit Ihrer App ausgeführt werden sollen? Klicken Sie hier, um es auszuprobieren.
Wenn das Banner nicht angezeigt wird, ist die Portal-Benutzeroberfläche für Ihr Abonnement noch nicht eingeführt. Wählen Sie hier die Registerkarte ARM-Vorlage verwenden und fahren Sie fort.
Wenn die Seite neu geladen wird, wählen Sie die Registerkarte Container (neu) aus.
Wählen Sie Hinzufügen aus, und konfigurieren Sie den neuen Container wie folgt:
- Name: otel-collector
- Imagequelle: Azure Container Registry
- Authentifizierung: Administratoranmeldeinformationen
- Registrierung: Die von
azd provision
erstellte Registrierung - Image: otel-collector
- Tag: latest
Wählen Sie Übernehmen.
4. Konfigurieren von Umgebungsvariablen
Für das Beispielszenario ist das Sidecar „otel-collector“ so konfiguriert, dass die OpenTelemetry-Daten nach Azure Monitor exportiert werden. Allerdings wird die Verbindungszeichenfolge als Umgebungsvariable benötigt wird (siehe die OpenTelemetry-Konfigurationsdatei für das otel-collector-Image).
Sie konfigurieren Umgebungsvariablen für die Container wie für jede App Service-App, indem Sie App-Einstellungen konfigurieren. Die App-Einstellungen sind für alle Container in der App zugänglich.
Navigieren Sie zur Verwaltungsseite der App Service-App.
Wählen Sie im linken Menü Umgebungsvariablen aus.
Fügen Sie eine App-Einstellung hinzu, indem Sie Hinzufügen auswählen und wie folgt konfigurieren:
- Name: APPLICATIONINSIGHTS_CONNECTION_STRING
- Wert: Die Verbindungszeichenfolge in der Ausgabe von
azd provision
. Wenn Sie die Cloud Shell-Sitzung verloren haben, finden Sie sie auch auf der Seite Übersicht der Application Insight-Ressource unter Verbindungszeichenfolge.
Wählen Sie Übernehmen und dann Anwenden aus, und Bestätigen Sie.
5. Konfigurieren der Instrumentierung beim Start
In diesem Schritt erstellen Sie die Instrumentierung für Ihre App entsprechend den Schritten, die in der OpenTelemetry .NET Zero-Code-Instrumentierung beschrieben sind.
Erstellen Sie in der Cloud Shell startup.sh mit den folgenden Zeilen.
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
Stellen Sie diese Datei mit dem folgenden Azure CLI-Befehl in Ihrer App bereit. Wenn Sie sich noch im Verzeichnis ~/MyFirstAzureWebApp befinden, sind keine anderen Parameter erforderlich, da
az webapp up
bereits Standardwerte für die Ressourcengruppe und den App-Namen festgelegt wurden.az webapp deploy --src-path startup.sh --target-path /home/site/startup.sh --type static
Tipp
Bei diesem Ansatz wird die startup.sh-Datei separat von Ihrer Anwendung bereitgestellt. Auf diese Weise ist die Instrumentierungskonfiguration von Ihrem Anwendungscode getrennt. Sie können jedoch andere Bereitstellungsmethoden verwenden, um das Skript zusammen mit Ihrer Anwendung bereitzustellen.
Wählen Sie wieder auf der Verwaltungsseite der App im linken Menü Konfiguration aus.
Legen Sie den Startbefehl auf /home/site/startup.sh fest. Es ist derselbe Pfad, den Sie im vorherigen Schritt bereitgestellt haben.
Wählen Sie Speichern und dann Fortfahren aus.
5. Überprüfen in Application Insights
Das Sidecar „otel-collector“ sollte jetzt Daten nach Application Insights exportieren.
Navigieren Sie zurück zur Browserregisterkarte für
https://<app-name>.azurewebsites.net
, und aktualisieren Sie die Seite mehrmals, um einige Webanforderungen zu generieren.Wechseln Sie zurück zur Übersichtsseite der Ressourcengruppe, und wählen Sie dann die Application Insights-Ressource aus. Nun sollten einige Daten in den Standarddiagrammen angezeigt werden.
Hinweis
In diesem sehr gängigen Überwachungsszenario ist Application Insights nur eins der OpenTelemetry-Ziele, die Sie verwenden können, z. B. Jaeger, Prometheus und Zipkin.
6. Bereinigen von Ressourcen
Wenn Sie die Umgebung nicht mehr benötigen, können Sie die Ressourcengruppen und alle zugehörigen Ressourcen löschen. Führen Sie einfach diese Befehle in der Cloud Shell aus:
cd ~/MyFirstAzureWebApp
az group delete --yes
cd ~/app-service-sidecar-tutorial-prereqs
azd down
Häufig gestellte Fragen
- Wie behandeln Sidecarcontainer die interne Kommunikation?
- Wie kann ich andere Sprachstapel instrumentieren?
Wie behandeln Sidecarcontainer die interne Kommunikation?
Sidecar-Container teilen den gleichen Netzwerkhost wie der Hauptcontainer, sodass der Hauptcontainer (und andere Sidecar-Container) jeden Port auf dem Sidecar mit localhost:<port>
erreichen kann. Im Beispiel startup.sh wird localhost:4318
für den Zugriff auf Port 4318 das Sidecar otel-Collector verwendet.
Im Dialogfeld Container bearbeiten wird das Feld Port derzeit nicht von App Service verwendet. Sie können es als Teil der Sidecar-Metadaten verwenden, z. B. um anzugeben, auf welchen Port der Sidecar lauscht.
Wie kann ich andere Sprachstapel instrumentieren?
Sie können einen ähnlichen Ansatz für Instrument-Apps in anderen Sprachstapeln verwenden. Weitere Informationen finden Sie in der OpenTelemetry-Dokumentation: