常见问题
编辑常见问题
编辑代理如何工作?
编辑该代理会自动检测已知的框架和库,并记录有趣的事件,例如 HTTP 请求和数据库查询。为此,它利用 JVM 检测类字节码的功能。这意味着对于支持的技术,无需进行任何代码更改。
代理会在有趣的事件之前和之后安全地自动注入少量代码,以测量其持续时间和元数据(例如数据库语句)以及 HTTP 相关信息(例如 URL、参数和标头)。
例如,如果代理检测到加载了扩展 javax.servlet.HttpServlet
的类,它会在 servlet 调用之前和之后注入监控代码。
这些事件称为事务和跨度,它们会被发送到 APM 服务器,服务器会将其转换为适合 Elasticsearch 的格式,并将其发送到 Elasticsearch 集群。然后,您可以使用 Kibana 中的 APM 应用程序来深入了解应用程序中的延迟问题和错误原因。
代理是否执行字节码检测?
编辑是的
字节码检测有多安全?
编辑Elastic APM 使用流行的字节码检测库 Byte Buddy,它负责处理实际的字节码,让我们可以用纯 Java 编写检测代码。
Byte Buddy 广泛用于流行的开源项目中,例如 Hibernate、Jackson、Mockito,并且也常用作 APM 供应商。它由一位 Java 大师创建,荣获 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 中的说明进行报告。