Profilowanie na żywo kontenerów platformy Azure przy użyciu usługi Application Insights

Możesz włączyć profiler usługi Application Insights dla aplikacji ASP.NET Core działającej w kontenerze niemal bez kodu. Aby włączyć profiler usługi Application Insights w wystąpieniu kontenera, należy wykonać następujące kroki:

  • Dodaj odwołanie do Microsoft.ApplicationInsights.Profiler.AspNetCore pakietu NuGet.
  • Zaktualizuj kod, aby włączyć profilera.
  • Skonfiguruj klucz instrumentacji usługi Application Insights.

Z tego artykułu dowiesz się więcej o różnych sposobach:

  • Zainstaluj pakiet NuGet w projekcie.
  • Ustaw zmienną środowiskową za pośrednictwem orkiestratora (na przykład Kubernetes).
  • Poznaj zagadnienia dotyczące zabezpieczeń związane z wdrażaniem produkcyjnym, takie jak ochrona klucza instrumentacji usługi Application Insights.

Wymagania wstępne

Konfigurowanie środowiska

  1. Sklonuj i użyj następującego przykładowego projektu:

    git clone https://github.com/microsoft/ApplicationInsights-Profiler-AspNetCore.git
    
  2. Przejdź do przykładu aplikacji kontenera:

    cd examples/EnableServiceProfilerForContainerAppNet6
    
  3. W tym przykładzie jest tworzony projekt barebones, wywołując następujące polecenie interfejsu wiersza polecenia:

    dotnet new mvc -n EnableServiceProfilerForContainerApp
    

    Dodaliśmy opóźnienie w projekcie Controllers/WeatherForecastController.cs , aby zasymulować wąskie gardło.

    [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. Dodaj pakiet NuGet, aby zebrać ślady profilera:

    dotnet add package Microsoft.ApplicationInsights.Profiler.AspNetCore
    
  5. Włącz usługę Application Insights i profiler.

    Dodaj builder.Services.AddApplicationInsightsTelemetry() metodę i builder.Services.AddServiceProfiler() po metodzie WebApplication.CreateBuilder() w pliku 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();
    

Pobieranie najnowszych obrazów kompilacji/środowiska uruchomieniowego ASP.NET Core

  1. Przejdź do przykładowego katalogu platformy .NET Core 6.0:

    cd examples/EnableServiceProfilerForContainerAppNet6
    
  2. Ściąganie najnowszych obrazów ASP.NET Core:

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

Porada

Znajdź oficjalne obrazy zestawu Docker SDK i środowiska uruchomieniowego.

Dodawanie klucza usługi Application Insights

  1. Za pomocą zasobu usługi Application Insights w Azure Portal zanotuj klucz instrumentacji usługi Application Insights.

    Zrzut ekranu przedstawiający znajdowanie klucza instrumentacji w Azure Portal.

  2. Otwórz appsettings.json i dodaj klucz instrumentacji usługi Application Insights do tej sekcji kodu:

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

Kompilowanie i uruchamianie obrazu platformy Docker

  1. Przejrzyj plik platformy Docker.

  2. Skompiluj przykładowy obraz:

    docker build -t profilerapp .
    
  3. Uruchom kontener:

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

Wyświetlanie kontenera za pośrednictwem przeglądarki

Aby trafić do punktu końcowego, dostępne są dwie opcje:

  • Odwiedź http://localhost:8080/weatherforecast przeglądarkę.

  • Użyj narzędzia curl:

    curl http://localhost:8080/weatherforecast
    

Sprawdzanie dzienników

Opcjonalnie sprawdź dziennik lokalny, aby sprawdzić, czy sesja profilowania zakończyła się:

docker logs testapp

W dziennikach lokalnych zwróć uwagę na następujące zdarzenia:

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.

Wyświetlanie śladów profilera usługi

  1. Poczekaj od 2 do 5 minut, aby zdarzenia mogły być agregowane do usługi Application Insights.

  2. Otwórz okienko Wydajność w zasobie usługi Application Insights.

  3. Po zakończeniu procesu śledzenia zostanie wyświetlony przycisk Ślady profilera .

    Zrzut ekranu przedstawiający przycisk Ślady profilera w okienku Wydajność.

Czyszczenie zasobów

Uruchom następujące polecenie, aby zatrzymać przykładowy projekt:

docker rm -f testapp

Następne kroki