AWS CloudWatch RUM 现已支持移动应用监控:实现端到端的性能洞察

本文详细介绍了Amazon CloudWatch RUM新推出的移动应用监控功能,涵盖如何为Android和iOS应用创建App Monitor、集成SDK的两种方式(零代码与手动)、以及如何利用控制台分析应用性能、错误、会话和关键指标。

Amazon CloudWatch RUM 现已支持移动应用监控

今天,我们兴奋地宣布推出面向移动设备的 Amazon CloudWatch RUM,将 AWS 的真实用户监控 (RUM) 能力扩展至 iOS 和 Android 应用。这一扩展使得此前仅适用于 Web 应用的监控工具现在也能为移动开发者所用。

随着移动设备在我们的日常生活中扮演着越来越核心的角色,确保移动应用的最佳性能和用户体验变得比以往任何时候都更为关键。然而,由于设备种类、操作系统、应用版本、网络条件和用户交互的多样性,监控移动应用带来了独特的挑战。移动应用开发者面临着一个持续的难题:“应用在测试中表现完美,但真实用户却遇到性能问题”。虽然合成测试和传统监控方法确实能提供对现实世界性能的洞察,但它们缺乏理解终端用户体验所需的数据。这正是 CloudWatch RUM Mobile 的用武之地,它允许您收集指标,从而深入了解您的移动应用在真实用户手中的表现。

Amazon CloudWatch RUM for Mobile

Amazon CloudWatch RUM for Mobile 帮助您直接从终端用户的移动应用中,在应用被使用时收集关键的性能数据和用户行为指标。通过将轻量级的 SDK 集成到您的 Android 或 iOS 应用中,您可以捕获大量关于应用性能、用户交互以及影响用户体验的潜在问题的信息。

开始使用,您只需在 CloudWatch RUM 控制台创建一个“应用监视器”,将 SDK 集成到您的应用中并部署。当用户在您的应用中导航时,SDK 在后台运行,将宝贵的数据发送到 RUM 进行整合和分析。该工具可以单独使用,也可以与 Amazon CloudWatch Application Signals 和 AWS X-Ray 等其他 AWS 服务结合使用,以提供跨 Web 和移动平台的应用性能的全面视图。

改变开发流程的关键优势

CloudWatch RUM Mobile 使开发团队能够从被动调试转向主动优化。您可以收集来自真实用户的实时性能指标,并在性能问题影响用户满意度之前识别它们。系统监控屏幕加载时间,跟踪应用崩溃、Android 的 ANR(应用程序无响应)或 iOS 的应用挂起(附带完整上下文),并通过全面的仪表板可视化所有这些数据。

转变是立竿见影的:您无需再等待用户投诉或试图重现错误,而是可以清晰地、可操作地洞察用户每次与应用交互时的体验。

开始使用:迈向增强移动监控之路

在本博客中,您将学习如何将 Amazon CloudWatch RUM 集成到您的 Android 和 iOS 移动应用中。要开始使用 CloudWatch RUM for Mobile,请按照以下详细步骤为您的 Android 或 iOS 应用设置和实现监控。

为 Android 设置应用监视器

首先需要创建一个“应用监视器”。为此,打开 AWS CloudWatch 控制台,导航到 Application Signals 并选择 RUM。接下来点击“添加应用监视器”。

图 1:通过 AWS CloudWatch 控制台创建应用监视器

现在您会看到两个新选项,分别是“Android”和“iOS”。在“应用监视器名称”下为应用监视器命名,然后选择“Android”或“iOS”作为平台继续(此处我们选择 Android)。

图 2:创建应用监视器 – Android 和 iOS 选项

有几个“可选”字段可以根据您的需求启用:

  • 如果您希望 RUM 遥测数据在 Amazon CloudWatch Logs 中可用,请勾选“数据存储”选项。
  • 如果您想使用基于资源的策略来控制访问,可以勾选“附加公共的基于资源的策略”。
  • 如果您希望 Span 在 X-Ray 中可用,请勾选“活动追踪”选项。

图 3:创建应用监视器 – 可选字段

