Freigeben über


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:

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.

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

  1. Navigieren Sie im Azure-Portal zur Verwaltungsseite der App

  2. Wählen Sie auf der Verwaltungsseite der App im linken Menü Bereitstellungscenter aus.

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

  4. Wenn die Seite neu geladen wird, wählen Sie die Registerkarte Container (neu) aus.

  5. 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
  6. Wählen Sie Übernehmen.

    Screenshot: Konfigurieren eines Sidecar-Containers im Bereitstellungscenter einer Web-App

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.

  1. Navigieren Sie zur Verwaltungsseite der App Service-App.

  2. Wählen Sie im linken Menü Umgebungsvariablen aus.

  3. 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.
  4. Wählen Sie Übernehmen und dann Anwenden aus, und Bestätigen Sie.

    Screenshot: Konfigurationsseite einer Web-App mit zwei hinzugefügten App-Einstellungen

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.

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

  3. Wählen Sie wieder auf der Verwaltungsseite der App im linken Menü Konfiguration aus.

  4. Legen Sie den Startbefehl auf /home/site/startup.sh fest. Es ist derselbe Pfad, den Sie im vorherigen Schritt bereitgestellt haben.

  5. Wählen Sie Speichern und dann Fortfahren aus.

    Screenshot, der zeigt, wie Sie eine benutzerdefinierte Startdatei für eine App Service-App im Azure-Portal konfigurieren.

5. Überprüfen in Application Insights

Das Sidecar „otel-collector“ sollte jetzt Daten nach Application Insights exportieren.

  1. Navigieren Sie zurück zur Browserregisterkarte für https://<app-name>.azurewebsites.net, und aktualisieren Sie die Seite mehrmals, um einige Webanforderungen zu generieren.

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

    Screenshot: Application Insights-Seite mit Daten in den Standarddiagrammen

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?

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:

Weitere Ressourcen