How to trace GreptimeDB
GreptimeDB 使用 Rust 的 tracing 框架进行代码埋点,tracing 的具体原理和使用方法参见 tracing 的官方文档。
通过将 trace_id
等信息在整个分布式数据链路上透传,使得我们能够记录整个分布式链路的函数调用链,知道每个被追踪函数的调用时间等相关信息,从而对整个系统进行诊断。
在 RPC 中定义 tracing 上下文
因为 tracing 框架并没有原生支持分布式追踪,我们需要手动将 trace_id
等信息在 RPC 消息中传递,从而正确的识别函数的调用关系。我们使用基于 w3c 的标准 将相关信息编码为 tracing_context
,将消息附在 RPC 的 header 中。主要定义在:
frontend
与datanode
交互:tracing_context
定义在RegionRequestHeader
中frontend
与metasrv
交互:tracing_context
定义在RequestHeader
中- Client 与
frontend
交互:tracing_context
定义在RequestHeader
中