作者:来自 Elastic Cesar Munoz

EDOT Android 只需添加一个 Gradle 依赖项,就能为你的 Android 应用增加移动 APM:崩溃报告、会话追踪和分布式追踪都可以在 Kibana 中查看。
越来越多的人通过移动应用在智能手机上处理各种事务,无论是私人事务还是工作事务。对于拥有数千甚至数百万用户的移动应用团队及其所依赖的后端服务而言,确保出色的性能和可靠性是一项关键挑战。了解真实用户受到的影响、崩溃模式以及响应时间缓慢的根本原因,是管理移动应用质量的基础。
当出现问题时,挑战会进一步加剧。设备上的崩溃、缓慢的页面或错误响应,可能源于 Android 应用本身、后端服务,或者两者之间的网络路径。没有从移动客户端到后端的连通式 E2E 视图,调试这些问题既耗时又令人沮丧。而且,如果没有标准化的插桩格式,移动团队往往最终需要维护独立的工具,而这些工具无法与后端和基础设施团队已经使用的工具集成。
OpenTelemetry 提供了一种解决方案:一种统一的、开放标准的插桩模型,可以跨平台和语言工作,并由庞大的社区提供支持。OpenTelemetry Android 的 Elastic 发行版,即 EDOT Android,是一个基于 OpenTelemetry 构建的原生 Android 应用 APM agent。它为 Android 团队提供了一条实用路径,用于在 Elastic 中观测移动应用行为,并提供分布式追踪、崩溃报告、会话追踪、磁盘缓冲和自动插桩,同时尽可能减少代码,并遵循开放标准。
为了了解完整的实际效果,我们将对一个演示 Android 天气应用进行端到端插桩。你将在本地运行 Elasticsearch 、Kibana 和 Elastic Agent。Elastic Agent 提供 OTLP 端点,用于接收来自 Android 应用和后端的遥测数据。然后,你将从应用中生成分布式追踪、自定义 span、日志和 Android 崩溃,并使用 Android OpenTelemetry 仪表板在 Kibana 中探索这些结果。
本文重点介绍一个动手实验,通过使用 EDOT Android agent,探索使用 Elastic 观测 Android 应用的 E2E 体验。如果你希望了解有关 EDOT Android agent 的更多具体信息,例如支持的功能列表以及为你自己的 Android 项目提供的设置指南,可以查看 EDOT Android 文档。
使用 Elasticsearch 和 Kibana 设置 EDOT Android
我们将使用 EDOT Android 演示应用。这个演示应用有意保持小巧,但涵盖了评估使用 Elastic 进行移动可观测性时所需的主要工作流。
该演示应用包含两个主要组件:一个 Android 应用 和一个 Spring Boot 后端 。此外,你还需要一个正在运行的 Elastic Stack 环境;稍后我们会在本指南中进一步介绍如何获取这样的环境。

前提条件
-
Java 17 或更高版本。
-
一个 Android 模拟器。
-
在 Windows 上,使用 Windows Subsystem for Linux(WSL)来运行演示脚本。
第 1 步:克隆演示应用的 代码仓库
我们首先克隆 EDOT Android 演示应用:
bash
`git clone git@github.com:elastic/android-agent-demo.git`Lobster AI
第 2 步:启动 Elastic Stack
该演示应用使用 start-local,通过一条命令运行 Elasticsearch、Kibana 和 Elastic Agent。在此设置中,Elastic Agent 提供 OTLP 端点,用于接收来自应用和后端的遥测数据。在你希望创建本地 Elastic 文件的目录中运行:
sql
`curl -fsSL https://elastic.co/start-local | sh -s -- --edot`Lobster AI
有关此步骤的更多信息,请查看演示应用的说明。
第 3 步:启动本地后端
演示应用的后端是一个使用 EDOT Java agent 进行插桩的 Spring Boot 服务。它负责处理应用的天气请求,并调用 Open-Meteo 公共 API 获取天气数据。
bash
`./backend-manager start`Lobster AI
有关管理后端服务的更多信息,请查看演示应用的说明。
第 4 步:启动 Android 应用
使用 Android Studio 打开 EDOT Android 演示应用代码仓库,并在模拟器中运行应用。有关如何从 Android Studio 运行 Android 应用的更多信息,请参阅此处。
从 Android 应用生成分布式追踪、错误和崩溃
Android 应用包含两个页面:城市选择页面和天气显示页面,后者会显示上一页面所选城市的当前天气。应用包含两条有意设计的故障路径:第一条路径可以通过选择 New York 触发,这会导致后端拒绝请求(演示后端仅支持欧洲城市);点击悬浮的崩溃按钮则会有意使应用崩溃,这样你可以在重新启动应用后,在 Kibana 中查看崩溃报告。下面我们将更详细地了解这些使用场景。
端到端追踪成功的请求

在 EDOT Android 演示应用中,将"Paris"选为城市后,第二个页面会触发一个成功的后端请求。EDOT Android 的 OkHttp 自动插桩会自动为该请求生成一个 span,它支持所有由 OkHttp 生成的 HTTP 请求以及使用 OkHttp 的工具,例如 Retrofit。除了 Android HTTP span 之外,成功的城市请求还会继续进行 E2E 追踪,并在后端创建一个指向 Open-Meteo 的 HTTP 客户端 span。

后端错误如何出现在 Android 分布式追踪中

演示后端仅支持欧洲城市,因此选择 "New York" 会导致请求失败,并进一步自动创建一个与 Android 应用 HTTP span 相关联的错误。这一过程会自动完成。稍后我们将了解如何从 Kibana 中查找和检查这些问题。

EDOT Android 如何捕获和报告应用崩溃

崩溃按钮会创建一个崩溃事件,在重新打开应用后,该事件会出现在 Kibana 中。这个事件包含会话信息,可以帮助我们从 Kibana 中缩小根本原因的范围,稍后你会看到这一点。
注意:EDOT Android 会自动将 Android 会话上下文附加到 span 和日志中。这意味着,在崩溃发生之前创建的任何 span 或日志,都可以与崩溃事件以及同一会话中的附近 span 一起进行查看,从而让你完整了解用户当时正在进行的操作。这同样适用于手动创建的 span 和日志。
在 Kibana 中可视化 Android 应用监控数据
为了在一个地方查看来自 Android 应用的完整情况,我们将按照以下步骤安装 Kibana 的 Android OpenTelemetry Assets 软件包。
-
在 Kibana 中,在全局搜索字段中搜索 "Android OpenTelemetry Assets"。
-
打开它,然后点击 Install,将 Android 仪表板添加到你的 Kibana 实例中。


在 Kibana 中探索 Android 应用监控仪表板
安装内容软件包后,打开 Android OTel Application Overview 仪表板:
-
在 Kibana 中,通过全局搜索字段或 Kibana 菜单搜索 Dashboards。
-
在 Dashboards 中搜索 Android OTel,然后打开"Android OTel Application Overview"仪表板。
-
在仪表板顶部的 Applications 面板中选择你的应用。


该仪表板提供了一组指标面板,用于概览你的应用健康状况、性能和 RUM,同时还提供了一组面板,可以按照下面的说明,在 Discover 或 Exception 仪表板中进一步探索。
如何在 Kibana 中检查分布式追踪 瀑布图
在 Application Overview 仪表板中,进入其中一个 span 表格(All spans 或 Failed spans ),然后点击其 Explore in Discover 按钮。

在 Discover 中,点击任意 span 行左侧的展开图标,打开其详细信息面板。追踪瀑布图 UI 会显示在其中,展示该追踪的完整 span 层级结构和时间信息。你可以将瀑布图展开到全屏,然后从那里进一步深入查看。


在 Kibana 中分析失败的 span 和后端错误
虽然你可以在仪表板的 All spans 面板中找到各种类型的 span,但你也可以改为探索 Failed spans 面板,将范围缩小到仅查看失败的 span。
对于 New York 路径,找到一个失败的 span 并展开它。追踪瀑布图会突出显示后端错误,而异常详细信息则会显示有意设置的后端规则,即仅支持欧洲城市。



在异常仪表板中查看崩溃详细信息和堆栈追踪
崩溃报告由崩溃自动插桩插件提供。当未处理的异常导致应用崩溃时,EDOT Android 会将崩溃事件存储在磁盘上。应用下次启动时,该事件会被导出。磁盘缓冲可以确保即使崩溃发生时网络不可用,崩溃事件也不会丢失。
在 Application Overview 仪表板中,滚动到 Crashes 部分。你会看到按照计算得到的堆栈追踪组 ID 列出的崩溃组。选择一个组,然后点击 View crash details,打开 Exception Details 仪表板。


Exception Details 仪表板显示了一组指标,用于更好地了解所选崩溃的影响,以及其完整的堆栈追踪。崩溃事件会根据其堆栈追踪进行分组,这有助于确保相同的崩溃在该仪表板中被统一计数和聚合,从而更好地了解单个崩溃对你的应用的影响。

对于这个演示,堆栈追踪指向 MainActivity 中有意触发的崩溃。附近的会话事件还应该包含在崩溃发生前创建的自定义 Crash button click 日志,这有助于解释崩溃是如何被触发的。下面我们将了解如何检查一个会话,从而了解用户在应用中的操作路径,以及最终导致其发生崩溃的过程。
使用会话了解 EDOT Android 中的用户流程
移动应用故障排查通常从一个异常结果开始(崩溃、错误或缓慢的用户体验),但真正有价值的问题是:在这个结果发生之前发生了什么。EDOT Android 通过将 session.id 附加到应用生成的每个 span 和日志上来帮助回答这个问题,即使这些 span 和日志是手动创建的。
一个会话旨在覆盖用户与应用的一次完整交互。当不存在之前的活动会话,或者之前的会话已经过期时,就会创建一个新的会话。会话在 30 分钟没有活动后过期。如果应用一直处于活动状态,一个会话最长可以持续 4 小时。
这样,你就可以查询单个会话中的所有遥测数据,并按照顺序查看这些数据。找到崩溃组后,可以从 Top affected sessions 面板深入查看一个受影响的会话,并检查事件时间线。你可以在同一个调查路径中一起查看自定义日志、应用启动 span、HTTP 请求 span 和崩溃数据。


Application Overview 仪表板中的 Event timeline 面板在这里也很有用:从仪表板顶部的筛选器中选择一个会话,时间线就会按照时间顺序显示该会话中的完整 span 和日志序列。

EDOT Android 为生产应用增加的移动 APM 能力
演示使用的是本地技术栈和简单代码,但相同的 agent 功能也适用于生产应用。
磁盘缓冲会在导出遥测数据之前将其存储在本地。当设备网络连接较差或应用暂时处于离线状态时,这可以减少数据丢失。
自动插桩 会为受支持的目标创建遥测数据,而无需在每个调用周围添加代码。目前包括 OkHttp、崩溃报告,以及用于OpenTelemetry Android插桩的适配器。
手动插桩允许你为特定于应用的工作流添加 span、日志和指标。这对于屏幕加载时间、结账流程、登录步骤、功能使用情况,或者任何仅依靠框架级遥测数据还不够的场景都很有用。
集中式配置可以在配置 OpAMP 端点后,通过 Kibana 远程调整选定的 EDOT Android 行为。截至本文撰写时,EDOT Android 的集中式配置处于预览阶段,并支持记录和会话采样率等设置。
分布式追踪 将 Android 应用请求与后端服务 span 连接起来,因此你可以追踪任何用户操作的完整路径,从屏幕上的点击一直到服务器上的数据库查询。EDOT Android 确保你的应用遥测数据时间戳与协调世界时保持同步。这可以确保之后在 Kibana 中获得正确的追踪瀑布层级,其中不同组件能够在时间上正确协调。
清理演示环境
完成后,如果你计划稍后重新启动后端,请停止后端;否则可以将其卸载:
bash
`
1. ./backend-manager stop
2. # ./backend-manager uninstall
`Lobster AI
然后停止或卸载本地 Elastic Stack:
bash
`
1. cd elastic-start-local
2. ./stop.sh
3. # ./uninstall.sh
`Lobster AI
开始在你自己的应用中使用 EDOT Android
EDOT Android 为原生 Android 团队提供了一条基于 OpenTelemetry 的移动 APM 路径,让你能够在 Elastic 中实现移动 APM。通过简单的 Gradle 设置和一次早期初始化调用,你就可以获得自动 HTTP span、崩溃报告、会话追踪,以及直接访问 OpenTelemetry SDK 来创建自定义遥测数据,并且可以在 Kibana 的 Android 仪表板中看到所有这些信息关联在一起。
可观测性是现代移动开发的重要组成部分。崩溃、缓慢的页面和后端错误都会影响真实用户,而你越早能够跨越完整的请求路径识别根本原因,从设备一直追踪到数据库,就越好。演示应用是一个很好的起点,因为它可以在不需要生产环境部署的情况下运行完整工作流。之后,相同的设置模式也适用于你自己的应用,只需使用生产端点、API 密钥身份验证,以及针对你的使用场景定制的 span 和日志。
开发者资源:
还没有 Elastic Cloud 账户?注册 Elastic Cloud,按照本指南中的说明,使用 EDOT Android 试用移动可观测性。我们很期待听到你使用 Elastic 了解 Android 应用技术栈可见性后的体验。
原文:Android application monitoring with OpenTelemetry | Elastic Observability Labs