跳到主要内容

链路追踪

链路追踪(tracing)记录了一次请求在系统中的执行的生命周期,包括请求及其子过程调用链路、执行时间及统计信息,可用于慢查询定位、性能瓶颈分析等。

注意

该功能只维护于 Doris 1.2 版本,自 Doris 2.0 版本起已不再支持。

原理

Doris 负责收集 traces,并导出到第三方链路分析系统,由链路分析系统负责 traces 的展示和存储。

快速搭建

Doris 目前支持直接将 traces 导出到 zipkin 中。

部署 zipkin

curl -sSL https://zipkin.io/quickstart.sh | bash -s
java -jar zipkin.jar

配置及启动 Doris

添加配置到 fe.conf

# 开启链路追踪
enable_tracing = true

# 配置traces导出到zipkin
trace_export_url = http://127.0.0.1:9411/api/v2/spans

添加配置到 be.conf

# 开启链路追踪。
enable_tracing = true

# 配置traces导出到zipkin。
trace_export_url = http://127.0.0.1:9411/api/v2/spans

# 可选。缓存span的队列大小。span数量达到队列容量一半时将触发一次span导出,队列满后到达队列的span将被丢弃。
max_span_queue_size=2048

# 可选。单次导出span的最大数量。
max_span_export_batch_size=512

# 可选。导出span的最大间隔时间。
export_span_schedule_delay_millis=500

启动 fe 和 be

sh fe/bin/start_fe.sh --daemon
sh be/bin/start_be.sh --daemon

执行查询

...

查看 zipkin UI

浏览器打开http://127.0.0.1:9411/zipkin/ 可查看查询链路。

使用 opentelemetry collector

使用 opentelemetry collector 可将 traces 导出到其他系统例如 zipkin、jaeger、skywalking,或者数据库系统和文件中。详情参考 collector exporter

同时 opentelemetry collector 提供了丰富的算子用来处理 traces。例如过滤 spans尾采样。详情参考collector processor

traces 导出的路径:doris -> collector -> zipkin 等。

部署 opentelemetry collector

opentelemetry 发布了 collector corecontrib, contrib 提供了更丰富的功能,这里以 contrib 版举例。

下载 collector

下载 otelcol-contrib,可在官网下载更多平台预编译版

wget https://github.com/open-telemetry/opentelemetry-collector-releases/releases/download/v0.55.0/otelcol-contrib_0.55.0_linux_amd64.tar.gz

tar -zxvf otelcol-contrib_0.55.0_linux_amd64.tar.gz

生成配置文件

collector 配置文件分为 5 部分:receiversprocessorsexportersextensionsservice。其中 receivers、processors、exporters 分别定义了接收、处理、导出数据的方式;extensions 是可选的,用于扩展主要用于不涉及处理遥测数据的任务;service 指定在 collector 中使用哪些组件。可参考 collector configuration

下面配置文件使用 otlp(OpenTelemetry Protocol) 协议接收 traces 数据,进行批处理并过滤掉时间超过 50ms 的 traces, 最终导出到 zipkin 和文件中。

cat > otel-collector-config.yaml << EOF
receivers:
otlp:
protocols:
http:

exporters:
zipkin:
endpoint: "http://10.81.85.90:8791/api/v2/spans"
file:
path: ./filename.json

processors:
batch:
tail_sampling:
policies:
{
name: duration_policy,
type: latency,
latency: {threshold_ms: 50}
}

extensions:

service:
pipelines:
traces:
receivers: [otlp]
processors: [batch, tail_sampling]
exporters: [zipkin, file]
EOF

启动 collector

nohup ./otelcol-contrib --config=otel-collector-config.yaml &

配置及启动 Doris

添加配置到 fe.conf

# 开启链路追踪
enable_tracing = true

# 启用opentelemetry collector。
trace_exporter = collector

# 配置traces导出到collector,4318为collector otlp http默认端口。
trace_export_url = http://127.0.0.1:4318/v1/traces

添加配置到 be.conf

# 开启链路追踪。
enable_tracing = true

# 启用opentelemetry collector。
trace_exporter = collector

# 配置traces导出到collector,4318为collector otlp http默认端口。
trace_export_url = http://127.0.0.1:4318/v1/traces

# 可选。缓存span的队列大小。span数量达到队列容量一半时将触发一次span导出,队列满后到达队列的span将被丢弃。
max_span_queue_size=2048

# 可选。单次导出span的最大数量。
max_span_export_batch_size=512

# 可选。导出span的最大间隔时间。
export_span_schedule_delay_millis=500

启动 fe 和 be

sh fe/bin/start_fe.sh --daemon
sh be/bin/start_be.sh --daemon

执行查询

...

查看 traces

...