Abilitare .NET Profiler nei contenitori di Azure
È possibile abilitare Application Insights Profiler per .NET nelle applicazioni in esecuzione nel contenitore quasi senza codice. Per abilitare .NET Profiler nell'istanza del contenitore, è necessario:
- Aggiungere il riferimento al pacchetto NuGet
Microsoft.ApplicationInsights.Profiler.AspNetCore
. - Aggiornare il codice per abilitare profiler per .NET.
- Configurare la chiave di strumentazione di Application Insights.
In questo articolo vengono illustrati i vari modi in cui è possibile:
- Installare il pacchetto NuGet nel progetto.
- Impostare la variabile di ambiente tramite l'agente di orchestrazione (ad esempio Kubernetes).
- Informazioni sulle considerazioni sulla sicurezza relative alla distribuzione di produzione, ad esempio la protezione della chiave di strumentazione di Application Insights.
Prerequisiti
- Una risorsa di Application Insights. Prendere nota della chiave di strumentazione.
- Docker Desktop per compilare immagini Docker.
- .NET 6 SDK installato.
Configurare l'ambiente
Clonare e usare il progetto di esempio seguente:
git clone https://github.com/microsoft/ApplicationInsights-Profiler-AspNetCore.git
Passare all'esempio di app contenitore:
cd examples/EnableServiceProfilerForContainerAppNet6
Questo esempio è un progetto barebones creato chiamando il comando dell'interfaccia della riga di comando seguente:
dotnet new mvc -n EnableServiceProfilerForContainerApp
È stato aggiunto un ritardo nel progetto
Controllers/WeatherForecastController.cs
per simulare il collo di bottiglia.[HttpGet(Name = "GetWeatherForecast")] public IEnumerable<WeatherForecast> Get() { SimulateDelay(); ... // Other existing code. } private void SimulateDelay() { // Delay for 500ms to 2s to simulate a bottleneck. Thread.Sleep((new Random()).Next(500, 2000)); }
Aggiungere il pacchetto NuGet per raccogliere le tracce del profiler .NET:
dotnet add package Microsoft.ApplicationInsights.Profiler.AspNetCore
Abilitare Application Insights e .NET Profiler.
Aggiungere
builder.Services.AddApplicationInsightsTelemetry()
ebuilder.Services.AddServiceProfiler()
dopo il metodoWebApplication.CreateBuilder()
inProgram.cs
:var builder = WebApplication.CreateBuilder(args); builder.Services.AddApplicationInsightsTelemetry(); // Add this line of code to enable Application Insights. builder.Services.AddServiceProfiler(); // Add this line of code to enable Profiler builder.Services.AddControllersWithViews(); var app = builder.Build();
Eseguire il pull delle immagini di compilazione/runtime più recenti ASP.NET Core
Passare alla directory di esempio di .NET Core 6.0:
cd examples/EnableServiceProfilerForContainerAppNet6
Eseguire il pull delle immagini principali di ASP.NET più recenti:
docker pull mcr.microsoft.com/dotnet/sdk:6.0 docker pull mcr.microsoft.com/dotnet/aspnet:6.0
Aggiungere la chiave di Application Insights
Tramite la risorsa di Application Insights nel portale di Azure prendere nota della chiave di strumentazione di Application Insights.
Aprire
appsettings.json
e aggiungere la chiave di strumentazione di Application Insights a questa sezione del codice:{ "ApplicationInsights": { "InstrumentationKey": "Your instrumentation key" } }
Compilare ed eseguire l'immagine Docker
Esaminare il file Docker.
Compilare l'immagine di esempio:
docker build -t profilerapp .
Eseguire il contenitore:
docker run -d -p 8080:80 --name testapp profilerapp
Visualizzare il contenitore tramite il browser
Per raggiungere l'endpoint, sono disponibili due opzioni:
Vedere
http://localhost:8080/weatherforecast
nel browser.Usare cURL:
curl http://localhost:8080/weatherforecast
Esaminare i log
Facoltativamente, esaminare il log locale per verificare se è stata completata una sessione di profilatura:
docker logs testapp
Nei log locali prendere nota degli eventi seguenti:
Starting application insights profiler with instrumentation key: your-instrumentation key # Double check the instrumentation key
Service Profiler session started. # Profiler started.
Finished calling trace uploader. Exit code: 0 # Uploader is called with exit code 0.
Service Profiler session finished. # A profiling session is completed.
Visualizzare le tracce del profiler .NET
Attendere da 2 a 5 minuti in modo che gli eventi possano essere aggregati ad Application Insights.
Aprire il riquadro Prestazioni nella risorsa di Application Insights.
Al termine del processo di traccia, viene visualizzato il pulsante Tracce del Profiler.
Pulire le risorse
Eseguire il comando seguente per arrestare il progetto di esempio:
docker rm -f testapp