Comments (18)
如何将生成的追踪信息不打印到日志中
配置 com.alipay.sofa.tracer.disableDigestLog=true
将不会打印日志到文件中。配置文档
而在代码中获取?我需要做持久化
通过上下文中获取 Span 如 SofaTracerSpan sofaTracerSpan = sofaTraceContext.getCurrentSpan();
获取的 Span 就是链路调用信息的抽象。参考工具类
from sofa-tracer.
thanks ,but I have yet a question!
请问这个是服务追踪的一些信息,但是没有状态码什么的
[{
"fields":{
"event":"sr"
},
"time":1531714665907
}]
{"span.kind":"server","current.thread.name":"http-nio-8080-exec-1","request.url":"http://127.0.0.1:8080/getUserById","method":"GET"}
{}
{"req.size.bytes":-1}
{
"bizBaggage":{},
"bizSerializedBaggage":"",
"childContextIndex":0,
"parentId":"",
"sampled":false,
"spanId":"0",
"sysBaggage":{},
"sysSerializedBaggage":"",
"traceId":"ac1e0016153171466590410011834"
}
其他的如果我需要,是不是根据OpenTracing规范去取呢?
from sofa-tracer.
@ZjcNB 我理解你说的状态码,应该是具体组件的一个状态信息,你可直接使用 Span 设置 tags ,然后再需要的时候,取出这个 tag 即可。
from sofa-tracer.
不单单是状态码,我给你看一下日志输出的吧,都有这些信息:
{"time":"2018-07-16 11:46:13.260","local.app":"null","traceId":"ac1e0016153171276940610011786","spanId":"0","request.url":"http://127.0.0.1:8080/getUserById","method":"GET","result.code":"200","req.size.bytes":-1,"resp.size.bytes":84,"time.cost.milliseconds":3853,"current.thread.name":"http-nio-8080-exec-1","baggage":""}
而我代码里面获得的呢,是这些信息:
{
"bizBaggage":{},
"bizSerializedBaggage":"",
"childContextIndex":0,
"parentId":"",
"sampled":false,
"spanId":"0",
"sysBaggage":{},
"sysSerializedBaggage":"",
"traceId":"ac1e0016153171789576510011911"
}
from sofa-tracer.
@ZjcNB 你的这个示例是用 Spring MVC 的,可以在 请求的时候,使用 SofaTracerSpan sofaTracerSpan = sofaTraceContext.getCurrentSpan();
获取 Span,然后通过 com.alipay.common.tracer.core.span.SofaTracerSpan#getTagsWithStr("${tagKey}")
,但是 result.code 是获取不到的,因为 result.code 是在你的 Controller 被调用完成后才设置的这个值,而你获取的时候,应该是调用中,具体可以调试看下这里代码
from sofa-tracer.
我可以写一个拦截器,A服务调用B服务,A服务方法请求执行完之后再走
public void postHandle(HttpServletRequest request,
HttpServletResponse response,
Object handler,
ModelAndView modelAndView) throws Exception {
//获取请求的上下文
SofaTraceContext sofaTraceContext = SofaTraceContextHolder.getSofaTraceContext();
//从ThreadLocal中获取调用服务的信息
SofaTracerSpan sofaTracerSpan = sofaTraceContext.getCurrentSpan();
Map<String,String> map = sofaTracerSpan.getTagsWithStr();
String result = map.get("${tagKey}");
}
还有想要确定一下的是,这个获取traceId这些信息,是请求之前获取好,还是请求结束之后获取好呢
from sofa-tracer.
我的项目是springboot,服务A 我写了一个拦截器,在每次请求过后来执行这个方法:
@OverRide
public void postHandle(HttpServletRequest request,
HttpServletResponse response,
Object handler,
ModelAndView modelAndView) throws Exception {
//获取请求的上下文
SofaTraceContext sofaTraceContext = SofaTraceContextHolder.getSofaTraceContext();
//从ThreadLocal中获取调用服务的信息
SofaTracerSpan sofaTracerSpan = sofaTraceContext.getCurrentSpan();
SofaTracer sofaTracer = sofaTracerSpan.getSofaTracer();
System.out.println("hahaahhahahahahahahah" + JSON.toJSONString(sofaTracer,true));
SofaTracerSpanContext sofaTracerSpanContext = sofaTracerSpan.getSofaTracerSpanContext();
System.out.println("哦哦哦哦哦哦哦" + JSON.toJSONString(sofaTracerSpanContext,true));
}
服务B 也是一个拦截器,每次请求之后执行这个方法
@OverRide
public void postHandle(HttpServletRequest request,
HttpServletResponse response,
Object handler,
ModelAndView modelAndView) throws Exception {
//获取请求的上下文
SofaTraceContext sofaTraceContext = SofaTraceContextHolder.getSofaTraceContext();
//从ThreadLocal中获取调用服务的信息
SofaTracerSpan sofaTracerSpan = sofaTraceContext.getCurrentSpan();
SofaTracer sofaTracer = sofaTracerSpan.getSofaTracer();
System.out.println("hahaahhahahahahahahah" + JSON.toJSONString(sofaTracer,true));
SofaTracerSpanContext sofaTracerSpanContext = sofaTracerSpan.getSofaTracerSpanContext();
System.out.println("哈哈哈哈哈" + JSON.toJSONString(sofaTracerSpanContext,true));
}
然后我的依赖是:
//sofa-tracer 链路追踪
compile group: 'com.alipay.sofa', name: 'sofaboot-dependencies', version: '2.4.2', ext: 'pom'
compile group: 'com.alipay.sofa', name: 'tracer-sofa-boot-starter', version: '2.1.1'
//end
application.properties:
com.alipay.sofa.tracer.disableDigestLog=true
from sofa-tracer.
还有想要确定一下的是,这个获取traceId这些信息,是请求之前获取好,还是请求结束之后获取好呢
这里就涉及到 traceId 的生成地方,traceId 是在每一个请求的 Filter 中产生的。不存在之前/后 好坏的问题哈。只要在请求的 SpringMvcSofaTracerFilter 生成了 traceId 后你都可以获取到。
@ZjcNB
from sofa-tracer.
嗯嗯,好
from sofa-tracer.
@ZjcNB 第二个问题,你想咨询的是为什么 traceId 不同的问题,是吧?
因为你的这两个服务分别是服务 A 和服务 B,而这两个分别响应 MVC 的请求,而请求的上下文中没有能够还原出 SpanContext 的数据,所以这两个请求就会认为这次请求是链路的开始,就会重新生成一个 traceId 同时 spanId 均是 0 ,关于 traceId 和 spanId 可以参考文档。而如果请求上下文中携带了 SpanContext 的信息即可以还原出 Span,并构造 ChildSpan,这个功能目前正在 Review 中,可以参考这里多提意见。
from sofa-tracer.
嗯,知道了。其实目前开源的现有功能,是不支持服务A和服务B之间传递traceid的吧
from sofa-tracer.
@ZjcNB RPC 组件是支持的。另,如上文,相应的组件我们逐步
Roadmap 支持上,如到时候 HttpClient 和 SpringMVC 也是可以的,其他也是类似。
from sofa-tracer.
@ZjcNB 服务 A 调用服务 B 你们用的是什么?
from sofa-tracer.
@khotyn 用的springclould
from sofa-tracer.
from sofa-tracer.
@ZjcNB 具体用的 SpringCloud 里面的哪个组件,HttpClient?RestTemplate 还是啥?能够贴一下关键的代码信息么?
from sofa-tracer.
用的@RestController。mvc模式吧
from sofa-tracer.
@ZjcNB RestController 是提供服务吧?调用是怎么调用的?
from sofa-tracer.
Related Issues (20)
- OpenFeign 10.7.3+版本兼容问题 HOT 1
- 不使用sofa boot,使用spring boot parent,依赖tracer-sofa-boot-starter时启动报错 HOT 6
- does support dubbo async invoke??? HOT 1
- Redis plugin未恢复paren span,导致span id的层级无限增长
- Open Source Promotion Plan 2022 - upgrade opentracing api version & adapter opentelemetry api HOT 5
- SofaTracer如何支持Agent接入方式 HOT 2
- spring cloud 3中的openfeign支持 HOT 2
- spring cloud gateway webflux集成问题 HOT 1
- 基于SOFAArk实现类加载器加载外置的SofaTracer的Spring Boot Starter插件 HOT 4
- datasource 模块如何记录完整的 sql 语句,包含参数的那种
- sofatracer的tracerId不一定为30位 HOT 1
- sofa-tracer-httpclient-plugin使用httpclient连接池,请求发生异常时,内存泄漏,spanId无限变长 HOT 19
- sofa-tracer-kafkamq-plugin支持ProducerListener解决方案 HOT 1
- CI failed in the master branch
- classNotFound SofaTracerLoadBalancedFeignClient HOT 1
- 是否支持 SOFA-TraceId 由前端生成放到header中请求
- sofa-tracer redis plugin未串联父span
- dubbo 2.7 使用问题 HOT 1
- feat: Delegate java.util.concurrent.Executor
- springboot v3 版本 启动报错 HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from sofa-tracer.