.NET9让指标更纯正
Metrics为程序健康运行提供了保驾护航,但过多的指标又会为问题调查,大屏展示,以及基础日志存储带来更多的负担,特别对一些几乎没有意义的指示,比如健康检查的请求指标。
.NET 9 引入了一个新功能,允许在某些端点和请求上选择不采集HTTP 指标记录。
你可以通过以下方法排除某些端点的指标记录:
- 在 Web API 控制器、SignalR Hub 或 gRPC 服务上添加
[DisableHttpMetrics]
特性。 - 在应用程序启动时映射端点时,调用
DisableHttpMetrics()
using Microsoft.AspNetCore.Http.Features; using Microsoft.AspNetCore.Http.HttpResults; using OpenTelemetry.Metrics; var builder = WebApplication.CreateBuilder(args); builder.Services.AddHealthChecks(); builder.Services.AddOpenTelemetry() .WithMetrics(builder => { builder.AddMeter("Microsoft.AspNetCore.Hosting", "Microsoft.AspNetCore.Server.Kestrel"); builder.AddView("http.server.request.duration", new ExplicitBucketHistogramConfiguration { Boundaries = new double[] { 0, 0.005, 0.01, 0.025, 0.05, 0.075, 0.1, 0.25, 0.5, 0.75, 1, 2.5, 5, 7.5, 10 } }); }); var app = builder.Build(); app.MapGet("/test", () => { return "ok"; }); app.MapHealthChecks("/healthz"); app.Run();
运行程序,接下来执行下面的命令:
dotnet-counters monitor -n DisableHttpMetricsDemo --counters Microsoft.AspNetCore.Hosting
(如果没有安装dotnet-counters,请用下面命令安装:dotnet tool install --global dotnet-counters )
然后请求http://localhost:5189/healthz,结果如下:
现在修改26行代码如下:
app.MapHealthChecks("/healthz").DisableHttpMetrics();
再次运行跟踪命令,并请求/healthz,这时/healthz就不会出现在指标中了。
在更复杂的场景中,如果请求没有直接映射到某个端点,或者你希望动态地选择不采集某些 HTTP 请求的指标记录,可以使用 IHttpMetricsTagsFeature
接口上的新属性 MetricsDisabled
。在处理 HTTP 请求时,将 MetricsDisabled
设置为 true
即可选择不采集该请求的指标记录。
通过中间件条件性地选择不采集HTTP 请求的指标记录。
app.Use(async (context, next) => { if (context.Request.Headers.ContainsKey("x-disable-metrics")) { var feature = context.Features.Get<IHttpMetricsTagsFeature>(); if (feature != null) { feature.MetricsDisabled = true; } } await next(context); });
具体验证方式如上。
文章来源微信公众号
想要更快更方便的了解相关知识,可以关注微信公众号
****欢迎关注我的asp.net core系统课程****
《asp.net core精要讲解》 https://ke.qq.com/course/265696
《asp.net core 3.0》 https://ke.qq.com/course/437517
《asp.net core项目实战》 https://ke.qq.com/course/291868
《基于.net core微服务》 https://ke.qq.com/course/299524
《asp.net core精要讲解》 https://ke.qq.com/course/265696
《asp.net core 3.0》 https://ke.qq.com/course/437517
《asp.net core项目实战》 https://ke.qq.com/course/291868
《基于.net core微服务》 https://ke.qq.com/course/299524