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
相关产品推荐
相关产品推荐

