Esercitazione: Configurare un contenitore sidecar per un'app Linux nel servizio app Azure
In questa esercitazione si aggiunge un agente di raccolta OpenTelemetry come contenitore sidecar a un'app Linux (bring-your-own-code) nel servizio app Azure. Per i contenitori personalizzati, vedere Esercitazione: Configurare un contenitore sidecar per un contenitore personalizzato in app Azure Servizio.
In app Azure Service è possibile aggiungere fino a nove contenitori sidecar per ogni app Linux. I contenitori sidecar consentono di distribuire servizi e funzionalità aggiuntivi nelle app Linux senza renderli strettamente associati al contenitore principale (predefinito). Ad esempio, è possibile aggiungere servizi di monitoraggio, registrazione, configurazione e rete come contenitori sidecar. Un sidecar dell'agente di raccolta OpenTelemetry è un esempio di monitoraggio di questo tipo.
Per altre informazioni sul contenitore laterale in servizio app, vedere:
- Introduzione ai sidecar per il servizio app Azure per Linux: ora disponibile a livello generale
- Annuncio della disponibilità generale dell'estendibilità sidecar nel servizio app Azure
Se non si ha una sottoscrizione di Azure, creare un account Azure gratuito prima di iniziare.
1. Configurare le risorse necessarie
Prima di tutto si creano le risorse usate dall'esercitazione. Vengono usate per questo particolare scenario e non sono necessarie per i contenitori sidecar in generale.
In Azure Cloud Shell eseguire i comandi seguenti. Assicurarsi di fornire l'oggetto
<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
Quando richiesto, specificare la sottoscrizione e l'area desiderata. Ad esempio:
- Sottoscrizione: la sottoscrizione.
- Area: (Europa) Europa occidentale.
Al termine della distribuzione, verrà visualizzato l'output seguente:
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>
Copiare questi valori di output per un secondo momento. È anche possibile trovarli nel portale, nelle pagine di gestione delle rispettive risorse.
Nota
azd provision
usa i modelli inclusi per creare le risorse di Azure seguenti:- Gruppo di risorse basato sul nome dell'ambiente.
- Un registro contenitori con due immagini distribuite:
- Immagine Nginx con il modulo OpenTelemetry.
- Immagine dell'agente di raccolta OpenTelemetry configurata per l'esportazione in Monitoraggio di Azure.
- Identità gestita assegnata dall'utente con l'autorizzazione
AcrPull
per il gruppo di risorse (per eseguire il pull delle immagini dal Registro di sistema). - Un'area di lavoro Log Analytics.
- Componente di Application Insights .
2. Creare un'app Web
In questo passaggio si distribuisce un modello ASP.NET'applicazione Core. Tornare in Azure Cloud Shell ed eseguire i comandi seguenti. Sostituire <app-name>
con un nome di app univoco.
cd ~
dotnet new webapp -n MyFirstAzureWebApp --framework net8.0
cd MyFirstAzureWebApp
az webapp up --name <app-name> --os-type linux
Dopo alcuni minuti, questa applicazione Web .NET viene distribuita come MyFirstAzureWebApp.dll in una nuova app servizio app.
3. Aggiungere un contenitore sidecar
In questa sezione si aggiunge un contenitore sidecar all'app Linux. L'esperienza del portale è ancora in fase di implementazione. Se non è ancora disponibile, continuare con la scheda Usa modello di Resource Manager seguente.
Nella portale di Azure passare alla pagina di gestione dell'app
Nel menu a sinistra della pagina di gestione dell'app selezionare Centro distribuzione.
Selezionare il banner Interessata all'aggiunta di contenitori da eseguire insieme all'app? Fare clic qui per provare.
Se non è possibile visualizzare il banner, l'interfaccia utente del portale non è ancora distribuita per la sottoscrizione. Selezionare invece la scheda Usa modello di Resource Manager qui e continuare.
Quando la pagina viene ricaricata, selezionare la scheda Contenitori (nuovo).
Selezionare Aggiungi e configurare il nuovo contenitore come indicato di seguito:
- Nome: agente di raccolta
- Origine immagine: Registro Azure Container
- Autenticazione: Credenziali amministratore
- Registro di sistema: registro creato da
azd provision
- Image: agente di raccolta
- Tag: latest
Selezionare Applica.
4. Configurare le variabili di ambiente
Per lo scenario di esempio, il sidecar dell'agente di raccolta destinazioni è configurato per esportare i dati OpenTelemetry in Monitoraggio di Azure, ma ha bisogno della stringa di connessione come variabile di ambiente (vedere il file di configurazione OpenTelemetry per l'immagine dell'agente di raccolta dati).
È possibile configurare le variabili di ambiente per i contenitori come qualsiasi app del servizio app configurando le impostazioni dell'app. Le impostazioni dell'app sono accessibili a tutti i contenitori nell'app.
Passare alla pagina di gestione dell'app servizio app.
Nel menu a sinistra selezionare Variabili di ambiente.
Aggiungere un'impostazione dell'app selezionando Aggiungi e configurandola come segue:
- Nome: APPLICATIONINSIGHTS_CONNECTION_STRING
- Valore: stringa di connessione nell'output di
azd provision
. Se si perde la sessione di Cloud Shell, è anche possibile trovarla nella pagina Panoramica della risorsa Application Insight, in Stringa di connessione.
Selezionare Applica, quindi Applica, quindi Conferma.
5. Configurare la strumentazione all'avvio
In questo passaggio si crea la strumentazione per l'app in base ai passaggi descritti nella strumentazione zero-code di OpenTelemetry .NET.
Tornare in Cloud Shell, creare startup.sh con le righe seguenti.
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
Distribuire questo file nell'app con il comando seguente dell'interfaccia della riga di comando di Azure. Se si è ancora nella directory ~/MyFirstAzureWebApp , non sono necessari altri parametri perché
az webapp up
sono già stati impostati i valori predefiniti per il gruppo di risorse e il nome dell'app.az webapp deploy --src-path startup.sh --target-path /home/site/startup.sh --type static
Suggerimento
Questo approccio distribuisce il file startup.sh separatamente dall'applicazione. In questo modo, la configurazione della strumentazione è separata dal codice dell'applicazione. Tuttavia, è possibile usare altri metodi di distribuzione per distribuire lo script insieme all'applicazione.
Nella pagina di gestione dell'app selezionare Configurazione dal menu a sinistra.
Impostare Comando di avvio su /home/site/startup.sh. È lo stesso percorso in cui è stato distribuito nel passaggio precedente.
Selezionare Salva, quindi Continua.
5. Verificare in Application Insights
Il sidecar dell'agente di raccolta eseguirà ora l'esportazione dei dati in Application Insights.
Tornare alla scheda del browser per
https://<app-name>.azurewebsites.net
, aggiornare la pagina alcune volte per generare alcune richieste Web.Tornare alla pagina di panoramica del gruppo di risorse e quindi selezionare la risorsa
azd up
di Application Insights creata. Verranno ora visualizzati alcuni dati nei grafici predefiniti.
Nota
In questo scenario di monitoraggio molto comune, Application Insights è solo una delle destinazioni OpenTelemetry che è possibile usare, ad esempio Jaeger, Prometheus e Zipkin.
6. Pulire le risorse
Quando l'ambiente non è più necessario, è possibile eliminare i gruppi di risorse e tutte le risorse correlate. È sufficiente eseguire questi comandi in Cloud Shell:
cd ~/MyFirstAzureWebApp
az group delete --yes
cd ~/app-service-sidecar-tutorial-prereqs
azd down
Domande frequenti
- In che modo i contenitori sidecar gestiscono la comunicazione interna?
- Ricerca per categorie instrumentare altri stack di linguaggi?
In che modo i contenitori sidecar gestiscono la comunicazione interna?
I contenitori sidecar condividono lo stesso host di rete del contenitore principale, quindi il contenitore principale (e altri contenitori sidecar) può raggiungere qualsiasi porta sul sidecar con localhost:<port>
. L'esempio startup.sh usa localhost:4318
per accedere alla porta 4318 sul sidecar dell'agente di raccolta dati.
Nella finestra di dialogo Modifica contenitore la casella Porta non è attualmente usata da servizio app. È possibile usarlo come parte dei metadati sidecar, ad esempio per indicare la porta su cui è in ascolto il sidecar.
Ricerca per categorie instrumentare altri stack di linguaggi?
È possibile usare un approccio simile per instrumentare le app in altri stack di linguaggi. Per altre informazioni, vedere la documentazione di OpenTelemetry: