
52
|
第
5
章
务交互时发生的所有信息的记录。
为了记录事件,需要在请求触达服务时首先初始化
Map
数据。在请求的生命周期内,发
生的所有细节
—
包括特定的
ID
、变量、请求头、请求传递的参数、执行时间、远程服
务的任何调用、远程调用的执行时间甚至是上下文等所有对后期调试有价值的信息
—
都会被添加到
Map
数据中。等请求即将结束或者出错时,捕获
Map
数据就能得到所发
生情况的详尽记录。
Map
中记录的所有信息是有组织和有类型的键值对,所以很容易搜
索。换言之,这些数据应该是结构化的。这就是结构化事件。
调试服务问题需要将结构化事件相互对比以发现异常。当某些事件与其他相比表现异常
时,很容易辨别出这些异常值的共同之处。探索这些异常值,需要根据可能与你的调查
相关的事件中包含的不同维度和维度组合来进行过滤和分组。
作为结构化事件输入可观测性系统的数据需要捕获正确的抽象级别,以帮助观测者确定
应用程序的状态,无论其多么异常或新奇。对调查人员有用的信息,可能包含不特定于
任何给定请求的运行时信息(例如容器信息或版本信息),也包括服务接收的请求信息
(比如购物车
ID
、用户
ID
或者会话令牌),这两种类型的信息对于调试都非常有帮助。
与调试请求相关的数据种类会有所不同,但在使用传统调试器时,通过比较有用的数据
类型来考虑这一点是有帮助的。举例来说,调试人员想要了解请求执行时的一些变量的
值,或者想要了解某个函数调用的场景(时间)。在分布式服务中,这些函数调用产生时
可能有很多远程服务的调用发生。在这种场景下,请求执行时携带的变量的参数就可以 ...