获取PtxId

pinpoint通过agent的方式运行

如果通过MDC.get("PtxId")获取pinpint中的事物id,需要在pinpoint.config中开启日志

profiler.log4j.logging.transactioninfo=true
profiler.logback.logging.transactioninfo=true

值得注意的是当我们通过MDC.get("PtxId")获取id前,需要先通过log.info或log.error打印下日志(使用info/warn/error取决于日志level),原因为pinpoint.config中开启的是logback和log4j,如果没有通过log.info打印日志,并不会将PtxId保存到MDC中,从而通过MDC.get("PtxId")无法获取到PtxId,而测试的过程中发现有时可以,原因是MDC实际是通过ThreadLocal存储的,而tomcat使用的是线程池,所以能够获取到上次使用该线程打印日志时的PtxId。解决方案如果业务中需要获取PtxId,则在获取前通过log.info打印个日志

PtxId传递

参考
Pinpoint是不支持Feign的,如果想支持Feign,需要自己开发,在请求前添加Header,内容如下

Pinpoint-TraceID: 10.5.167.79^1596528848021^37716756
Pinpoint-SpanID: 2316879510550716687
Pinpoint-pSpanID: -6308574490279068654
Pinpoint-Flags: 0
Pinpoint-pAppName: test_account_manager
Pinpoint-pAppType: 1210
Pinpoint-Host: kanche-bridge:8080