iohao / ioGame

无锁异步化、事件驱动架构设计的 java netty 网络编程框架; 轻量级,无需依赖任何第三方中间件或数据库就能支持集群、分布式; 适用于网络游戏服务器、物联网、内部系统及各种需要长连接的场景; 通过 ioGame 你可以很容易的搭建出一个集群无中心节点、集群自动化、分布式的网络服务器;FXGL、Unity、UE、Cocos Creator、Godot、Netty、Protobuf、webSocket、tcp、socket;java Netty 游戏服务器框架;

Home Page:http://game.iohao.com

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

新增 - 全链路调用日志跟踪 traceId

iohao opened this issue · comments

traceId 特性,用于日志分析 MDC,日志相关增强

非常需要!

简单介绍

ioGame 支持分布式,一个由客户端(玩家)发起的请求到游戏服务器后,可能会经过多个不同的游戏逻辑服产生最后的请求结果。

产生的问题

  • 每一次请求都有可能会形成一条复杂的分布式调用链路,那么排查问题的难度也随之上升。
  • 或者说当有大量的玩家在线操作时,其他线程的日志也会一起输出并穿行在其中,导致很难筛选出指定请求的全部相关日志。

为了解决上述问题,我们需要对请求链路进行追踪,配合 MDC 机制,在日志模板中加入 traceId 标识。在请求到达游戏服务器时,为每个请求分配一个唯一标识;在打印日志时,traceId 标识会出现在日志中,这样就能追踪到该请求的全部链路了。

日志打印预览

image

图中高亮的地方,表示同一个请求所打印的日志。以往,我们会通过 userId 来区分请求的唯一性,这种方式只适合中少量的请求中,在大量请求中并不适用。这是因为:

  1. 当有大量的玩家在线操作时,其他线程的日志也会一起输出并穿行在其中,导致很难筛选出指定请求的全部相关日志。
  2. 同一用户可能在短时间内请求多次,这样就很难区分该日志是属于哪个请求的。

而全链路调用日志跟踪正是解决该问题的,全链路调用日志跟踪可以为每个请求分配一个唯一标识,并记录在日志中。通过唯一标识可以快速的在日志中过滤出指定请求的信息。

ioGame 提供的全链路调用日志跟踪特性更是强大,支持跨机器、跨进程。简单的说,从玩家的请求进来到结束,无论该请求经过了多少个游戏逻辑服,都能精准记录。

下图展示的是在跨服调用下的截图

全链路调用日志跟踪在跨服调用下很实用

image