Профилирование динамических контейнеров Azure с помощью Application Insights

Вы можете включить Application Insights Profiler для приложения ASP.NET Core, работающего в контейнере практически без кода. Чтобы включить Application Insights Profiler в экземпляре контейнера, необходимо:

  • Добавьте ссылку на пакет NuGet Microsoft.ApplicationInsights.Profiler.AspNetCore.
  • Обновите код, чтобы включить профилировщик.
  • Настройте ключ инструментирования Application Insights.

В этой статье вы узнаете о различных способах:

  • Установка пакета NuGet в проекте.
  • Настройка переменной среды с помощью оркестратора (например, Kubernetes).
  • Ознакомьтесь с соображениями безопасности при развертывании в рабочей среде, например о защите ключа инструментирования Application Insights.

Предварительные требования

Настройка среды

  1. Клонируйте и используйте следующий пример проекта:

    git clone https://github.com/microsoft/ApplicationInsights-Profiler-AspNetCore.git
    
  2. Перейдите к примеру приложения-контейнера:

    cd examples/EnableServiceProfilerForContainerAppNet6
    
  3. Этот пример представляет собой проект barebones, созданный путем вызова следующей команды CLI:

    dotnet new mvc -n EnableServiceProfilerForContainerApp
    

    Мы добавили задержку в проекте Controllers/WeatherForecastController.cs для имитации узких мест.

    [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. Добавьте пакет NuGet для сбора трассировок профилировщика.

    dotnet add package Microsoft.ApplicationInsights.Profiler.AspNetCore
    
  5. Включите Application Insights и Profiler.

    Добавьте builder.Services.AddApplicationInsightsTelemetry() и builder.Services.AddServiceProfiler() после WebApplication.CreateBuilder() метода в 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();
    

Извлечение последних образов сборки и среды выполнения ASP.NET Core

  1. Перейдите в каталог примеров .NET Core 6.0:

    cd examples/EnableServiceProfilerForContainerAppNet6
    
  2. Извлеките последние ASP.NET Core образы:

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

Совет

Найдите официальные образы для пакета SDK и среды выполнения Docker.

Добавление ключа Application Insights

  1. С помощью ресурса Application Insights на портале Azure запишите ключ инструментирования Application Insights.

    Снимок экрана: поиск ключа инструментирования в портал Azure.

  2. Откройте appsettings.json и добавьте ключ инструментирования Application Insights в этот раздел кода:

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

Сборка и запуск образа Docker

  1. Просмотрите файл Docker.

  2. Создайте пример образа:

    docker build -t profilerapp .
    
  3. Запустите контейнер:

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

Просмотр контейнера через браузер

Чтобы попасть в конечную точку, есть два варианта:

  • Посетите http://localhost:8080/weatherforecast сайт в браузере.

  • Используйте curl:

    curl http://localhost:8080/weatherforecast
    

Изучение журналов

При необходимости проверьте локальный журнал, чтобы узнать, завершился ли сеанс профилирования:

docker logs testapp

В локальных журналах обратите внимание на следующие события:

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.

Просмотр трассировок Service Profiler

  1. Подождите от 2 до 5 минут, чтобы события можно было агрегировать в Application Insights.

  2. Откройте панель Производительность в ресурсе Application Insights.

  3. После завершения процесса трассировки появится кнопка Трассировка профилировщика .

    Снимок экрана: кнопка трассировки Профилировщика в области Производительность.

Очистка ресурсов

Чтобы остановить пример проекта, выполните следующую команду:

docker rm -f testapp

Дальнейшие действия