我试图将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位,但与请求标头中传递的字符串不同。
答案 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-TraceId
和X-B3-SpanId
的请求来确认。在这种情况下,Gorouter应该不加修改地转发它们。
例如:curl -v -H 'X-B3-TraceId: 5bfcb33c9d564481479f2c212ec08143' -H X-B3-SpanId: 5bfcb33c9d564481479f2c212ec08143' https://your-cool-app.com/test
。