correlationId 传播到 spring 侦探 1.x
correlationId propagated to spring sleuth 1.x
我有以下设置:
代理 (P) -- HTTP --> Spring 启动 2 应用程序 (X) -- HTTP --> Spring 启动 1 应用程序 (Y)
代理将 requestId
作为 HTTP header 发送,我需要将其包含在 X 和 Y 的日志中。
对于 X 应用程序,我可以使用
在 Spring Cloud Sleuth 2 的支持下轻松完成
spring:
sleuth:
propagation-keys: requestId
并根据 Slf4jCurrentTraceContext
的灵感创建 CurrentTraceContext
实现,我在其中添加
MDC.put("requestId", ExtraFieldPropagation.get(currentSpan, "requestId"));
然后我可以使用以下日志模式轻松地将其添加到日志中:
%d{yy-MM-dd E HH:mm:ss.SSS} %5p [component=${springAppName},requestId=%X{requestId:-}] %m%n"
但现在我还需要将 requestId
传播到 Y 应用程序。
不幸的是,我无法利用 Spring Cloud Sleuth 2.0 中引入的好东西(例如 brave 库中的 TraceContext),因为那是一个 Spring Boot 1.x 应用程序。
想知道有哪些选择?
我正在考虑扩展 Slf4jSpanLogger
并注入 DefaultTracer
但不确定如何获得 requestId
SpanLogger 中没有 TraceContext。
requestId
必须在 headers 中。您必须修改当前为 Boot 1.x 解析 HTTP headers 的逻辑,并从 headers 中检索该值并将其放入 span.
然而,最简单的方法是传播该值作为行李,因为行李开箱即用,适用于 Boot 1.x。这样,如果我们看到 baggage-
前缀为 headers,Sleuth 1.3.x 将自动传播它。记得在 Boot 2.0 把 baggage 加入白名单
我有以下设置:
代理 (P) -- HTTP --> Spring 启动 2 应用程序 (X) -- HTTP --> Spring 启动 1 应用程序 (Y)
代理将 requestId
作为 HTTP header 发送,我需要将其包含在 X 和 Y 的日志中。
对于 X 应用程序,我可以使用
在 Spring Cloud Sleuth 2 的支持下轻松完成
spring:
sleuth:
propagation-keys: requestId
并根据 Slf4jCurrentTraceContext
的灵感创建 CurrentTraceContext
实现,我在其中添加
MDC.put("requestId", ExtraFieldPropagation.get(currentSpan, "requestId"));
然后我可以使用以下日志模式轻松地将其添加到日志中:
%d{yy-MM-dd E HH:mm:ss.SSS} %5p [component=${springAppName},requestId=%X{requestId:-}] %m%n"
但现在我还需要将 requestId
传播到 Y 应用程序。
不幸的是,我无法利用 Spring Cloud Sleuth 2.0 中引入的好东西(例如 brave 库中的 TraceContext),因为那是一个 Spring Boot 1.x 应用程序。
想知道有哪些选择?
我正在考虑扩展 Slf4jSpanLogger
并注入 DefaultTracer
但不确定如何获得 requestId
SpanLogger 中没有 TraceContext。
requestId
必须在 headers 中。您必须修改当前为 Boot 1.x 解析 HTTP headers 的逻辑,并从 headers 中检索该值并将其放入 span.
然而,最简单的方法是传播该值作为行李,因为行李开箱即用,适用于 Boot 1.x。这样,如果我们看到 baggage-
前缀为 headers,Sleuth 1.3.x 将自动传播它。记得在 Boot 2.0 把 baggage 加入白名单