Поделиться через


Включение профилировщика .NET в контейнерах Azure

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

  • Добавьте ссылку на пакет NuGet Microsoft.ApplicationInsights.Profiler.AspNetCore.
  • Обновите код, чтобы включить Профилировщик для .NET.
  • Настройте строку подключения 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, чтобы собирать трассировки профилировщика .NET.

    dotnet add package Microsoft.ApplicationInsights.Profiler.AspNetCore
    
  5. Включите Application Insights и профилировщик .NET.

    Добавьте 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
    

Совет

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

Добавьте ключ Application Insights

  1. Используя ресурс Application Insights на портале Azure, обратите внимание на строку подключения Application Insights.

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

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

    {
        "ApplicationInsights":
        {
            "InstrumentationKey": "Your connection string"
        }
    }
    

Сборка и запуск образа 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 connection string: your-connection string # Double check the connection string
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.

Устранение неполадок

Если вы не можете найти следы из вашего приложения, продолжите шаги, описанные в этом руководстве по устранению неполадок.

Просмотр трасс профилировщика .NET

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

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

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

    Снимок экрана: кнопка трассировки профилировщика .NET на панели

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

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

docker rm -f testapp

Следующие шаги