OpenTelemetry Android:通往稳定之路

要点速览——我们希望您对OpenTelemetry Android Agent API在稳定之前提供反馈

好消息!OpenTelemetry Android SIG 正在积极致力于稳定主要的初始化和配置 API,为发布 1.0.0 稳定版本做准备。这对移动 RUM 开发者意味着什么?您是否对提供帮助感兴趣?请继续阅读以了解更多信息。

我们从哪里来

两年前,OpenTelemetry Android 还是一个新生儿——作为 Splunk 捐赠,受到了社区的热烈欢迎。它包含一个GitHub 仓库,其中只有一个单体模块,发布了一个单体制品。它构建在 opentelemetry-java API 和 SDK 之上,并且主要用 Java 编写。这是项目的一个稳健的开端,引起了早期快速的关注。即使在那时,它已经被用于生产环境部署。

社区团结起来,我们组建了一个由维护者和批准者(来自 4 家不同的供应商)组成的团队,来管理代码并指导项目的持续改进。

我们取得了什么成就

我们很快就确定了一些需要改进的领域,并在过去的 1250 多个 Pull Request 中取得了可观的进展,贡献者超过 40 人!如果您是这 40 人之一——谢谢您——您的帮助非常感激。❤️

以下是过去两年主要改进的摘要。

模块化

项目最初的单体结构被证明是笨重的。它增加了二进制文件大小,并且大多数时候试图包含所有用户的全部功能。扁平的包结构使用户难以理解哪些部分是 API 表面,哪些部分是内部的。不久之后,我们进行了一项模块化工作,将项目分解为协作的、单一用途模块的图,这些模块发布自己独立的制品。这种更清晰的关注点分离是一个重大的胜利!

除了发布单独的模块,我们还发布了物料清单 (bom),开发者可以使用它来同步这些众多模块的版本。

新的Instrumentation

通过社区的贡献,OpenTelemetry Android 项目获得了一系列有用的新 Instrumentation 库。这些包括:

  • android-log - 可以从惯用的 Android Log.x(...) 调用生成 OTel 日志记录。
  • httpurlconnection - 针对这个具有悠久历史的运行时提供的 HTTP 客户端的追踪 Instrumentation。
  • view-click – 为用户在 Android Views 上的按键生成点击事件。
  • compose-click – 为用户在 Jetpack Compose 组件内的按键生成点击事件。
  • sessions – 在会话生命周期改变时生成事件。

自动仪表化

与它的同类OpenTelemetry Java Agent不同,由于平台限制,Android Agent 无法进行字节码织入以在运行时 Instrumentation 类。然而,自动 Instrumentation 的能力非常强大,用户通常更喜欢在不进行代码更改的情况下进行 Instrumentation。

现在可以通过 Gradle 插件在构建时应用某些 Instrumentation,而无需手动更改代码或显式使用 OpenTelemetry 包装类。在撰写本文时,这包括 Android 日志 Instrumentation 和 HTTP 客户端 Instrumentation,并且我们预计未来会有更多的自动 Instrumentation。

文档

我们最近完成了一项工作,为每个 Instrumentation 模块创建了文档。这为用户提供了一种快速确定每个 Instrumentation 模块将生成哪些遥测数据的方法。它还包括希望独立使用该 Instrumentation 而无需 Agent 的用户的说明。

Events/Semconv

在移动世界中,用户生成的事件无处不在。真实用户监控 (RUM) 通常将用户行为显示为会话中的一系列事件。OpenTelemetry Android 项目刚开始时,OpenTelemetry 事件信号还处于起步阶段,所有事件都被笨拙地建模为零持续时间的 Span。此外,该领域缺乏语义约定,Span 名称和属性没有遵循 OpenTelemetry 的通用约定,例如点和命名空间。

少数 OpenTelemetry 贡献者参与了 Android、移动和通用客户端用例的语义约定定义。这些约定已被 Android 项目采纳,零持续时间的 Span 现在被正确地建模为事件。

迁移到Kotlin

Kotlin 是当代 Android 开发者使用的主要语言。尽管 Kotlin 与 Java API/库具有合理的互操作性,但用户期望 Kotlin 优先。OpenTelemetry Android 项目开始时,绝大多数代码是 Java,只有一小部分是 Kotlin。例如,2024 年 4 月(Wayback Machine首次采样时)

kotlin usage before

尽管这项工作仍在进行中,但我们已经取得了可观的进展。快进到今天,2025 年 9 月

kotlin usage now

演示应用

为了演示如何将 OpenTelemetry Android 与您的移动应用程序集成,我们创建了一个新的示例应用程序。此演示应用程序紧密模仿了 OpenTelemetry Demo Astronomy Shop,并且包含在 Android GitHub 仓库中。除了演示如何设置 Agent 和安装 Instrumentation 外,演示应用程序还具有生成现成日志和追踪遥测的功能。

demo app screen1 demo app screen2 demo app screen3

为了演示更现实的移动问题,还添加了一些故意制造问题的功能,例如渲染缓慢和崩溃应用程序。

展望未来

我们希望您对 Agent API 提供反馈!

我们已经到了开始考虑 OpenTelemetry Android 下一个阶段的时刻:稳定性。经过大量的 PR、讨论、重构、审议和持续改进,我们相信我们即将拥有一个初始化 API,我们可以自信地将其维护为 1.x 系列生命周期中的“稳定”版本。

2025 年 10 月的发布将是我们的第一个候选版本:1.0.0-rc1

从这个版本开始,所有制品都将发布带有 -alpha 后缀,android-agent 除外。这个 -alpha 后缀有助于清晰地传达哪些模块仍处于 alpha 阶段,并可能发生用户界面 API 更改。所有 Instrumentation 模块将保持“alpha”状态,并且遥测数据将保持“开发”状态,直到相关的 semconv 稳定为止。

我们认为 android-agent 是大多数 Android 开发者与此 OTel Instrumentation 交互的主要方式。因此,我们认为我们已经达到了一个点,即

  • API 使用方便
  • API 覆盖了 90% 的常见用例
  • 非标准用例和专家定制仍然可行

这就是您发挥作用的地方!我们需要您认真试用 android-agent,并就 OpenTelemetryRumInitializer API提供反馈。我们真心感谢所有反馈,并将利用您的反馈来完成此 API 的最终润色,然后再做出最终的“稳定”决定。感谢您的阅读,我们期待您的来信。

最后修改于 2025 年 10 月 2 日:[Blog Post] Android road to stable (#7903) (20529e7f)