常见问题解答
编辑常见问题解答编辑
代理是如何工作的?编辑
代理会自动检测已知的框架和库,并记录有趣的事件,例如 HTTP 请求和数据库查询。为此,它利用 JVM 的能力来检测类的字节码。这意味着对于支持的技术,不需要进行任何代码更改。
代理会自动安全地将一小段代码注入到有趣的事件之前和之后,以测量它们的持续时间和元数据(例如 DB 语句),以及 HTTP 相关信息(例如 URL、参数和标头)。
例如,如果代理检测到加载了扩展 javax.servlet.HttpServlet
的类,它会在 servlet 调用之前和之后注入监控代码。
这些事件称为事务和跨度,会被发送到 APM 服务器,APM 服务器会将它们转换为适合 Elasticsearch 的格式,并将它们发送到 Elasticsearch 集群。然后,您可以使用 Kibana 中的 APM 应用程序来深入了解应用程序中的延迟问题和错误根源。
代理是否正在进行字节码检测?编辑
是的
字节码检测的安全性如何?编辑
Elastic APM 使用流行的字节码检测库 Byte Buddy,它负责处理实际字节码的繁重工作,并让我们能够用纯 Java 编写检测代码。
Byte Buddy 被广泛用于流行的开源项目,例如 Hibernate、Jackson、Mockito,并且也常被 APM 供应商使用。它是由一位 Java Champion 创建的,获得了 Dukes Choice 奖,目前每年下载量超过 7500 万次。
与其他字节码检测库不同,Byte Buddy 的设计使得它不可能破坏被检测类的字节码。它还尊重同时附加到应用程序的其他代理。
我需要重新编译我的应用程序吗?编辑
不需要
推荐的采样率是多少?编辑
对于理想的采样率,没有一个万能的答案。采样取决于您的偏好和您的应用程序。您想要采样的越多,您需要的网络带宽和磁盘空间就越多。
需要注意的是,即使您以 100% 的频率进行采样,应用程序的延迟也不会受到代理的很大影响(在个位数微秒的范围内)。但是,后台报告线程需要做一些工作来序列化和压缩事件。如果您的应用程序不是 CPU 密集型的,这应该不会有什么问题。请注意,如果 APM 服务器无法处理所有事件,代理会丢弃数据以防止应用程序崩溃。然后它也不会序列化和压缩事件。
可以通过更改 transaction_sample_rate
(性能) 配置来更改采样率。
使用 APM 时是否有推荐的 RAM?编辑
没有。Java 代理的设计非常节省内存。它的静态开销只有几 MB。
如果代理不支持我正在使用的技术怎么办?编辑
您可以使用 公共 API 创建自定义跨度和事务,使用 插件 API 创建自定义检测,参与 调查 为优先添加对您正在使用的技术的支持投票,或者 参与代理开发 并为代理的自动检测功能做出贡献。
Elastic APM Java 代理没有使用最新的 log4j2 版本。它仍然安全吗?编辑
是的,使用的 log4j 版本包含所有已知安全漏洞的回溯,包括 log4shell。有关 log4j2 的安全页面 的更多信息。由于 Elastic APM Java 代理仍然支持 Java 7,因此我们无法更新到 log4j 2.12.x 以外的版本。一些安全工具可能仍然错误地将 Elastic APM Java 代理使用的 log4j2 版本标记为存在漏洞。对于这些情况,我们发布了一个专门的构建,它包含最新的 log4j2 依赖项,但是因此需要至少 Java 8。您可以在我们的 设置文档 中链接的 Maven Central 上找到此版本。如果存在最新的 Elastic APM Java 代理版本中尚未修补的新漏洞,请按照 https://elastic.ac.cn/community/security 中的说明报告。