Condividi tramite


Profilatura di contenitori di Azure live con Application Insights

È possibile abilitare Application Insights Profiler per ASP.NET Core'applicazione in esecuzione nel contenitore quasi senza codice. Per abilitare Application Insights Profiler nell'istanza del contenitore, è necessario:

  • Aggiungere il riferimento al Microsoft.ApplicationInsights.Profiler.AspNetCore pacchetto NuGet.
  • Aggiornare il codice per abilitare profiler.
  • 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 Controllers/WeatherForecastController.cs progetto 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:

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

    Aggiungere builder.Services.AddApplicationInsightsTelemetry() e builder.Services.AddServiceProfiler() dopo il WebApplication.CreateBuilder() metodo 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 ASP.NET Core 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 nella 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:

  • Visita http://localhost:8080/weatherforecast nel browser.

  • Usare curl:

    curl http://localhost:8080/weatherforecast
    

Esaminare i log

Facoltativamente, controllare 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 di Service Profiler

  1. Attendere da 2 a 5 minuti in modo che gli eventi possano essere aggregati in 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 nel riquadro Prestazioni.

Pulire le risorse

Eseguire il comando seguente per arrestare il progetto di esempio:

docker rm -f testapp

Passaggi successivi