You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 8+OpenTelemetry仅采集HomeController指标问题求助

解决ASP.NET Core MVC中带[Authorize]控制器的OpenTelemetry指标缺失问题

可能的原因

  • 未授权请求未到达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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 23:46:26