Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
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.
Voer in Azure Cloud Shell de volgende opdrachten uit. Zorg ervoor dat u de
<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
Geef het abonnement en de regio van uw keuze op wanneer u hierom wordt gevraagd. Voorbeeld:
- Abonnement: uw abonnement.
- Regio: (Europa) Europa - west.
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>
Kopieer deze uitvoerwaarden voor later gebruik. U kunt ze ook vinden in de portal, op de beheerpagina's van de respectieve resources.
Notitie
azd provision
maakt gebruik van de opgenomen sjablonen om de volgende Azure-resources te maken:- Een resourcegroep op basis van de omgevingsnaam.
- Een containerregister met twee installatiekopieën geïmplementeerd:
- Een Nginx-afbeelding met de Module OpenTelemetry.
- Een OpenTelemetry Collector-installatiekopieën die zijn geconfigureerd om te exporteren naar Azure Monitor.
- Een door de gebruiker toegewezen beheerde identiteit met de
AcrPull
machtiging voor de resourcegroep (om installatiekopieën uit het register op te halen). - Een Log Analytics-werkruimte.
- Een Application Insights-onderdeel .
2. Een web-app maken
In deze stap implementeert u een sjabloon ASP.NET Core-toepassing. Voer in Azure Cloud Shell de volgende opdrachten uit. Vervang <app-name>
door een unieke app-naam.
cd ~
dotnet new webapp -n MyFirstAzureWebApp --framework net8.0
cd MyFirstAzureWebApp
az webapp up --name <app-name> --os-type linux
Na enkele minuten wordt deze .NET-webtoepassing geïmplementeerd als MyFirstAzureWebApp.dll naar een nieuwe App Service-app.
3. Een sidecarcontainer toevoegen
In deze sectie voegt u een sidecar-container toe aan uw Linux-app.
Navigeer in Azure Portal naar de beheerpagina van de app
Selecteer Deployment Center in het linkermenu op de beheerpagina van de app.
Selecteer de banner Geïnteresseerd in het toevoegen van containers die naast uw app moeten worden uitgevoerd? Klik hier om het te proberen.
Wanneer de pagina opnieuw wordt geladen, selecteert u het tabblad Containers (nieuw).
Selecteer De nieuwe container als volgt toevoegen en configureren:
- Naam: otel-collector
- Bron van installatiekopieën: Azure Container Registry
- Verificatie: beheerdersreferenties
-
Register: het register dat is gemaakt door
azd provision
- Afbeelding: otel-collector
- Tag: meest recente
Selecteer Toepassen.
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 installatiekopie van metry).
U configureert omgevingsvariabelen voor de containers zoals elke App Service-app door app-instellingen te configureren. De app-instellingen zijn toegankelijk voor alle containers in de app.
Navigeer naar de beheerpagina van de App Service-app.
Selecteer omgevingsvariabelen in het linkermenu.
Voeg een app-instelling toe door deze als volgt toe te voegen en te configureren:
- Naam: APPLICATIONINSIGHTS_CONNECTION_STRING
-
Waarde: de verbindingsreeks in de uitvoer van
azd provision
. Als u de Cloud Shell-sessie kwijtraakt, kunt u deze ook vinden op de pagina Overzicht van de Application Insight-resource onder Verbindingsreeks.
Selecteer Toepassen en vervolgens Toepassen en vervolgens Bevestigen.
5. Instrumentatie bij opstarten configureren
In deze stap maakt u de instrumentatie voor uw app volgens de stappen die worden beschreven in de instrumentatie van OpenTelemetry .NET zero-code.
Maak in Cloud Shell 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
Implementeer dit bestand in uw app met de volgende Azure CLI-opdracht. Als u zich nog steeds in de map ~/MyFirstAzureWebApp bevindt, zijn er geen andere parameters nodig omdat
az webapp up
er al standaardwaarden zijn ingesteld voor de resourcegroep en de naam van de app.az webapp deploy --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.
Selecteer Configuratie in het linkermenu op de beheerpagina van de app.
Stel de opstartopdracht in op /home/site/startup.sh. Het is hetzelfde pad waarnaar u in de vorige stap hebt geïmplementeerd.
Selecteer Opslaan en vervolgens Doorgaan.
5. Controleren in Application Insights
De sidecar van de otel-collector moet nu gegevens exporteren naar Application Insights.
Vernieuw de pagina een paar keer op het browsertabblad om
https://<app-name>.azurewebsites.net
enkele webaanvragen te genereren.Ga terug naar de overzichtspagina van de resourcegroep en selecteer vervolgens de Application Insights-resource die is
azd up
gemaakt. U ziet nu enkele gegevens in de standaardgrafieken.
Notitie
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 --yes
cd ~/app-service-sidecar-tutorial-prereqs
azd down
Veelgestelde vragen
- Hoe verwerken sidecarcontainers interne communicatie?
- Kan een sidecarcontainer internetaanvragen ontvangen?
- Hoe kan ik andere taalstacks instrumenteert?
Hoe verwerken sidecarcontainers interne communicatie?
Sidecar-containers delen dezelfde netwerkhost als de hoofdcontainer, zodat de hoofdcontainer en andere sidecarcontainers elke poort in de sidecar met localhost:<port>
kunnen bereiken. Het voorbeeld startup.sh gebruikt localhost:4318
om toegang te krijgen tot poort 4318 op de otel-collector sidecar.
In het dialoogvenster Container bewerken wordt de poortinstelling momenteel niet gebruikt door App Service. U kunt deze gebruiken als onderdeel van de sidecar-metagegevens, bijvoorbeeld om aan te geven naar welke poort de sidecar luistert.
Kan een sidecarcontainer internetaanvragen ontvangen?
Nee. App Service stuurt internetaanvragen alleen naar de hoofdcontainer. Voor op code gebaseerde Linux-apps is de ingebouwde Linux-container de hoofdcontainer, en elke sidecar sitecontainers
moet worden toegevoegd met IsMain=false
.
Voor aangepaste containers moet alles behalve één van de sitecontainers
de IsMain=false
hebben. Zie IsMain
voor meer informatie over het configureren.
Hoe gebruik ik volumemounts?
Met de functie voor volumekoppelingen kunt u niet-permanente bestanden en mappen delen tussen containers in uw web-app. Als u volumekoppelingen wilt toevoegen of configureren, gebruikt u Volumekoppelingen op de pagina Container toevoegen of Container bewerken .
- Volumesubpad is een automatisch gemaakt logisch mappad waarnaar niet wordt verwezen in de container. Containers die zijn geconfigureerd met hetzelfde volumesubpad, kunnen bestanden en mappen delen.
- Het pad voor het koppelen van containers is een mappad waarnaar u in de container verwijst. Het koppelingspad van de container wordt toegewezen aan het subpad van het volume.
Stel dat u de volgende volumekoppelingen configureert:
Sidecar-naam | Volume-subpad | Pad voor koppelen van container | alleen lezen |
---|---|---|---|
Container1 | /directory1/directory2 | /container1Vol | Onwaar |
Container2 | /directory1/directory2 | /container2Vol | Klopt |
Container3 | /directory1/directory2/directory3 | /container3Vol | Onwaar |
Container4 | /directory4 | /container1Vol | Onwaar |
Op basis van deze instellingen zijn de volgende voorwaarden van toepassing:
- Als Container1 /container1Vol/myfile.txtmaakt, kan Container2 het bestand lezen via /container2Vol/myfile.txt.
- Als Container1 /container1Vol/directory3/myfile.txtmaakt, kan Container2 het bestand lezen via /container2Vol/directory3/myfile.txten kan Container3 het bestand lezen en schrijven via /container3Vol/myfile.txt.
- Container4 heeft geen volumekoppeling gemeen met geen van de andere containers.
Notitie
Voor Linux-apps op basis van code kan de ingebouwde Linux-container geen volumekoppelingen gebruiken.
Hoe kan ik andere taalstacks instrumenteert?
U kunt een vergelijkbare benadering gebruiken om apps in andere taalstacks te instrumenteren. Zie de OpenTelemetry-documentatie voor meer informatie:
Meer resources
- Zelfstudie: Chatbot uitvoeren in App Service met een Phi-3 sidecar-extensie (ASP.NET Core)
- Handleiding: Chatbot uitvoeren in App Service met een Phi-3-sidecarextensie (Spring Boot)
- Handleiding: Chatbot uitvoeren in App Service met een Phi-3 sidecar-extensie (FastAPI)
- Zelfstudie: Chatbot draaien in App Service met een Phi-3 sidecar-extensie (Express.js)
- REST API: Web Apps - Sitecontainer maken of bijwerken
- Infrastructuur als code: Microsoft.Web sites/sitecontainers