官文:
https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000001573980
全链路追踪机制,能够追踪用户 SQL 请求在数据库全链路过程中,在不同组件、不同阶段执行的相关信息,并以可视化方式展现给用户。
问题1:
“在不同组件、不同阶段执行的相关信息”,这个相关信息的来源是什么?从哪里获得这些相关信息?是从observer.log、obproxy.log、或其他哪些日志文件里,来获得这些“相关信息”?
问题2:
这个相关信息具体指哪些信息?
靖顺
#3
问题一答案:
具体而言,OBProxy 的跟踪日志文件是 obproxy_trace.log
,而 OBServer 的命名为 trace.log
,当然这些日志会按照时间切分。
问题二答案:
这些信息其实是observer/obproxy/client内部埋点的,数据模型遵循OpenTracing 说的直白一点就是将每个事务或每个 SQL 在整条链路中的执行耗时、父子关系等相关信息通过埋点给打印出来了,日志内容是json样式的。对人的可读性不是那么好,所以我们也有了一些解析工具:比如ocp上的白屏全链路诊断以及obdiag的黑屏命令行的全链路:https://www.oceanbase.com/docs/common-obdiag-cn-1000000001768211
你像obdiag这个做法其实原理非常简单,就是搜集某一次SQL执行的这些链路日志然后再根据父子关系生成一颗全链路诊断树,这颗树就很好的展现的整个运行过程以及耗时。某一条链路的信息都通过flt_trace_id标识
┌────────┐ ┌─────────────────────────────┐ ┌────────────────────────────┐
│ 服务器1 │------>│ 搜索并过滤flt_trace_id相关日志 │------>│ 回传过滤后的日志到obdiag的节点 │---┐
└────────┘ └─────────────────────────────┘ └────────────────────────────┘ │
┌────────┐ ┌─────────────────────────────┐ ┌────────────────────────────┐ │ ┌────────────────────────────────┐
│ 服务器2 │------>│ 搜索并过滤flt_trace_id相关日志 │------>│ 回传过滤后的日志到obdiag的节点 │---┼--->│ 按照父子关系聚合各节点日志输出链路树 │
└────────┘ └─────────────────────────────┘ └────────────────────────────┘ │ └────────────────────────────────┘
┌────────┐ ┌─────────────────────────────┐ ┌────────────────────────────┐ │
│ 服务器N │------>│ 搜索并过滤flt_trace_id相关日志 │------>│ 回传过滤后的日志到obdiag的节点 │---┘
└────────┘ └─────────────────────────────┘ └────────────────────────────┘
1 个赞