各位架构师,服务调用链路上某个服务报错怎么排查?

198 天前
 abc9999
服务 A 调用服务 B ,服务 B 再调用服务 C...,整个链路上如果某个服务报错,怎么排查?
如何确定是哪个服务报错?
如果是 B 报错,如何查看 A 传递给 B 的参数?如果 B 有多个副本,怎么知道是哪个副本抛异常?
2196 次点击
所在节点    程序员
18 条回复
twofox
198 天前
你需要一个分布式链路追踪组件
Java 有 Skywalking 或者是 es 的 apm
abc9999
198 天前
@twofox 只用过 sleuth+zipkin ,但是它看不到是服务的哪个副本报错,Skywalking 可以做到吗?
twofox
198 天前
@abc9999 skywalking 我都没怎么用过,但我记得 elastic apm 是可以的
xuanbg
198 天前
你没有日志的么?哪个服务的哪个类里的哪个方法抛异常在日志里都能看得到啊。如果只需要定位异常,这就够了。但有时候异常是上游数据引发的,那就需要链路追踪,通过一个 requestId 把一串调用日志串起来看。这个可以使用第三方的成熟产品,也可以自己一路传 requestId ,打日志的时候一起打出来就行。
xwayway
198 天前
@abc9999 统一日志看不到 host 的么?
overthemoon
198 天前
elk
jtwor
198 天前
skywalking 能做到,就是个链路追踪。不理解为什么要确认是哪个副本,既然都报错了,在那个副本执行都应该报错把。
crazywind
198 天前
zipkin 是可以看到调用链路的吧
abc9999
198 天前
@xuanbg 公司没用过,就是一些想法而已,你的意思大概明白了,需要依靠链路日志,我自己搭个环境再看看,感谢
abc9999
198 天前
@xwayway 刚看了下,可以看到 ip ,以前没注意到这点,感谢
abc9999
198 天前
@crazywind 可以看到链路上的每台机器 ip ,之前没注意,感谢
datoujiejie221
198 天前
如果看日志的话,按 opentrace 那套标准打印 log ,elk 做采集分析就可以,我们现在采集的时候是把 k8s 的 podname 加上的
skywalking 可以定位到示例,但是我们用主要是用到指标的监控,快速定位哪个服务拖慢了速度
abc9999
198 天前
@jtwor 是的,一般是因为上游数据有问题,跟哪个副本没关系
8355
198 天前
微服务->全链路 -> 网关->防雪崩
dif
198 天前
可以装个 pinpoint ,或者其他什么 apm 的东西
coderxy
198 天前
链路追踪 一看就知道哪里报的错
tanxnative
198 天前
opentelemetry
snb9
198 天前
sleuth + elk ( filebeat 收集)可以准确跟踪到机器,skywalking 辅助使用。单 skywalking 长链路查找有点麻烦

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

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

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

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

© 2021 V2EX