PCF上的128位Sleuth跟踪ID

时间:2018-11-27 03:20:05

标签: spring pivotal-cloud-foundry spring-cloud-sleuth

我试图将Sleuth生成的128位TraceId用作请求命中我的控制器的唯一标识符。我知道默认的traceId是64,并且要对其进行更改,我必须在application.properties中添加以下内容:

spring.sleuth.trace-id128=true

这在我的本地计算机上有效,但是当我将其部署到PCF时,跟踪ID为64位。我创建了一个示例项目,该项目仅具有一个简单的控制器来演示这一点。

@RestController
public class Controller {
    private Logger logger = LoggerFactory.getLogger(Controller.class);
    @Autowired
    private Tracer tracer;
    @GetMapping("/")
    public void test(){
        logger.info("LOGGED +["+tracer.currentSpan().context().traceIdString()+"]");
    }
}

它将在我的本地打印:

com.example.demo.Controller: LOGGED + [5bfcb33c9d564481479f2c212ec08143]

在PCF中,它打印:

om.example.demo.Controller : LOGGED + [97a1168857dc7088]

PCF是否会覆盖此配置?

更新

我的请求中包含“ X-B3-TraceId”和“ X-B3-SpanId”,traceId现在为128位,但与请求标头中传递的字符串不同。

Details from log

1 个答案:

答案 0 :(得分:0)

PCF(更具体地说是Gorouter)可能正在创建跟踪ID,并且正传播到您的应用中,而不是创建新的128位跟踪ID,而是重新使用现有的64位跟踪ID。

PCF支持Zipkin跟踪,并且默认情况下启用了该功能,因此在大多数环境中都处于启用状态。

https://docs.pivotal.io/pivotalcf/2-3/adminguide/zipkin_tracing.html

根据文档,Gorouter将检查传入请求中是否存在Zipkin标头,如果不存在,则会创建它们。

  

如果请求中不存在X-B3-TraceId和X-B3-SpanId HTTP标头,则Gorouter会为这些标头生成值,并将标头插入转发给应用程序的请求中。

  

如果请求中存在X-B3-TraceId和X-B3-SpanId HTTP标头,则Gorouter会将它们未经修改地转发。

https://docs.pivotal.io/pivotalcf/2-3/concepts/http-routing.html#zipkin-headers

您可以在此处看到它正在创建一个64位跟踪ID。

https://github.com/cloudfoundry/gorouter/blob/master/handlers/zipkin.go#L49-L57

您可以通过发送带有标头X-B3-TraceIdX-B3-SpanId的请求来确认。在这种情况下,Gorouter应该不加修改地转发它们。

例如:curl -v -H 'X-B3-TraceId: 5bfcb33c9d564481479f2c212ec08143' -H X-B3-SpanId: 5bfcb33c9d564481479f2c212ec08143' https://your-cool-app.com/test