Samouczek: konfigurowanie kontenera sidecar dla aplikacji systemu Linux w usłudze Azure App Service

W tym samouczku dodasz kolektor OpenTelemetry jako kontener sidecar do aplikacji systemu Linux (bring-your-own-code) w usłudze Azure App Service. W przypadku kontenerów niestandardowych zobacz Samouczek: konfigurowanie kontenera pomocniczego dla kontenera niestandardowego w usłudze Azure App Service.

Jeśli nie masz jeszcze konta platformy Azure, przed rozpoczęciem utwórz bezpłatne konto.

Kontenery boczne w usłudze App Service umożliwiają wdrażanie dodatkowych usług i funkcji w aplikacjach Linux bez ścisłego wiązania ich z wbudowanym lub niestandardowym głównym kontenerem. Kontenery sidecar działają obok głównego kontenera aplikacji w tym samym planie usługi App Service.

Możesz dodać do dziewięciu kontenerów pomocniczych dla każdej aplikacji Linux w usłudze App Service. Można na przykład dodać monitorowanie, rejestrowanie, konfigurację i usługi sieciowe jako kontenery sidecar. Przyczepka modułu zbierającego OpenTelemetry jest jednym z przykładów monitorowania.

1. Konfigurowanie wymaganych zasobów

Najpierw utworzysz zasoby, których używa samouczek. Są one używane w tym konkretnym scenariuszu i nie są wymagane w przypadku kontenerów sidecar w ogóle.

  1. W usłudze Azure Cloud Shell uruchom następujące polecenia. Pamiętaj, aby dostarczyć <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. Po wyświetleniu monitu podaj wybraną subskrypcję i region. Na przykład:

    • Subskrypcja: Twoja subskrypcja.
    • Region: (Europa) Europa Zachodnia.

    Po zakończeniu wdrażania powinny zostać wyświetlone następujące dane wyjściowe:

     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. Skopiuj te wartości wyjściowe do późniejszego użycia. Można je również znaleźć w portalu na stronach zarządzania odpowiednich zasobów.

    Uwaga

    azd provision używa dołączonych szablonów, aby utworzyć następujące zasoby platformy Azure:

2. Utwórz aplikację internetową

W tym kroku wdrożysz szablon aplikacji ASP.NET Core. Wykonaj następujące polecenia w Azure Cloud Shell. Zastąp <app-name> globalnie unikalną nazwą aplikacji i eastus preferowanym regionem.

  1. Utwórz przykładową aplikację:

    cd ~
    dotnet new webapp -n MyFirstAzureWebApp --framework net8.0
    cd MyFirstAzureWebApp
    
  2. Utwórz grupę zasobów, plan Linux App Service oraz aplikację webową:

    az group create --name myWebAppResourceGroup --location eastus
    az appservice plan create --name myWebAppPlan --resource-group myWebAppResourceGroup --sku P0v3 --is-linux
    az webapp create --name <app-name> --resource-group myWebAppResourceGroup --plan myWebAppPlan --runtime "DOTNETCORE:8.0"
    
  3. Zbuduj aplikację i zapakuj zawartość katalogu publish:

    dotnet publish --configuration Release --output publish
    cd publish
    zip -r ../app.zip .
    cd ..
    
  4. Wdróż pakiet.

    az webapp deploy --name <app-name> --resource-group myWebAppResourceGroup --src-path app.zip --type zip
    

Po kilku minutach aplikacja internetowa .NET zostaje wdrożona jako MyFirstAzureWebApp.dll do nowej aplikacji App Service.

3. Dodawanie kontenera sidecar

W tej sekcji dodasz kontener sidecar do aplikacji systemu Linux.

  1. W witrynie Azure Portal przejdź do strony zarządzania aplikacją

  2. Na stronie zarządzania aplikacją z menu po lewej stronie wybierz pozycję Deployment Center.

  3. Wybierz baner z tekstem Czy chcesz dodać kontenery do uruchomienia obok aplikacji? Kliknij tutaj, aby spróbować.

  4. Po ponownym załadowaniu strony wybierz kartę Kontenery (nowe).

  5. Wybierz pozycję Dodaj i skonfiguruj nowy kontener w następujący sposób:

    • Nazwa: otel-collector
    • Źródło obrazu: Azure Container Registry
    • Uwierzytelnianie: Poświadczenia administratora
    • Rejestr: rejestr utworzony przez azd provision
    • Image: otel-collector
    • Znacznik: najnowsze
  6. Wybierz Zastosuj.

    Zrzut ekranu przedstawiający sposób konfigurowania kontenera sidecar w centrum wdrażania aplikacji internetowej.

