Zelfstudie: Een sidecar-container configureren voor een Linux-app in Azure-app Service

In deze zelfstudie voegt u een OpenTelemetry-collector toe als sidecarcontainer aan een Linux-app (bring-your-own-code) in Azure-app Service. Zie Zelfstudie: Een sidecarcontainer configureren voor aangepaste containers in Azure App Service voor aangepaste containers.

Als u geen Azure-account hebt, maak dan een gratis account aan voordat u begint.

Met Sidecar-containers in App Service kunt u extra services en functies implementeren in uw Linux-apps zonder deze nauw te koppelen aan de ingebouwde of aangepaste hoofdcontainer. De sidecar-containers worden uitgevoerd naast de hoofdtoepassingscontainer in hetzelfde App Service-plan.

U kunt maximaal negen sidecarcontainers toevoegen voor elke Linux-app in App Service. U kunt bijvoorbeeld bewakings-, logboekregistratie-, configuratie- en netwerkservices toevoegen als sidecarcontainers. Een sidecar van de OpenTelemetry-collector is een voorbeeld voor monitoring.

1. De benodigde resources instellen

Eerst maakt u de resources die in de zelfstudie worden gebruikt. Ze worden gebruikt voor dit specifieke scenario en zijn niet vereist voor sidecarcontainers in het algemeen.

  1. Voer in Azure Cloud Shell de volgende opdrachten uit. Zorg ervoor dat u de <environment-name> toevoegt.

    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. Geef het abonnement en de regio van uw keuze op wanneer u hierom wordt gevraagd. Voorbeeld:

    • Abonnement: uw abonnement.
    • Regio: (Europa) West-Europa.

    Wanneer de implementatie is voltooid, ziet u de volgende uitvoer:

     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. Kopieer deze uitvoerwaarden voor later gebruik. U kunt ze ook vinden in de portal, op de beheerpagina's van de respectieve resources.

    Opmerking

    azd provision maakt gebruik van de opgenomen sjablonen om de volgende Azure-resources te maken:

    • Een resourcegroep op basis van de omgevingsnaam.
    • Een containerregistry waarin twee images zijn geïmplementeerd:
      • Een Nginx-image met de OpenTelemetry-module.
      • Een OpenTelemetry collector-image die is geconfigureerd om te exporteren naar Azure Monitor.
    • Een door de gebruiker toegewezen beheerde identiteit met de AcrPull machtiging voor de resourcegroep (om images uit het containerregister op te halen).
    • Een Log Analytics-werkruimte.
    • Een Application Insights-onderdeel .

2. Een web-app maken

In deze stap rolt u een sjabloon-ASP.NET Core-toepassing uit. Voer de volgende commando's uit in Azure Cloud Shell. Vervang <app-name> door een wereldwijd unieke appnaam en eastus door je voorkeursregio.

  1. Maak de voorbeeldtoepassing:

    cd ~
    dotnet new webapp -n MyFirstAzureWebApp --framework net8.0
    cd MyFirstAzureWebApp
    
  2. Stel de resourcegroep, het Linux App Service-plan en de webapp in:

    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. Bouw de applicatie en pak de inhoud van de publishing-directory:

    dotnet publish --configuration Release --output publish
    cd publish
    zip -r ../app.zip .
    cd ..
    
  4. Implementeer het pakket.

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

Na een paar minuten wordt de .NET webapplicatie als MyFirstAzureWebApp.dll uitgerold naar de nieuwe App Service-app.

3. Een sidecarcontainer toevoegen

In deze sectie voegt u een sidecar-container toe aan uw Linux-app.

  1. Navigeer in Azure Portal naar de beheerpagina van de app

  2. Selecteer Deployment Center in het linkermenu op de beheerpagina van de app.

  3. Selecteer de banner Geïnteresseerd in het toevoegen van containers die naast uw app moeten worden uitgevoerd? Klik hier om het te proberen.

  4. Wanneer de pagina opnieuw wordt geladen, selecteer het tabblad Containers (nieuw).

  5. Selecteer Toevoegen en configureer de nieuwe container als volgt:

    • Naam: otel-collector
    • Bron van image: Azure Container Registry
    • Authenticatie: Beheerdersgegevens
    • register: het register aangemaakt door azd provision
    • Afbeelding: otel-collector
    • Tag: latest
  6. Selecteer Toepassen.

    Schermopname die laat zien hoe u een sidecarcontainer configureert in het implementatiecentrum van een web-app.

