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:向 HTTP 服务器发送 OTLP JSON 编码的跟踪(默认情况下,端点 URL 为“https://:4318/v1/traces”)
arrow_otlp_stdout:向标准输出(stdout)发送 JSON 跟踪
arrow_otlp_stderr:向标准错误(stderr)发送 JSON 跟踪
例如,要启用向标准输出(stdout)导出 JSON 跟踪,请设置
export ARROW_TRACING_BACKEND=arrow_otlp_stdout
此时,运行您已链接到自定义 Arrow C++ 构建的程序应该会在标准输出(stdout)上生成 JSON 跟踪。
使用 Jaeger UI 可视化跟踪#
分析导出到标准输出/标准错误(stdout/stderr)的跟踪信息可能需要编写自定义处理脚本。作为此过程的替代方案——甚至是一种补充——“all-in-one”的 Jaeger Docker 镜像是一种相对直接的可视化跟踪数据的方式,适用于本地开发和测试。
注意:这假设您已安装 Docker。
首先,将您的跟踪后端更改为 otlp_http
export ARROW_TRACING_BACKEND=otlp_http
然后启动 Jaeger all-in-one 容器
docker run \
-e COLLECTOR_OTLP_ENABLED=true \
-p 16686:16686 \
-p 4317:4317 \
-p 4318:4318 \
jaegertracing/all-in-one:1.35
现在您应该能够运行您的程序,并在网络浏览器中通过 https://:16686 查看任何跟踪。请注意,与其他导出跟踪的方法不同,不会有任何输出到标准输出/标准错误(stdout/stderr)。但是,如果您查看 Docker 容器的日志,当 all-in-one 容器收到跟踪时,您应该会看到输出。