向 ClickHouse 传递 trace 上下文
--opentelemetry-traceparent 和 --opentelemetry-tracestate 标志,向 clickhouse-client 传入符合 Trace Context 建议的 trace 上下文请求头。
如果未提供父 trace 上下文,或者提供的 trace 上下文不符合上述 W3C 标准,ClickHouse 可以启动一个新的 trace,其概率由 opentelemetry_start_trace_probability 设置控制。
传播 trace 上下文
- 向远程 ClickHouse 服务器发起查询时,例如使用 Distributed 表引擎时。
- url 表函数。trace 上下文 信息会通过 HTTP 请求头 发送。
追踪 ClickHouse Keeper 请求
启用 Keeper 追踪
Keeper Span 类型
zookeeper.create— 创建新节点zookeeper.get— 获取节点数据zookeeper.set— 设置节点数据zookeeper.remove— 删除节点zookeeper.list— 列出子节点zookeeper.exists— 检查节点是否存在zookeeper.multi— 以原子方式执行多个操作zookeeper.client.requests_queue— 请求发送前在队列中等待的时间
keeper.receive_request— 接收并解析来自客户端的请求keeper.dispatcher.requests_queue— dispatcher 中的请求排队keeper.write.pre_commit— 在 Raft commit 之前预处理写入请求keeper.write.commit— 在 Raft commit 之后处理写入请求keeper.read.wait_for_write— 读取请求等待其依赖的写入完成keeper.read.process— 处理读取请求keeper.dispatcher.responses_queue— dispatcher 中的响应排队keeper.send_response— 向客户端发送响应
采样与性能
追踪 ClickHouse 自身
trace spans。
为了让这些追踪信息发挥作用,必须将其导出到支持 OpenTelemetry 的监控系统,例如 Jaeger 或 Prometheus。ClickHouse 不依赖任何特定的监控系统,而是仅通过系统表提供追踪数据。标准要求的 OpenTelemetry trace span 信息存储在 system.opentelemetry_span_log 表中。
必须在服务器配置中启用该表,参见默认配置文件 config.xml 中的 opentelemetry_span_log 元素。该表默认已启用。
标签或属性以两个并行数组的形式保存,分别包含键和值。使用 ARRAY JOIN 来处理它们。
日志查询设置
与监控系统集成
http://localhost:9411 的 Zipkin 实例: