Aktivera .NET Profiler i Azure-containrar
Du kan aktivera Application Insights Profiler för .NET på program som körs i containern nästan utan kod. Om du vill aktivera .NET Profiler på containerinstansen måste du:
- Lägg till referensen
Microsoft.ApplicationInsights.Profiler.AspNetCore
till NuGet-paketet. - Uppdatera koden för att aktivera Profiler för .NET.
- Konfigurera Application Insights-instrumentationsnyckeln.
I den här artikeln får du lära dig om de olika sätt som du kan:
- Installera NuGet-paketet i projektet.
- Ange miljövariabeln via orchestrator (till exempel Kubernetes).
- Lär dig säkerhetsöverväganden kring produktionsdistribution, som att skydda din Application Insights-instrumentationsnyckel.
Förutsättningar
- En Application Insights-resurs. Anteckna instrumentationsnyckeln.
- Docker Desktop för att skapa Docker-avbildningar.
- .NET 6 SDK installerat.
Konfigurera miljön
Klona och använd följande exempelprojekt:
git clone https://github.com/microsoft/ApplicationInsights-Profiler-AspNetCore.git
Gå till exemplet containerapp:
cd examples/EnableServiceProfilerForContainerAppNet6
Det här exemplet är ett barebones-projekt som skapats genom att anropa följande CLI-kommando:
dotnet new mvc -n EnableServiceProfilerForContainerApp
Vi har lagt till fördröjning i
Controllers/WeatherForecastController.cs
projektet för att simulera flaskhalsen.[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)); }
Lägg till NuGet-paketet för att samla in .NET Profiler-spårningarna:
dotnet add package Microsoft.ApplicationInsights.Profiler.AspNetCore
Aktivera Application Insights och .NET Profiler.
Lägg till
builder.Services.AddApplicationInsightsTelemetry()
ochbuilder.Services.AddServiceProfiler()
efterWebApplication.CreateBuilder()
-metoden iProgram.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();
Hämta de senaste ASP.NET Core build/runtime-avbildningarna
Gå till exempelkatalogen för .NET Core 6.0:
cd examples/EnableServiceProfilerForContainerAppNet6
Hämta de senaste ASP.NET Core-bilderna:
docker pull mcr.microsoft.com/dotnet/sdk:6.0 docker pull mcr.microsoft.com/dotnet/aspnet:6.0
Lägg till din Application Insights-nyckel
Anteckna application insights-instrumentationsnyckeln via Application Insights-resursen i Azure Portal.
Öppna
appsettings.json
och lägg till instrumentationsnyckeln för Application Insights i det här kodavsnittet:{ "ApplicationInsights": { "InstrumentationKey": "Your instrumentation key" } }
Skapa och kör Docker-avbildningen
Granska Docker-filen.
Skapa exempelbilden:
docker build -t profilerapp .
Kör containern:
docker run -d -p 8080:80 --name testapp profilerapp
Visa containern via webbläsaren
För att nå slutpunkten har du två alternativ:
Besök
http://localhost:8080/weatherforecast
i webbläsaren.Använd curl:
curl http://localhost:8080/weatherforecast
Granska loggarna
Du kan också kontrollera den lokala loggen för att se om en session med profilering har slutförts:
docker logs testapp
Observera följande händelser i de lokala loggarna:
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.
Visa .NET Profiler-spårningar
Vänta i 2 till 5 minuter så att händelserna kan aggregeras till Application Insights.
Öppna fönstret Prestanda i Application Insights-resursen.
När spårningsprocessen är klar visas knappen ProfilerSpårningar .
Rensa resurser
Kör följande kommando för att stoppa exempelprojektet:
docker rm -f testapp