点击“添加应用监视器”完成。 然后控制台会为您提供一个代码片段,需要将其添加到您的 Android 应用程序中才能开始收集数据。代码提供了“手动插桩”和“零代码插桩”两种方式。 让我们保存这些代码片段,您将在本博客后面的“为您的 Android 应用插桩”部分使用它们。

图 4:创建应用监视器 – 手动和零代码插桩的代码片段

为您的 Android 应用插桩:选择实现路径

现在应用监视器已经创建,让我们为您的移动应用插桩,开始向应用监视器发送遥测数据。如上所述,有两种可用的插桩或配置移动应用的方式:零代码插桩和手动插桩。

首先,请准备好“设置应用监视器”部分中的代码片段——您将需要它们来完成本节。代码也可以在 https://github.com/aws-observability/aws-otel-android 找到。现在让我们来审查每个选项。

选项 1:零代码插桩(代理)

为此,首先您需要将一些依赖项添加到我们应用程序的 app/build.gradle 文件中。这是一个 Kotlin DSL 示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
plugins {
     id("com.android.application")
     id("org.jetbrains.kotlin.android")
}

dependencies {
    // ADOT Android 代理 - 包含自动插桩
    implementation("software.amazon.opentelemetry.android:agent:1.0.0")

    // 使用 ByteBuddy 的自动化 HTTP 客户端插桩(可选但推荐)
    byteBuddy("io.opentelemetry.android.instrumentation:okhttp3-agent:0.15.0-alpha") // 如果您使用 OkHttp-3.0
    byteBuddy("io.opentelemetry.android.instrumentation:httpurlconnection-agent:0.15.0-alpha") // 如果您使用 URLConnection/HttpURLConnection /HttpsURLConnection
}

接下来,对于零代码配置,您需要在应用程序的 res/raw 目录下创建一个名为 aws_config.json 的文件,内容如下(请确保替换每个参数的值)。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
{
  "aws": {
    "region": "<your-region>", // 指定您创建应用监视器的 AWS 区域
    "rumAppMonitorId": "<your-app-monitor-id>" // 替换为上面创建的应用监视器的 ID
  },

  // 将附加到所有 OpenTelemetry 应用 Span 和事件的可选属性
  "otelResourceAttributes": {
     "service.name": "<your_app>", // 注意:使用您的应用程序名称更新此项
     "service.version": "1.0.0" // 指定 service.version 将允许您根据正在运行的应用版本在 RUM 控制台上过滤遥测数据
  }
}

就是这样!这是初始化 Android 代理并开始收集遥测数据到 CloudWatch RUM 应用监视器所需的最小配置。

选项 2:手动插桩

要进行编程方式配置;您将使用轻量级的“核心”模块,而不是选项 1 中使用的“代理”模块。为此,让我们将以下 SDK 添加到您的应用程序的 app/build.gradle 文件中。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
plugins {
       id("com.android.application")
       id("org.jetbrains.kotlin.android")
}

dependencies {
      implementation("software.amazon.opentelemetry.android:core:1.0.0")

     // 使用 ByteBuddy 的自动化 HTTP 客户端插桩(可选但推荐)
     byteBuddy("io.opentelemetry.android.instrumentation:okhttp3-agent:0.15.0-alpha")
     byteBuddy("io.opentelemetry.android.instrumentation:httpurlconnection-agent:0.15.0-alpha")
}

接下来,您需要在您的应用程序中初始化用于 OpenTelemetry 的 AWS 发行版 (ADOT) Android 代理。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
class MyApplication : Application() {
      override fun onCreate() {
          super.onCreate()

         OpenTelemetryRumClient {
              androidApplication = this@MyApplication
              awsRum {
                    region = "<your-region>"
                    appMonitorId = "<your-app-monitor-id>"
             }
             otelResource = Resource.builder()
                    .put("service.name", "MyApp") // 注意:使用您的应用程序名称更新此项
                    .put("service.version", "1.0.0") // 注意:使用最新版本保持更新
                    .build()
        }
    }
}

最后,如果您还没有 Application 类,您需要在 Android 清单中注册这个新的“MyApplication”。

1
2
3
4
5
<application>
        android:name="com.example.MyApplication"
        <!-- 所有其他属性、活动等 -->
         android:label="MyApplication">
