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

.NET 4.6.2应用OpenTelemetry追踪http.route显示模板而非实际端点求助

解决.NET 4.6.2中OpenTelemetry http.route字段显示路由模板异常的问题

针对你遇到的.NET 4.6.2遗留Web API应用中,OpenTelemetry采集的http.route字段显示通用模板(如api/{controller}/{action})而非特性路由定义的模板(如api/products/{productCode}),且控制台导出正常但Kibana端异常的问题,可按以下步骤解决:

1. 确认依赖包正确性

确保安装的是适配.NET Framework Web API的专用Instrumentation包,而非通用AspNet包:

Install-Package OpenTelemetry.Instrumentation.AspNet.WebApi -Version [稳定版本号]
Install-Package OpenTelemetry.Exporter.OpenTelemetryProtocol -Version [稳定版本号]

(注:请替换[稳定版本号]为当前兼容.NET 4.6.2的最新稳定版本,如1.6.0)

2. 自定义路由提取逻辑

默认的路由提取逻辑无法正确识别Web API的特性路由,需编写自定义提取器覆盖默认行为:

using System.Web.Http;
using System.Web.Http.Routing;
using OpenTelemetry.Instrumentation.AspNet;

public class CustomWebApiRouteExtractor : HttpRouteExtractor
{
    public override string GetRoute(HttpRequestMessage request)
    {
        // 从当前请求的路由数据中提取特性路由模板
        var routeData = request.GetRouteData();
        if (routeData?.Route is IHttpRoute route && !string.IsNullOrWhiteSpace(route.RouteTemplate))
        {
            return route.RouteTemplate;
        }

        // 匹配失败时回退到默认提取逻辑
        return base.GetRoute(request);
    }
}

在OpenTelemetry初始化时注册该提取器:

using OpenTelemetry;
using OpenTelemetry.Trace;

var tracerProvider = Sdk.CreateTracerProviderBuilder()
    .AddAspNetWebApiInstrumentation(options =>
    {
        // 替换为自定义路由提取器
        options.RouteExtractor = new CustomWebApiRouteExtractor();
    })
    .AddOtlpExporter(options =>
    {
        // 配置OTel Collector地址,根据你的实际部署调整
        options.Endpoint = new Uri("http://your-otel-collector:4317");
    })
    .Build();

3. 检查路由注册顺序

确保Web API的特性路由注册在默认路由之前,避免默认路由优先匹配导致特性路由模板未被识别。在WebApiConfig.cs中确认代码顺序:

public static void Register(HttpConfiguration config)
{
    // 先注册特性路由
    config.MapHttpAttributeRoutes();

    // 再注册默认路由
    config.Routes.MapHttpRoute(
        name: "DefaultApi",
        routeTemplate: "api/{controller}/{action}/{id}",
        defaults: new { id = RouteParameter.Optional }
    );
}

4. 排查导出链路的字段篡改

由于控制台导出正常但Kibana异常,需检查OTel Collector或Kibana的配置,确保没有对http.route字段进行重写、过滤等操作,导致原始路由模板被替换为通用模板。

内容的提问来源于stack exchange,提问作者Davor Cacic

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 05:25:23