4. Konfigurowanie zmiennych środowiskowych

W przykładowym scenariuszu kontener sidecar modułu zbierającego otel jest skonfigurowany do eksportowania danych OpenTelemetry do usługi Azure Monitor, ale wymaga ciągu połączenia w postaci zmiennej środowiskowej (zobacz plik konfiguracji OpenTelemetry dla obrazu modułu zbierającego otel-collector).

Zmienne środowiskowe dla kontenerów konfigurujesz jak w przypadku każdej aplikacji usługi App Service, konfigurując ustawienia aplikacji. Ustawienia aplikacji są dostępne dla wszystkich kontenerów w aplikacji.

  1. Przejdź do strony zarządzania aplikacji App Service.

  2. W menu po lewej stronie wybierz pozycję Zmienne środowiskowe.

  3. Dodaj ustawienie aplikacji, wybierając pozycję Dodaj i skonfiguruj je w następujący sposób:

    • Nazwa: APPLICATIONINSIGHTS_CONNECTION_STRING
    • Wartość: Parametry połączenia w danych wyjściowych azd provision. Jeśli utracisz sesję usługi Cloud Shell, możesz ją również znaleźć na stronie Przegląd zasobu usługi Application Insights w obszarze Connection String.
  4. Wybierz Zastosuj, a następnie Zastosuj, a następnie Potwierdź.

    Zrzut ekranu przedstawiający stronę Konfiguracja aplikacji internetowej z dodanymi dwoma ustawieniami aplikacji.

5. Konfigurowanie instrumentacji podczas uruchamiania

W tym kroku utworzysz instrumentację dla aplikacji zgodnie z krokami opisanymi w OpenTelemetry .NET zero-code instrumentation.

  1. Po powrocie do usługi Cloud Shell utwórz startup.sh z następującymi wierszami.

    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. Wdróż ten plik do aplikacji za pomocą następującego polecenia interfejsu wiersza polecenia platformy Azure. Zastąp <app-name> nazwą, której użyłeś podczas tworzenia aplikacji.

    az webapp deploy --resource-group myWebAppResourceGroup --name <app-name> --src-path startup.sh --target-path /home/site/startup.sh --type static
    

    Napiwek

    To podejście wdraża plik startup.sh oddzielnie od aplikacji. W ten sposób konfiguracja instrumentacji jest oddzielona od kodu aplikacji. Można jednak użyć innych metod wdrażania, aby wdrożyć skrypt razem z aplikacją.

  3. Po powrocie na stronę zarządzania aplikacją z menu po lewej stronie wybierz pozycję Konfiguracja.

  4. Ustaw polecenie uruchamiania na /home/site/startup.sh. Jest to ta sama ścieżka, do której wdrożono w poprzednim kroku.

  5. Wybierz pozycję Zapisz, a następnie Kontynuuj.

    Zrzut ekranu przedstawiający sposób konfigurowania niestandardowego pliku uruchamiania dla aplikacji usługi App Service w witrynie Azure Portal.

5. Sprawdź w usłudze Application Insights

Sidecar modułu otel-collector powinien teraz eksportować dane do usługi Application Insights.

  1. Wróć do karty przeglądarki https://<app-name>.azurewebsites.net, odśwież stronę kilka razy, aby wygenerować niektóre żądania internetowe.

  2. Wróć do strony przeglądu grupy zasobów, a następnie wybierz zasób usługi Application Insights utworzony przez azd up. Powinny być teraz widoczne pewne dane na wykresach domyślnych.

    Zrzut ekranu przedstawiający stronę usługi Application Insights z danymi na wykresach domyślnych.

Uwaga

W tym bardzo typowym scenariuszu monitorowania usługa Application Insights jest tylko jednym z systemów docelowych OpenTelemetry, których można użyć, takich jak Jaeger, Prometheus i Zipkin.

6. Czyszczenie zasobów

Gdy środowisko nie jest już potrzebne, możesz usunąć grupy zasobów i wszystkie powiązane zasoby. Wystarczy uruchomić następujące polecenia w usłudze Cloud Shell:

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

Więcej zasobów