Condividi tramite


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

Configurare l'ambiente

  1. Clonare e usare il progetto di esempio seguente:

    git clone https://github.com/microsoft/ApplicationInsights-Profiler-AspNetCore.git
    
  2. Passare all'esempio di app contenitore:

    cd examples/EnableServiceProfilerForContainerAppNet6
    
  3. 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));
    }
    
  4. Aggiungere il pacchetto NuGet per raccogliere le tracce del profiler .NET:

    dotnet add package Microsoft.ApplicationInsights.Profiler.AspNetCore
    
  5. Abilitare Application Insights e .NET Profiler.

    Aggiungere builder.Services.AddApplicationInsightsTelemetry() e builder.Services.AddServiceProfiler() dopo il metodo WebApplication.CreateBuilder() in Program.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

  1. Passare alla directory di esempio di .NET Core 6.0:

    cd examples/EnableServiceProfilerForContainerAppNet6
    
  2. 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
    

Suggerimento

Trovare le immagini ufficiali per Docker SDK e il runtime.

Aggiungere la chiave di Application Insights

  1. Tramite la risorsa di Application Insights nel portale di Azure prendere nota della chiave di strumentazione di Application Insights.

    Screenshot che mostra la ricerca della chiave di strumentazione nel portale di Azure.

  2. 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

  1. Esaminare il file Docker.

  2. Compilare l'immagine di esempio:

    docker build -t profilerapp .
    
  3. 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

  1. Attendere da 2 a 5 minuti in modo che gli eventi possano essere aggregati ad Application Insights.

  2. Aprire il riquadro Prestazioni nella risorsa di Application Insights.

  3. Al termine del processo di traccia, viene visualizzato il pulsante Tracce del Profiler.

    Screenshot che mostra il pulsante Tracce profiler .NET nel riquadro Prestazioni.

Pulire le risorse

Eseguire il comando seguente per arrestare il progetto di esempio:

docker rm -f testapp

Passaggi successivi