</application>

此后,您应该能够运行您的应用程序并开始接收遥测数据到应用监视器。

为 iOS 设置应用监视器

为 iOS 应用程序创建应用监视器的过程与上面为 Android 应用程序演示的相同。一旦为 iOS 创建了应用监视器,让我们看看如何为应用程序插桩以开始发送遥测数据。iOS 的代码也可以在 https://github.com/aws-observability/aws-otel-swift 找到。

选项 1:零代码插桩(代理)

与 Android 的“应用监视器”一样,您可以在“应用监视器”创建的最后页面获取用于为 iOS 应用插桩的“代码片段”。根据这些说明,您将 Swift SDK 依赖项添加到应用程序的 Package.swift 文件中。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
// 在您的包依赖项中:
dependencies: [
     .package(url: "https://github.com/aws-observability/aws-otel-swift.git", .upToNextMajor(from: "1.0.0"))
]

// 在您的目标依赖项中:
targets: [
    .target(
         name: "<YourAppTarget>",
         dependencies: [
             // 仅用于自动初始化
            .product(name: "AwsOpenTelemetryAgent", package: "aws-otel-swift"),
          ]
      )
]

AwsOpenTelemetryAgent 模块被导入到应用时,SDK 会自动初始化。它将在应用包的根目录中寻找名为 aws_config.json 的文件(请确保替换每个参数的值)。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
{
   "aws": {
      "region": "<your-region>", // 指定您创建应用监视器的 AWS 区域
      "rumAppMonitorId": "<your-app-monitor-id>" // 替换为上面创建的应用监视器的 ID
   },
   "otelResourceAttributes": {
          "service.name": "<your-app>", // 注意:使用您的应用程序名称更新此项
          "service.version": "1.0.0" // 注意:使用最新应用程序版本保持更新
    }
}

选项 2:手动插桩

要进行编程方式配置,将以下依赖项添加到项目的 Package.swift 文件中。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
// 在您的包依赖项中:
dependencies: [
     .package(url: "https://github.com/aws-observability/aws-otel-swift.git", .upToNextMajor(from: "1.0.0"))
]

// 在您的目标依赖项中:
targets: [
     .target(
          name: "YourAppTarget",
          dependencies: [
              .product(name: "AwsOpenTelemetryCore", package: "aws-otel-swift"),
          ]
     )
]

接下来,在应用程序中初始化 ADOT Swift 代理。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
import AwsOpenTelemetryCore
class AppDelegate: UIResponder, UIApplicationDelegate {
       func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
                AwsOpenTelemetryRumBuilder.create(
                      config: AwsOpenTelemetryConfig(
                            awsRum: AwsRumConfig(
                                  region: "<your-region>",
                                  appMonitorId: "<your-app-monitor-id>"
                             ),
                            otelResourceAttributes: [
                                    "service.name": "<your-app>", // 注意:使用您的应用程序名称更新此项
                                    "service.version": "1.0.0" // 注意:使用最新应用程序版本保持更新
                             ]
                   )
              )?.build()
             return true
      }
}

可视化您的应用性能:数据转化为洞察

一旦 CloudWatch RUM for Mobile 开始收集数据,CloudWatch RUM 就会变成您的移动性能指挥中心,提供多个专门的视图,将原始性能数据转化为可操作的洞察。

从显示的 RUM 应用监视器列表中,选择您在上面部分创建的应用监视器。这将为您提供一个仪表板,其中包含各种选项卡,如性能、错误、会话、指标和配置;并具有按屏幕、应用版本、操作系统版本、设备、国家、区域和位置进行过滤的能力。

性能选项卡:深入探究速度和响应性

CloudWatch RUM 控制台中的性能选项卡提供了对移动应用性能的洞察。这个详细视图按屏幕名称、操作系统版本、应用版本、设备和国家分解屏幕加载时间。以前看不见的模式变得清晰起来——您的应用在某些国家由于网络基础设施差异而表现不同,或者特定设备型号在特定功能上遇到困难。点击图表中的屏幕加载时间数据点将在右侧打开诊断面板,该面板提供与数据点相关的进一步洞察,例如,最近相关的会话,以及指向会话选项卡以排查一个或其他类似会话的链接。

