OpenTelemetry#

Arrow C++ 的一部分使用 OpenTelemetry C++ SDK 进行检测,这使得生成详细的跟踪信息成为可能,这些信息可以在其他工具中进行分析。

创建启用 OpenTelemetry 跟踪的构建#

默认情况下,OpenTelemetry 跟踪未启用,因此您必须首先创建一个启用跟踪的 Arrow C++ 自定义构建。 有关创建自定义构建的通用说明,请参阅 构建 Arrow C++

要启用跟踪,请在生成构建时指定 ARROW_WITH_OPENTELEMETRY=ON。 您可能还希望指定 CMAKE_BUILD_TYPE=RelWithDebInfo,以便在保留调试信息的同时获得具有代表性的计时。

导出跟踪信息#

默认情况下,在指定跟踪后端之前,不会导出任何跟踪信息。 跟踪后端的选择由 ARROW_TRACING_BACKEND 环境变量控制。 可能的值是

  • ostream:将文本日志消息发送到 stdout

  • otlp_http:将 OTLP JSON 编码的跟踪发送到 HTTP 服务器(默认情况下,端点 URL 是“http://localhost:4318/v1/traces”)

  • arrow_otlp_stdout:将 JSON 跟踪发送到 stdout

  • arrow_otlp_stderr:将 JSON 跟踪发送到 stderr

例如,要启用将 JSON 跟踪导出到 stdout,请设置

export ARROW_TRACING_BACKEND=arrow_otlp_stdout

此时,运行您已链接到 Arrow C++ 自定义构建的程序应该会在 stdout 上生成 JSON 跟踪。

使用 Jaeger UI 可视化跟踪#

分析导出到 stdout/stderr 的跟踪信息可能涉及编写自定义处理脚本。 作为此过程的替代方案 - 甚至是补充 - “一体化”Jaeger Docker 镜像是一种相对简单的可视化跟踪数据的方式,适用于本地开发和测试。

注意:这假设您已安装 Docker

首先,将您的跟踪后端更改为 otlp_http

export ARROW_TRACING_BACKEND=otlp_http

然后启动 Jaeger 一体化容器

docker run \
  -e COLLECTOR_OTLP_ENABLED=true \
  -p 16686:16686 \
  -p 4317:4317 \
  -p 4318:4318 \
  jaegertracing/all-in-one:1.35

现在您应该能够运行您的程序,并在 http://localhost:16686 的 Web 浏览器中查看任何跟踪。 请注意,与其他导出跟踪的方法不同,不会输出到 stdout/stderr。 但是,如果您跟踪您的 Docker 容器日志,您应该会在一体化容器收到跟踪时看到输出。