在 Azure 容器上启用 .NET Profiler
几乎无需代码即可为容器中运行的应用程序启用用于 .NET 的 Application Insights Profiler。 若要在容器实例上启用 .NET Profiler,需要:
- 添加对
Microsoft.ApplicationInsights.Profiler.AspNetCore
NuGet 包的引用。 - 更新代码以启用用于 .NET 的 Profiler。
- 设置 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
此示例是通过调用以下 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)); }
添加用于收集 .NET Profiler 跟踪的 NuGet 包:
dotnet add package Microsoft.ApplicationInsights.Profiler.AspNetCore
启用 Application Insights 和 .NET Profiler。
在
Program.cs
中的WebApplication.CreateBuilder()
方法后面添加builder.Services.AddApplicationInsightsTelemetry()
和builder.Services.AddServiceProfiler()
: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
添加 Application Insights 密钥
通过 Azure 门户中的 Application Insights 资源,记下你的 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 Profiler 跟踪
等待 2 到 5 分钟,以便可以将事件聚合到 Application Insights。
在 Application Insights 资源中打开“性能”窗格。
跟踪过程完成后,将显示“Profiler 跟踪”按钮。
清理资源
运行以下命令停止示例项目:
docker rm -f testapp