微服务分布式对接口调用,你们是怎么追踪链路的?

2020-12-28 11:31:00 +08:00
 cking

示例服务器:
A-business-service: A 业务系统实现服务(业务实现方法)
A-base-service: A 基层系统实现服务(链接 Mysql)
B-business-service: B 业务系统实现服务(业务实现方法)
B-base-service: B 基层系统实现服务(链接 Mysql)
A 可以调用 A/B 的基础 但是 A 不能调用 B 业务层
.....
现在的是这样的 有一串代码
public void example(){
.....
aBusiness.aBase();
aBsuiness.bBase();
.....
}
然后在 A 调用 B 基础的时候报错了 看日志 是 B-base 报错的 然后但是我们不知道是 A-business 的调用还是 B-business 的调用...

现在的有一个想法就是用一个服务固定的 source 字段去标记 然后传递到基础服务的接口中...(管理觉得加入分布式链路追踪太麻烦了) 我的想法是用 ZipKin 之类的开源框架

V 友们也可以推荐一下好用的框架或者 Idea. Thx

5067 次点击
所在节点    Java
39 条回复
wolfie
2020-12-28 11:38:55 +08:00
demobin
2020-12-28 11:53:08 +08:00
request.getRemoteAddr()
cking
2020-12-28 11:58:43 +08:00
@demobin 用过了 但是我们的服务 有时候两三个服务在一个机子上面....
monkeyWie
2020-12-28 12:17:28 +08:00
skywalking esapm 可以看看
unixeno
2020-12-28 12:24:13 +08:00
第一个发起者生成一个 logid,后面的 rpc 一路传下去
limuyan44
2020-12-28 12:42:14 +08:00
我几年前搞这个当时只有个 dubbo,啥配套的都没上,最简单的就是链路加个 id 就完事了,java 来搞改改 rpc 框架和日志模板用不了几行代码,还不影响现有的代码,查日志看 id 就行了。
joesonw
2020-12-28 12:50:35 +08:00
java 全家桶的话就 skywalking 嘛. 不然就 opentracing 那一套, 存储可以用 jaeger.
cking
2020-12-28 12:51:10 +08:00
@monkeyWie
@unixeno
@joesonw
感谢大家回复 公司给时间慢慢看 嘿嘿 摸鱼+1
vindurriel
2020-12-28 13:33:43 +08:00
复议 5 楼 debug 的话透传 request id 就行 用不着实施链路追踪系统
kingwrcy
2020-12-28 13:39:44 +08:00
加个 traceNo,放入 http header 中,一路透传,每个服务都生成自己的,加上 parent 的
imycc
2020-12-28 13:46:56 +08:00
在 nginx 或者网关入口生成一个 traceid (如果有就不生成),改造一下业务的日志模块,打印这个 ID 。日志传到 es,剩下就自行发挥
InkAndBanner
2020-12-28 14:04:50 +08:00
zipkin
gmywq0392
2020-12-28 14:23:08 +08:00
谷歌有论文。
xuanbg
2020-12-28 14:26:30 +08:00
网关拦截验证鉴权的同时生成一个 requestId,放在请求头一路传到底。然后 kibana 就能根据这个 requestId 找出一串日志来。
clf
2020-12-28 14:28:48 +08:00
网关生成一个 ID,然后日志里全会附带这个 ID,调用链就都出来了。
qfdk
2020-12-28 14:50:11 +08:00
apm 吧 这个简单
qfdk
2020-12-28 14:53:22 +08:00
@imycc 都有 es 了 用他家 apm 就好了, 挂个 agent 起来 给每条数据都有个 transactionId 还有个 traceId. 这样需要某些特定 log 的 改下 file beat 穿出去就好了
csl1995
2020-12-28 14:54:46 +08:00
requestid
Yoock
2020-12-28 15:16:36 +08:00
jaeger?
cking
2020-12-28 15:40:56 +08:00
@xuanbg
@lychs1998
我们之前想法就是用这个请求头来获取 我们有一个全局拦截接口参数 刚刚好可以打印

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/739590

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX