为本地帧添加符号
要在使用编译为原生代码的编程语言(如 C、C++、Rust、Go 等)编写的应用程序跟踪中查看函数名和行号,你需要使用 symbtool CLI 工具将符号推送至集群。
点击适合你系统的链接以下载 symbtool 二进制文件
注意
symbtool 二进制文件目前需要 Linux 机器。
在使用 symbtool 二进制文件之前,请创建一个 Elasticsearch API 令牌。使用 -t 或 --api-key 参数传递此令牌。
你还需要从部署概览页面复制 Symbols 端点。使用 -u 或 --url 参数传递此 URL。
C/C++ 应用程序必须构建有调试符号 (-g) 才能进行符号化。Rust 应用程序必须使用 debug = 1(或更高版本)进行构建。Go 二进制文件不需要任何特殊的编译器标志,默认带有调试信息。调试信息不必部署到生产环境,但必须临时存在以便将其推送到 Elastic 集群。
如果你不介意在部署应用程序时包含调试符号,请运行
./symbtool push-symbols executable -e ./my-app -u <symbolizer url> -t <API token>
如果你不想在生产环境中使用调试符号,请复制可执行文件并剥离该副本。然后,你可以使用 -d 参数指示工具从原始未剥离的二进制文件中读取符号,同时仍然根据最终剥离的二进制文件计算文件 ID。符号推送完成后,你可以删除未剥离的二进制文件
cp ./my-app ./my-stripped-app
strip ./my-stripped-app
./symbtool push-symbols executable -e ./my-stripped-app -d ./my-app -u <symbolizer url> -t <API token>
rm ./my-app
警告
先推送调试信息然后再剥离二进制文件是行不通的。使用 -e 参数传递的可执行文件用于计算将堆栈跟踪与其符号关联的文件 ID,事后剥离二进制文件会更改该 ID。
Elastic 托管了一个公共服务,其中包含各种流行 Linux 发行版仓库中所有软件包的符号信息。从这些仓库安装的应用程序会自动进行符号化,用户无需采取任何操作。
Elastic 支持以下 Linux 发行版
- Alpine Linux
- Amazon Linux
- Debian
- Fedora
- Ubuntu