链路追踪

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

原理

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

快速搭建

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

部署 zipkin

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

配置及启动Doris

添加配置到fe.conf

  1. # 开启链路追踪
  2. enable_tracing = true
  3. # 配置traces导出到zipkin
  4. trace_export_url = http://127.0.0.1:9411/api/v2/spans

添加配置到be.conf

  1. # 开启链路追踪。
  2. enable_tracing = true
  3. # 配置traces导出到zipkin。
  4. trace_export_url = http://127.0.0.1:9411/api/v2/spans
  5. # 可选。缓存span的队列大小。span数量达到队列容量一半时将触发一次span导出,队列满后到达队列的span将被丢弃。
  6. max_span_queue_size=2048
  7. # 可选。单次导出span的最大数量。
  8. max_span_export_batch_size=512
  9. # 可选。导出span的最大间隔时间。
  10. export_span_schedule_delay_millis=500

启动fe和be

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

执行查询

  1. ...

查看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, 可在官网下载更多平台预编译版

  1. wget https://github.com/open-telemetry/opentelemetry-collector-releases/releases/download/v0.55.0/otelcol-contrib_0.55.0_linux_amd64.tar.gz
  2. 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和文件中。

  1. cat > otel-collector-config.yaml << EOF
  2. receivers:
  3. otlp:
  4. protocols:
  5. http:
  6. exporters:
  7. zipkin:
  8. endpoint: "http://10.81.85.90:8791/api/v2/spans"
  9. file:
  10. path: ./filename.json
  11. processors:
  12. batch:
  13. tail_sampling:
  14. policies:
  15. {
  16. name: duration_policy,
  17. type: latency,
  18. latency: {threshold_ms: 50}
  19. }
  20. extensions:
  21. service:
  22. pipelines:
  23. traces:
  24. receivers: [otlp]
  25. processors: [batch, tail_sampling]
  26. exporters: [zipkin, file]
  27. EOF

启动 collector

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

配置及启动Doris

添加配置到fe.conf

  1. # 开启链路追踪
  2. enable_tracing = true
  3. # 启用opentelemetry collector。
  4. trace_exporter = collector
  5. # 配置traces导出到collector,4318为collector otlp http默认端口。
  6. trace_export_url = http://127.0.0.1:4318/v1/traces

添加配置到be.conf

  1. # 开启链路追踪。
  2. enable_tracing = true
  3. # 启用opentelemetry collector。
  4. trace_exporter = collector
  5. # 配置traces导出到collector,4318为collector otlp http默认端口。
  6. trace_export_url = http://127.0.0.1:4318/v1/traces
  7. # 可选。缓存span的队列大小。span数量达到队列容量一半时将触发一次span导出,队列满后到达队列的span将被丢弃。
  8. max_span_queue_size=2048
  9. # 可选。单次导出span的最大数量。
  10. max_span_export_batch_size=512
  11. # 可选。导出span的最大间隔时间。
  12. export_span_schedule_delay_millis=500

启动fe和be

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

执行查询

  1. ...

查看traces

  1. ...