Включение профилировщика .NET в контейнерах Azure
Вы можете включить Application Insights Profiler для .NET в приложениях, работающих в контейнере практически без кода. Чтобы включить .NET Profiler в экземпляре контейнера, необходимо:
- Добавьте ссылку на пакет NuGet
Microsoft.ApplicationInsights.Profiler.AspNetCore
. - Обновите код, чтобы включить Профилировщик для .NET.
- Настройте ключ инструментирования Application Insights.
Из этой статьи вы узнаете о различных способах:
- Установка пакета NuGet в проекте.
- Настройка переменной среды с помощью оркестратора (например, Kubernetes).
- Сведения о безопасности для рабочего развертывания, например защита ключа инструментирования Application Insights.
Необходимые компоненты
- Получение ресурса Application Insights. Запишите ключ инструментирования.
- Docker Desktop для создания образов Docker.
- Установленный пакет .NET 6 SDK.
Настройка среды
Клонируйте и используйте следующий пример проекта:
git clone https://github.com/microsoft/ApplicationInsights-Profiler-AspNetCore.git
Перейдите к примеру приложения-контейнера:
cd examples/EnableServiceProfilerForContainerAppNet6
Этот пример представляет собой проект 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)); }
Добавьте пакет NuGet для сбора трассировок профилировщика .NET:
dotnet add package Microsoft.ApplicationInsights.Profiler.AspNetCore
Включите 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
Перейдите в пример каталога .NET Core 6.0:
cd examples/EnableServiceProfilerForContainerAppNet6
Извлеките последние образы 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
С помощью ресурса Application Insights на портале Azure запишите ключ инструментирования Application Insights.
Откройте
appsettings.json
и добавьте ключ инструментирования Application Insights в этот раздел кода:{ "ApplicationInsights": { "InstrumentationKey": "Your instrumentation key" } }
Сборка и запуск образа Docker
Просмотрите файл Docker.
Создайте пример образа:
docker build -t profilerapp .
Запустите контейнер:
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.
Просмотр трассировок профилировщика .NET
Подождите 2–5 минут, чтобы события можно было агрегировать в Application Insights.
Откройте область "Производительность" в ресурсе Application Insights.
После завершения процесса трассировки появится кнопка "Трассировка профилировщика ".
Очистка ресурсов
Чтобы остановить пример проекта, выполните следующую команду:
docker rm -f testapp