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中