应用启动时间视图提供了应用程序启动性能的详细分析,按应用启动类型(冷/热)、操作系统版本、应用版本、设备和国家分解启动时间。这种细粒度视图有助于识别性能瓶颈——例如特定操作系统版本经历较慢的冷启动,或某些设备型号在初始化时遇到困难,从而为最具影响力的用户群体实现有针对性的优化工作。

位置选项卡提供了应用程序性能的地理洞察,显示跨国家、区域和地方的指标,以揭示基于位置的性能模式。此视图有助于识别区域基础设施挑战、网络延迟问题或用户体验性能下降的地理区域。

图 5:AWS CloudWatch RUM – 性能选项卡

错误选项卡:您的调试伙伴

错误选项卡将错误跟踪转化为系统化的问题解决。它将应用程序问题分为三类:网络错误、崩溃和 ANR/应用挂起。网络错误选项卡的 HTTP 请求折线图显示 HTTP 性能指标,左侧 Y 轴显示失败率(HTTP 错误、HTTP 故障和网络故障),右侧 Y 轴显示 HTTP 延迟。这些时间序列数据点允许用户点击并查看相关 Span 和会话以在诊断面板中进行故障排除。底部的表格列出了 100 个最常见的网络路由。

同样,崩溃和 ANR/应用挂起选项卡显示每种错误数量的折线序列。底部的表格显示最常见的顶部崩溃消息/ANR 堆栈跟踪。点击错误消息将弹出整个堆栈跟踪以供快速参考。

图 6:AWS CloudWatch RUM – 错误选项卡

会话选项卡:跟随用户旅程

接下来,会话选项卡允许您使用详细的瀑布图可视化来跟踪个体用户在您应用中的旅程。这些可视化显示了用户交互过程中时间花费的确切位置,以及用户在何处遇到摩擦或延迟。这种以用户为中心的视图不仅帮助您优化技术性能,还有助于优化整体用户体验。

它有一个表格,按时间倒序列出所有会话。底部是一个瀑布图,可视化了所选会话的所有遥测数据。瀑布图中的每一行都可以被选中以打开诊断面板。如果该行对应一个 HTTP 请求,则会有 traceId 深度链接到跟踪控制台。如果是一个收到异常、崩溃或 ANR/应用挂起的 HTTP 请求,诊断面板还会有一个异常选项卡显示堆栈跟踪。瀑布图中的“查看”按钮也是一种一键直接导航到异常的快捷方式。

图 7:AWS CloudWatch RUM – 会话选项卡 – ARN

图 8:AWS CloudWatch RUM – 会话选项卡 – HTTP traceId

指标选项卡:监控应用程序健康状况

指标选项卡提供了一个全面的仪表板,帮助可视化关于应用程序延迟、错误、流量和扩展指标的实时数据。 此选项卡在右上角还有一个名为“添加到仪表板”的选项,它使您能够将此数据导出到任何其他 CloudWatch 仪表板。

图 9:AWS CloudWatch RUM – 指标选项卡

配置选项卡:持续管理

最后,配置选项卡提供了对应用监视器设置和插桩代码片段的便捷访问,确保随着监控需求的发展,持续管理和更新保持简单明了。

图 10:AWS CloudWatch RUM – 配置选项卡

结论

Amazon CloudWatch RUM for Mobile 将移动应用可观测性从被动故障排除转变为主动优化,通过性能监控带来业务影响。团队可以识别并解决关键问题;例如导致区域崩溃的本地化错误或降低冷启动性能的第三方 SDK。与 CloudWatch Application Signals 的无缝集成支持从移动用户体验到后端依赖项的端到端跟踪。

此功能在 CloudWatch RUM 运营的所有商业区域都可用。该实现允许团队在维护现有开发工作流程的同时收集性能数据,通过从用户会话到应用堆栈的跟踪指标,改变组织处理移动应用开发的方式。

要了解更多关于此新功能的信息,请访问文档。同时查看 AndroidiOS 的入门指南。最后,定价详情可在定价页面找到。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计