4. Omgevingsvariabelen configureren

Voor het voorbeeldscenario is de sidecar van de otel-collector geconfigureerd voor het exporteren van de OpenTelemetry-gegevens naar Azure Monitor, maar het heeft de verbindingsreeks nodig als een omgevingsvariabele (zie het OpenTelemetry-configuratiebestand voor de otel-collector-installatiekopie).

U configureert omgevingsvariabelen voor de containers, zoals bij elke App Service-app, door app-instellingen te configureren. De app-instellingen zijn toegankelijk voor alle containers in de app.

  1. Navigeer naar de beheerpagina van de App Service-app.

  2. Selecteer omgevingsvariabelen in het linkermenu.

  3. Voeg een app-instelling toe door Toevoegen te selecteren en deze als volgt te configureren:

    • Naam: APPLICATIONINSIGHTS_CONNECTION_STRING
    • Waarde: Dit is de verbindingsreeks in de uitvoer van azd provision. Als u de Cloud Shell-sessie bent kwijtgeraakt, kunt u deze ook vinden op de pagina Overzicht van de Application Insight-resource onder Verbindingsreeks.
  4. Selecteer Toepassen en vervolgens Toepassen en vervolgens Bevestigen.

    Schermopname van de configuratiepagina van een web-app met twee app-instellingen toegevoegd.

5. Instrumentatie bij opstarten configureren

In deze stap maakt u de instrumentatie voor uw app volgens de stappen die worden beschreven in de OpenTelemetry .NET zero-code-instrumentatie.

  1. Terug in Cloud Shell maak je startup.sh met de volgende regels.

    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. Implementeer dit bestand in uw app met de volgende Azure CLI-opdracht. Vervang <app-name> door de naam die je gebruikte bij het maken van de app.

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

    Aanbeveling

    Met deze methode wordt het startup.sh-bestand afzonderlijk van uw toepassing geïmplementeerd. Op die manier is de instrumentatieconfiguratie gescheiden van uw toepassingscode. U kunt echter andere implementatiemethoden gebruiken om het script samen met uw toepassing te implementeren.

  3. Selecteer Configuratie in het linkermenu op de beheerpagina van de app.

  4. Stel de opstartopdracht in op /home/site/startup.sh. Het is hetzelfde pad waarnaar u in de vorige stap hebt geïmplementeerd.

  5. Selecteer Opslaan en vervolgens Doorgaan.

    Schermopname van het configureren van een aangepast opstartbestand voor een App Service-app in Azure Portal.

5. Controleer in Application Insights

De sidecar van de otel-collector moet nu gegevens exporteren naar Application Insights.

  1. Terug in het browsertabblad voor https://<app-name>.azurewebsites.net, vernieuw de pagina een paar keer om enkele webaanvragen te genereren.

  2. Ga terug naar de overzichtspagina van de resourcegroep en selecteer vervolgens de Application Insights-resource die door azd up is gemaakt. U ziet nu enkele gegevens in de standaardgrafieken.

    Schermopname van de Application Insights-pagina met gegevens in de standaardgrafieken.

Opmerking

In dit veelvoorkomende bewakingsscenario is Application Insights slechts een van de OpenTelemetry-doelen die u kunt gebruiken, zoals Jaeger, Prometheus en Zipkin.

6. Resources opschonen

Wanneer u de omgeving niet meer nodig hebt, kunt u de resourcegroepen en alle gerelateerde resources verwijderen. Voer deze opdrachten uit in de Cloud Shell:

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

Meer bronnen