背景

偶然发现外部系统都会使用 requestId 来追踪请求的调用栈,但是我参与的项目中没有,排查问题时非常依赖于日志中的各种关键字,定位 bug 时只能一边看代码,一边使用各种关键字追踪这个请求的调用栈。

尤其是当这个服务有多个实例的时候,不可能登录到每个实例看请求打在哪个实例上,只能在日志平台一点点根据关键字排查,但这个日志平台出现过吞日志等问题(不知道是不是没上报成功还是啥),增加定位问题的难度

想知道大家排查问题时有什么最佳实践吗,基于 requestId 是不是一个好方法呢?

举报· 2257 次点击
登录 注册 站外分享
20 条回复  
nulIptr 小成 2025-1-23 15:58:56
搜索关键字 opentracing
Charlie17Li 楼主 初学 2025-1-23 16:05:08
@nulIptr 我理解 OpenTracing 是用来解决微服务中请求在多个服务间的调用链路,对吗?我现在面临的问题是:一个服务内的调用逻辑
main1234 小成 2025-1-23 16:17:11
在 http 做个 middleware ,middleware 会判断 1.如果 header 中有 X-Request-ID ,使用该 id 作为 requestID 2.如果 header 中没有,会生成 requestID 将 requestID 放到 ctx 中 然后 ctx 从上传到下,log 时候将 ctx 中的 requestID 取出来打印,请求时候将 id 放到 header 中
gaobh 小成 2025-1-23 16:17:47
EFK 把日志拿出来再看就顺多了
Desdemor 小成 2025-1-23 16:18:00
链路追踪 你搜搜,这不是最基本的吗,有的框架本身就自带
Sendya 初学 2025-1-23 16:20:07
@Charlie17Li #2 opentracing 用于服务内的调用链路一样很好用,可以记录到每一个函数调用,参数,等数据
kingcanfish 小成 2025-1-23 16:26:31
直接 debug.Stack() 打印调用栈到日志里不行吗
Ayanokouji 小成 2025-1-23 16:34:10
requestID 只能解决一部分问题,不能解决全部问题。 go 的 error 和 log 是个技术活,可以看看我之前的帖子,参考下思路 /t/1101542
Ayanokouji 小成 2025-1-23 16:35:32
@Ayanokouji 我现在采用的方案是 oops
123下一页
返回顶部