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

OpenTelemetry自动埋点如何捕获完整URL路径与查询字符串?

在OpenTelemetry Servlet自动埋点中获取完整URL路径及查询字符串

可以实现,但你提到的旧配置项otel.instrumentation.http-url.include-full=true已被废弃,需使用最新的配置逻辑:

1. 启用查询字符串捕获

OpenTelemetry HTTP服务端 instrumentation 现在通过otel.instrumentation.http.server.include-query-string=true控制是否包含查询字符串。启用后,自动埋点会在Span属性中填充http.target,这个字段包含完整的请求路径+查询字符串(比如/api/users/123?name=test),而http.route仍会保留解析后的REST路由模板(比如/api/users/{id}),两者互不冲突。

2. 验证Span属性

检查生成的Trace Span,确认以下属性存在:

  • http.route:自动识别的REST路由模板
  • http.target:完整的请求路径及查询参数

3. 自定义补充(默认配置不足时)

如果默认自动埋点未覆盖你的场景,可通过Servlet过滤器手动为Span添加完整URL属性:

@WebFilter(urlPatterns = "/*")
public class FullUrlTraceFilter implements Filter {
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        HttpServletRequest httpReq = (HttpServletRequest) request;
        StringBuilder fullPath = new StringBuilder(httpReq.getRequestURI());
        String queryStr = httpReq.getQueryString();
        if (queryStr != null) {
            fullPath.append("?").append(queryStr);
        }

        Span currentSpan = Span.current();
        if (currentSpan != null && currentSpan.getSpanContext().isValid()) {
            currentSpan.setAttribute("full.request.url", fullPath.toString());
        }

        chain.doFilter(request, response);
    }
}

关于旧配置项的说明

otel.instrumentation.http-url.include-full=true是早期版本的配置,在OpenTelemetry 1.20+版本中已被移除,官方将其拆分为更细粒度的控制参数,服务端查询字符串的控制就是其中之一。

内容的提问来源于stack exchange,提问作者Jess Holle

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 05:21:00