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 为“https://127.0.0.1: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
现在,您应该能够运行您的程序并在 Web 浏览器中查看 https://127.0.0.1:16686 上的任何跟踪信息。请注意,与其他导出跟踪方法不同,不会将任何输出输出到 stdout/stderr。但是,如果您尾随 Docker 容器日志,您应该在容器接收跟踪信息时看到输出。