Profilování živých kontejnerů Azure pomocí Application Insights

Profiler Application Insights můžete povolit pro ASP.NET Core aplikaci spuštěnou v kontejneru téměř bez kódu. Pokud chcete v instanci kontejneru povolit profiler Application Insights, musíte:

  • Přidejte odkaz na Microsoft.ApplicationInsights.Profiler.AspNetCore balíček NuGet.
  • Aktualizujte kód a povolte profiler.
  • Nastavte instrumentační klíč Application Insights.

V tomto článku se dozvíte o různých způsobech:

  • Nainstalujte do projektu balíček NuGet.
  • Nastavte proměnnou prostředí prostřednictvím orchestrátoru (například Kubernetes).
  • Seznamte se s aspekty zabezpečení souvisejícími s produkčním nasazením, jako je ochrana instrumentačního klíče Application Insights.

Požadavky

Nastavení prostředí

  1. Naklonujte a použijte následující ukázkový projekt:

    git clone https://github.com/microsoft/ApplicationInsights-Profiler-AspNetCore.git
    
  2. Přejděte na příklad aplikace kontejneru:

    cd examples/EnableServiceProfilerForContainerAppNet6
    
  3. Tento příklad je projekt barebones vytvořený voláním následujícího příkazu rozhraní příkazového řádku:

    dotnet new mvc -n EnableServiceProfilerForContainerApp
    

    Do projektu jsme přidali zpoždění, Controllers/WeatherForecastController.cs které simuluje kritický bod.

    [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. Přidejte balíček NuGet, který shromáždí trasování Profileru:

    dotnet add package Microsoft.ApplicationInsights.Profiler.AspNetCore
    
  5. Povolte Application Insights a Profiler.

    Přidejte builder.Services.AddApplicationInsightsTelemetry() a builder.Services.AddServiceProfiler() za metodu WebApplication.CreateBuilder() v 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();
    

Stažení nejnovějších imagí sestavení/modulu runtime ASP.NET Core

  1. Přejděte do ukázkového adresáře .NET Core 6.0:

    cd examples/EnableServiceProfilerForContainerAppNet6
    
  2. Stažení nejnovějších imagí ASP.NET Core:

    docker pull mcr.microsoft.com/dotnet/sdk:6.0
    docker pull mcr.microsoft.com/dotnet/aspnet:6.0
    

Tip

Vyhledejte oficiální image pro sadu Docker SDK a modul runtime.

Přidání klíče Application Insights

  1. Prostřednictvím prostředku Application Insights v Azure Portal si poznamenejte instrumentační klíč Application Insights.

    Snímek obrazovky znázorňující vyhledání instrumentačního klíče v Azure Portal

  2. Otevřete appsettings.json a přidejte svůj instrumentační klíč Application Insights do této části kódu:

    {
        "ApplicationInsights":
        {
            "InstrumentationKey": "Your instrumentation key"
        }
    }
    

Sestavení a spuštění image Dockeru

  1. Zkontrolujte soubor Dockeru.

  2. Sestavte ukázkovou image:

    docker build -t profilerapp .
    
  3. Spusťte kontejner:

    docker run -d -p 8080:80 --name testapp profilerapp
    

Zobrazení kontejneru prostřednictvím prohlížeče

Pokud chcete přejít na koncový bod, máte dvě možnosti:

  • Přejděte http://localhost:8080/weatherforecast na stránku v prohlížeči.

  • Použijte curl:

    curl http://localhost:8080/weatherforecast
    

Kontrola protokolů

Volitelně můžete zkontrolovat místní protokol a zjistit, jestli se dokončila relace profilace:

docker logs testapp

V místních protokolech si všimněte následujících událostí:

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.

Zobrazení trasování služby Profileru

  1. Počkejte 2 až 5 minut, aby se události mohly agregovat do Application Insights.

  2. V prostředku Application Insights otevřete podokno Výkon .

  3. Po dokončení procesu trasování se zobrazí tlačítko Trasování profileru .

    Snímek obrazovky znázorňující tlačítko Trasování profileru v podokně Výkon

Vyčištění prostředků

Spuštěním následujícího příkazu zastavte ukázkový projekt:

docker rm -f testapp

Další kroky