从 DataKit 1.60.0 版本开始,正式支持 Java、Python 应用 APM 自动注入,目前主要支持 DDTrace。
通过利用 LD_PRELOAD 能力影响动态库加载,从而实现自动调整应用程序的启动命令,达到往应用注入 APM 的目的。
LD_PRELOAD 简介
Linux 系统中利用 LD_PRELOAD 环境变量影响程序运行时链接,方法包括修改 /etc/ld.so.preload 配置文件和启动进程前设置 LD_PRELOAD,它允许你在程序启动之前预先加载一个或多个共享库(动态链接库)。这个环境变量在 Linux 系统中被广泛用于调试、监控、修改程序行为等目的。
/etc/ld.so.preload 的作用主要体现在以下几个方面:
- 预加载共享库:在程序运行前,动态链接器会按照
LD_PRELOAD环境变量和/etc/ld.so.preload文件中指定的顺序加载共享库,这比LD_LIBRARY_PATH环境变量所指定的目录中的共享库还要优先。 - 函数劫持:通过在预加载的共享库中定义与目标函数完全一样的函数,可以覆盖或劫持系统中的同名函数,实现函数的自定义行为。
- 调试和测试:预加载共享库可以用于调试和测试,例如,通过预加载一个包含自定义 malloc 或 free 函数的共享库来检测内存泄漏。
DataKit 实现 APM 自动注入
启动应用程序通常有多种方法,例如通过 shell 启动。在 Linux 系统上,常见的 shell 有 bash、sh、zsh 等多种 shell 程序。在 Ubuntu 上,默认的 shell 是 bash ,我们
DataKit APM 自动注入原理揭秘

最低0.47元/天 解锁文章
513

被折叠的 条评论
为什么被折叠?



