为原生帧添加符号
编辑为原生帧添加符号
编辑要查看编译为原生代码的编程语言(C、C++、Rust、Go 等)编写的应用程序的跟踪中的函数名称和行号,你需要使用 symbtool
CLI 实用程序将符号推送到集群。
下载 symbtool
二进制文件
编辑点击适合你系统的链接下载 symbtool
二进制文件
symbtool
二进制文件目前需要 Linux 机器。
使用 symbtool
二进制文件
编辑在使用 symbtool
二进制文件之前,创建一个 Elasticsearch API 令牌。使用 -t
或 --api-key
参数传递此令牌。
你还需要从部署概览页面复制 Symbols 端点。使用 -u
或 --url
参数传递此 URL。
自定义 C、C++、Go 和 Rust 应用程序
编辑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。
Linux 发行版软件包
编辑Elastic 托管了一个公共服务,其中包含各种流行的 Linux 发行版存储库中所有软件包的符号信息。 从这些存储库安装的应用程序会自动符号化,而无需用户采取任何操作。
Elastic 支持以下 Linux 发行版
- Alpine Linux
- Amazon Linux
- Debian
- Fedora
- Ubuntu