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首次采样时)

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

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

为了演示更现实的移动问题,还添加了一些故意制造问题的功能,例如渲染缓慢和崩溃应用程序。
展望未来
我们已经到了开始考虑 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 的最终润色,然后再做出最终的“稳定”决定。感谢您的阅读,我们期待您的来信。