常见问题编辑

代理如何工作?编辑

代理会自动检测已知的框架和库,并记录感兴趣的事件,例如 HTTP 请求。为此,它利用了 JVM 检测类字节码的功能。这意味着受支持的技术不需要更改代码。

代理会在感兴趣的事件前后自动安全地插入一小段代码,以测量其持续时间和元数据,例如 HTTP 相关信息,包括 URL、参数和标头。

这些事件称为 Span,会被发送到 APM 服务器,APM 服务器会将它们转换为适合 Elasticsearch 的格式,并将它们发送到 Elasticsearch 集群。然后,您可以使用 Kibana 中的 APM 应用程序来深入了解应用程序中的延迟问题和错误根源。

检测是在编译时使用 Android Gradle 插件 Instrumentation API 完成的。

代理是否进行字节码检测?编辑

字节码检测有多安全?编辑

Elastic APM 使用流行的字节码检测库 Byte Buddy,它负责处理实际字节码的繁重工作,让我们可以用纯 Java 编写检测。

Byte Buddy 广泛用于流行的开源项目,例如 Hibernate、Jackson、Mockito,并且也被 APM 供应商普遍使用。它由 Java Champion 创建,获得了 Dukes Choice 奖,目前每年的下载量超过 7500 万次。

与其他字节码检测库不同,Byte Buddy 的设计使其无法破坏检测类的字节码。它还尊重同时应用于应用程序的其他转换。

如何配置 SSL/TLS?编辑

请注意,Elastic 代理不在内部处理 SSL/TLS 配置,因此,管理这些类型配置的推荐方法是将其作为应用程序网络安全配置的一部分进行管理,如 Android 官方 安全指南 中所述。下面我们展示了一组常见用例以及每个用例可以采取的快速提示,但是,每个用例可能会有所不同,因此如果您需要更多详细信息,请参阅 Android 关于此主题的 官方文档

连接到 Elastic Cloud编辑

如果您的 Elastic Stack 托管在 Elastic Cloud 中,则无需在应用程序中添加任何 SSL/TLS 配置更改,它应该可以开箱即用。

连接到本地服务器编辑

如果您的 Elastic Stack 托管在本地,则取决于您的主机用来签署其证书的 CA 类型,如果它是常用的受信任 CA,则您无需担心更改应用程序的 SSL/TLS 配置,因为它应该可以开箱即用,但是,如果您的 CA 未知/私有或您的服务器使用自签名证书,则您需要按照 Android 关于此主题的指南 配置您的应用程序以信任自定义 CA。

调试目的编辑

如果您正在运行本地服务器并且需要在不使用 https 的情况下连接到它以运行快速测试,则可以暂时在 AndroidManifest.xml 文件的 <application> 标记内 启用明文流量,如下所示

<application
    ...
    android:usesCleartextTraffic="true">
    ...
</application>

您应该仅出于调试目的启用明文流量,而不要用于生产代码。

如果启用明文流量对于您的调试用例不是一个有效的选择,则您应该参考 Android 关于 配置用于调试的 CA 的指南。

有关 Android 如何处理网络安全的更多信息,请参阅有关此主题的官方 Android 文档

如果代理不支持我使用的技术怎么办?编辑

该代理构建在 OpenTelemetry 之上。您可以使用其公共 API 创建自定义 Span 和事务。