介绍
MiniProfiler 是一个轻量级的 .NET 性能分析工具,可以在 Swagger UI 页面中嵌入实时的请求耗时分析面板,帮助开发者在开发阶段直观地看到每次请求中各个执行阶段的耗时分布。
silky 框架通过 Silky.Http.MiniProfiler 包集成了 MiniProfiler,并在 RPC 调用、路由查找、远程调用等关键阶段埋点,提供框架级别的细粒度性能数据。
Tips
MiniProfiler 仅建议在开发/测试环境中启用。生产环境建议禁用,避免额外的请求开销和信息泄露风险。
安装
Silky.Http.MiniProfiler 已内置于 Silky.Agent.Host,无需单独安装。若使用自定义主机,手动安装:
PM> Install-Package Silky.Http.MiniProfiler
启用 MiniProfiler
步骤一:注册 MiniProfiler 服务
在 Startup.ConfigureServices 中添加:
public void ConfigureServices(IServiceCollection services)
{
services
.AddSilkyHttpCore()
.AddSwaggerDocuments()
.AddSilkyMiniProfiler(); // 注册 MiniProfiler 服务
}
AddSilkyMiniProfiler() 内部完成了以下配置:
- 设置 MiniProfiler 的路由基础路径为
/index-mini-profiler - 启用自动颜色方案(Auto),支持深色/浅色主题
- 启用
Server-Timing响应头(可在浏览器 DevTools 网络面板中看到耗时信息) - 忽略
/lib、/css、/js、/swagger等静态资源路径
步骤二:添加 MiniProfiler 中间件
在 Startup.Configure 中添加 MiniProfiler 中间件(必须在 UseSwaggerDocuments 附近,且在 UseRouting 之前):
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseSwaggerDocuments(); // 先注册 Swagger
app.UseMiniProfiler(); // 再注册 MiniProfiler(注入到 Swagger UI)
}
app.UseRouting();
// ...
}
步骤三:Swagger 配置(可选)
MiniProfiler 面板会自动注入到 Swagger UI 页面中。确保 SwaggerDocument 配置正确即可:
SwaggerDocument:
Title: "My Service API"
EnableAuthorized: true
MiniProfiler 面板说明
启用后,在 Swagger UI 页面的左上角会出现 MiniProfiler 速度指示器。点击后展开当前请求的完整耗时分析树。
silky 框架在以下执行阶段埋点:
路由阶段(Route)
| 埋点状态 | 说明 |
|---|---|
FindServiceEntry | 根据请求的 WebAPI + HTTP 方法 在服务条目表中查找对应的 ServiceEntry |
FindServiceKey | 查找服务键(ServiceKey),用于选择服务接口的具体实现版本 |
远程调用阶段(RemoteInvoker)
| 埋点状态 | 说明 |
|---|---|
Prepare | 准备远程调用,序列化请求参数 |
Success | 远程调用成功,反序列化结果 |
Fail | 远程调用失败(熔断、超时、网络错误等) |
End | 远程调用结束(无论成功失败) |
RPC 通信阶段(Rpc)
| 埋点状态 | 说明 |
|---|---|
Start | 开始 RPC 通信 |
FindServiceRoute | 在注册中心查找服务路由(目标服务实例列表) |
HashKey | 计算哈希一致性 Key(当负载均衡策略为 HashAlgorithm 时使用) |
SelectedServerEndpoint | 根据负载均衡策略选定目标服务实例 |
Success | RPC 调用成功 |
Fail | RPC 调用失败(含错误信息,在面板中标红显示) |
MarkAddressFail | 标记目标实例为不健康(触发熔断计数) |
Warning
MiniProfiler 仅在来自 Swagger UI 的请求中生效(检测请求头 request-from: swagger)。直接通过接口工具(如 Postman)发起的请求不会触发 MiniProfiler 埋点。
查看 Server-Timing
AddSilkyMiniProfiler() 默认开启了 Server-Timing 响应头。在浏览器的开发者工具(F12)→ Network 面板中,选中任意 API 请求,切换到 Timing 标签页,即可看到服务端各阶段的耗时数据,无需打开 MiniProfiler 面板。
完整配置示例
网关 Startup.cs:
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services
.AddSilkyHttpCore()
.AddRouting()
.AddSwaggerDocuments()
.AddSilkyIdentity()
.AddSilkyMiniProfiler(); // 启用 MiniProfiler
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseSwaggerDocuments();
app.UseMiniProfiler(); // 注入 MiniProfiler UI 到 Swagger
}
app.UseRouting();
app.UseSilkyIdentity();
app.UseEndpoints(endpoints =>
{
endpoints.MapSilkyRpcServices();
endpoints.MapSilkyDashboardServices();
});
}
}
