.NET 8+OpenTelemetry仅采集HomeController指标问题求助
可能的原因
- 未授权请求未到达Action:访问带
[Authorize]的SettingsController时,若未通过授权,请求会被ASP.NET Core授权中间件拦截(返回401或重定向到登录页),此时请求并未进入控制器Action方法,OpenTelemetry默认不会生成带有controller=Settings标签的指标。 - Instrumentation配置未捕获路由信息:默认配置下,AspNetCoreInstrumentation可能未显式提取路由中的控制器和Action信息,导致即使请求到达Action,指标标签也不完整。
- 缺少必要的Meter注册:未添加AspNetCore请求指标对应的Meter,导致相关指标未被收集。
解决方案
1. 确保测试使用授权用户访问
先用已授权的用户访问/Settings/Index,确认请求成功返回200状态码,排除因授权失败导致的指标缺失。
2. 调整AspNetCoreInstrumentation配置
修改OpenTelemetry配置,显式捕获路由信息并记录所有请求:
var builder = WebApplication.CreateBuilder(args); builder.Services.AddOpenTelemetry() .WithMetrics(builder => { builder.AddPrometheusExporter(); builder.AddAspNetCoreInstrumentation(options => { // 记录所有请求(包括授权失败的请求) options.Filter = _ => true; // 显式提取路由中的控制器和Action信息并添加到指标标签 options.EnrichWithHttpRequest = (activity, httpRequest) => { if (httpRequest.RouteValues.TryGetValue("controller", out var controller)) { activity.SetTag("aspnetcore.controller", controller.ToString()); } if (httpRequest.RouteValues.TryGetValue("action", out var action)) { activity.SetTag("aspnetcore.action", action.ToString()); } }; // 记录请求中的异常信息 options.RecordException = true; }); builder.AddPrometheusHttpListener(); // 添加AspNetCore请求指标对应的Meter builder.AddMeter("Microsoft.AspNetCore.Hosting", "Microsoft.AspNetCore.Server.Kestrel", "Microsoft.AspNetCore.Http"); 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 } }); });
3. 验证指标输出
启动应用后,用授权用户访问/Settings/Index,再访问Prometheus导出端点(默认是/metrics),检查是否存在带有controller="Settings"标签的http_server_request_duration指标。
内容的提问来源于stack exchange,提问作者Nikita
相关产品推荐
相关产品推荐

