deepflowio / deepflow

eBPF Observability - Distributed Tracing and Profiling
https://deepflow.io
Apache License 2.0
2.97k stars 333 forks source link

[QA] 通过HTTP的Query参数中定义的字段可以串联调用链路吗 #8015

Open gbling opened 2 months ago

gbling commented 2 months ago

Search before asking

Description

文档上介绍是可以自定义header字段作为串联调用链路的字段,能否通过query参数中指定的字段来串联请求的链路?

Use case

Related issues

Are you willing to submit a PR?

Code of Conduct

sharang commented 2 months ago

目前不支持,如果有此方面的需求,可以说明使用场景和示例,我们看看能否支持。

gbling commented 2 months ago

目前我们基础架构上已经有实现一套链路追踪的机制,从客户端发起调用的时候就会在请求的Query参数里带上tracerId字段,接到请求的系统都会保存这个值继续传递; 这种方式会比较容易拿到tracerId在日志里查询到从客户端到服务端的整条链路

sharang commented 2 months ago

@gbling 能否举个例子,确保后面我们的实现不会有偏差。

比如 A->B->C 的场景下,将 A->B 和 B->C 的 URL 举例一下

gbling commented 2 months ago

@gbling 能否举个例子,确保后面我们的实现不会有偏差。

比如 A->B->C 的场景下,将 A->B 和 B->C 的 URL 举例一下


调用链路上关联的系统 client -> bbs -> mall -> trade

客户端发起调用,如下 http://bbs.test.com/v1/forum?tracerId=12345

bbs调用到下一个系统mall:bbs系统从query中获取到tracerId字段的内容,在请求mall系统时候带上,如下 http://mall.test.com/v1/shop?tracerId=12345

mall调用到下一个系统trade:mall系统从query中获取到tracerId字段的内容,在请求trade系统时候带上,如下 http://trade.test.com/v1/order?tracerId=12345

这样在日志搜索的时候就可以通过tracerId字段内容搜到整条链路的请求

Fancyki1 commented 1 month ago

你可以尝试将traceId放到header中使用x-request-id 中透传相同的id,然后deepflow中的x-request-id-0就会带上,trace的时候就会有上下文的关联,尽管看了很多资料,不确定是否是一个稳定可靠的方案,但是经过测试链路是关联起来了。

gbling commented 3 weeks ago

@Fancyki1 请问一下,当时测试的时候是在链路开始的时候修改x-request-id即可,还是整条调用链路的每个系统都需要做这个动作? A(x-request-id修改) --> B --> C 还是 A(x-request-id修改) --> B(x-request-id修改) --> C(x-request-id修改)

gbling commented 3 weeks ago

@sharang

目前不支持,如果有此方面的需求,可以说明使用场景和示例,我们看看能否支持。

请问一下这块后续有支持计划吗

gbling commented 3 weeks ago

@sharang 另外看咱们是有支持wasm plugin的,不晓得用wasm能不能做到将请求query中的 tracerId 字段获取到再放到header中的操作

Fancyki1 commented 3 weeks ago

@gbling A(x-request-id=123456) --> B(x-request-id:123456) --> C(x-request-id:123456),可以看下deepflow论文的部分,你用x-request-id就行,要不然用wasm实现协议解析适配也行(不推荐麻烦),如果你只实现链路追踪x-request-id简单做就行了

gbling commented 3 weeks ago

@Fancyki1 多谢