新增 - 全链路调用日志跟踪 traceId
iohao opened this issue · comments
traceId 特性,用于日志分析 MDC,日志相关增强
非常需要!
简单介绍
ioGame 支持分布式,一个由客户端(玩家)发起的请求到游戏服务器后,可能会经过多个不同的游戏逻辑服产生最后的请求结果。
产生的问题
- 每一次请求都有可能会形成一条复杂的分布式调用链路,那么排查问题的难度也随之上升。
- 或者说当有大量的玩家在线操作时,其他线程的日志也会一起输出并穿行在其中,导致很难筛选出指定请求的全部相关日志。
为了解决上述问题,我们需要对请求链路进行追踪,配合 MDC 机制,在日志模板中加入 traceId 标识。在请求到达游戏服务器时,为每个请求分配一个唯一标识;在打印日志时,traceId 标识会出现在日志中,这样就能追踪到该请求的全部链路了。
日志打印预览
图中高亮的地方,表示同一个请求所打印的日志。以往,我们会通过 userId 来区分请求的唯一性,这种方式只适合中少量的请求中,在大量请求中并不适用。这是因为:
- 当有大量的玩家在线操作时,其他线程的日志也会一起输出并穿行在其中,导致很难筛选出指定请求的全部相关日志。
- 同一用户可能在短时间内请求多次,这样就很难区分该日志是属于哪个请求的。
而全链路调用日志跟踪正是解决该问题的,全链路调用日志跟踪可以为每个请求分配一个唯一标识,并记录在日志中。通过唯一标识可以快速的在日志中过滤出指定请求的信息。
ioGame 提供的全链路调用日志跟踪特性更是强大,支持跨机器、跨进程。简单的说,从玩家的请求进来到结束,无论该请求经过了多少个游戏逻辑服,都能精准记录。
下图展示的是在跨服调用下的截图
全链路调用日志跟踪在跨服调用下很实用