Amazon CloudWatch RUM 新增移动应用监控支持:iOS与Android全平台可观测性

本文详细介绍了Amazon CloudWatch RUM新推出的移动应用监控功能,涵盖Android与iOS平台的具体集成步骤、SDK配置方法,以及如何在控制台中可视化性能、错误和会话数据以实现主动的应用性能优化。

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

我们很高兴地宣布 Amazon CloudWatch RUM 已支持移动设备。这意味着 AWS 的实时用户监控功能现在扩展到了 iOS 和 Android 应用程序。过去仅用于 Web 应用程序的监控工具现在也可供移动开发者使用。

随着移动设备在日常生活中变得越来越重要,确保移动应用的最佳性能和用户体验也变得前所未有的重要。然而,移动应用的监控面临着设备、操作系统、应用版本、网络和用户交互多样性的独特挑战。移动应用开发者持续面临着“在测试中完美运行,但在生产环境中出现性能问题”的挑战。综合测试和传统的监控方法可以提供关于实际性能的洞察,但缺乏理解最终用户体验所需的数据。这正是 CloudWatch RUM Mobile 的用武之地,它可以收集有关移动应用在真实用户手中如何表现的深度洞察指标。

面向移动设备的 Amazon CloudWatch RUM

面向移动设备的 Amazon CloudWatch RUM 帮助您在最终用户使用移动应用时,收集至关重要的性能数据和用户行为指标。通过将轻量级 SDK 集成到 Android 或 iOS 应用中,您可以捕获关于应用性能、用户交互以及影响用户体验的潜在问题的丰富信息。

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

变革开发流程的主要优势

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

变革是立竿见影的。您无需再等待用户投诉或尝试复现 bug,而是在用户每次与应用交互时,都能获得关于他们具体体验的清晰、可行的洞察。

入门指南:强化移动监控之路

Android 应用程序监视器的设置

首先,您需要创建一个“应用程序监视器”。为此,请打开 AWS CloudWatch 控制台,导航至 Application Signals,然后选择 RUM。接着点击“Add app monitor”。

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

您将看到两个新选项:“Android”和“iOS”。在“App monitor name”下为您的应用监视器命名,选择“Android”或“iOS”作为平台并继续(这里我们选择 Android)。

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

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

  • 如果希望 Amazon CloudWatch Logs 能够使用 RUM 遥测数据,请勾选“Data Storage”选项
  • 如果想使用基于资源的策略控制访问,请勾选“Attach a public Resource Based Policy”
  • 如果希望 X-Ray 能够使用跨度数据,请勾选“Active tracing”选项

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

点击“Add app monitor”完成。

控制台会提供一个代码片段,您需要将其添加到 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 Agent - includes automatic instrumentation
    implementation("software.amazon.opentelemetry.android:agent:1.0.0")

    // Automated HTTP client instrumentation with byteBuddy (optional but recommended)
    byteBuddy("io.opentelemetry.android.instrumentation:okhttp3-agent:0.15.0-alpha")// if you are using OkHttp-3.0
    byteBuddy("io.opentelemetry.android.instrumentation:httpurlconnection-agent:0.15.0-alpha") // if you are using 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
  },

  // optional attributes that will be appended to all OpenTelemetry application spans and events
  "otelResourceAttributes": {
     "service.name": "<your_app>", // 注意:请更新为您的应用名称
     "service.version": "1.0.0" // 指定 service.version 将允许您根据运行中的应用版本在 RUM 控制台筛选遥测数据
  }
}

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

选项 2:手动检测

要通过编程方式配置客户端,请使用轻量级的 core 模块来替代选项 1 中的 agent 模块。我们需要在应用的 app/build.gradle 文件中添加以下 SDK:

 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")

     // Automated HTTP client instrumentation with ByteBuddy (optional but recommended)
     byteBuddy("io.opentelemetry.android.instrumentation:okhttp3-agent:0.15.0-alpha")
     byteBuddy("io.opentelemetry.android.instrumentation:httpurlconnection-agent:0.15.0-alpha")
}

接下来,需要在应用中初始化 AWS Distro for OpenTelemetry (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"
        <!-- All other attributes, activities, etc -->
         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
// In your package dependencies:
dependencies: [
     .package(url: "https://github.com/aws-observability/aws-otel-swift.git", .upToNextMajor(from: "1.0.0"))
]

// In your target dependencies:
targets: [
    .target(
         name: "<YourAppTarget>",
         dependencies: [
             // Only for automatic initialization
            .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
// In your package dependencies:
dependencies: [
     .package(url: "https://github.com/aws-observability/aws-otel-swift.git", .upToNextMajor(from: "1.0.0"))
]

// In your target dependencies:
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 开始收集数据时,CloudWatch RUM 就会成为移动性能的指挥中心,提供多个专门的视图,将原始性能数据转化为可操作的洞察。

从显示的 RUM 应用监视器列表中,选择上一节创建的应用监视器。这将显示一个包含性能、错误、会话、指标、配置等不同标签页的仪表板,并提供按屏幕、应用版本、操作系统版本、设备、国家、地区、地理位置进行筛选的功能。

  • 性能标签页:速度与响应能力的详细分析 CloudWatch RUM 控制台的性能标签页提供关于移动应用性能的洞察。这个详细视图按屏幕名称、操作系统版本、应用版本、设备、国家/地区分类显示屏幕加载时间。以前看不到的模式会变得清晰。例如,由于网络基础设施的差异,特定国家/地区的应用性能可能不同,或者特定设备型号在某些功能上运行吃力。点击图表中的屏幕加载时间数据点会在右侧打开一个诊断面板,提供与该数据点相关的详细洞察(例如最新的相关会话),并提供指向会话标签页的链接,用于对一个或多个类似会话进行故障排除。 App Launch time 视图详细分析应用的启动性能,按启动类型(冷/热)、操作系统版本、应用版本、设备、国家/地区对启动时间进行分类。这个详细视图有助于识别性能瓶颈,例如特定操作系统版本的冷启动较慢,或特定设备型号在初始化时遇到困难,从而针对影响最大的用户群进行优化。 Locations 标签页提供了应用性能的地理洞察,显示国家、地区、地理区域间的指标,揭示基于位置的性能模式。此视图有助于识别区域基础设施挑战、网络延迟问题,或用户遇到性能下降的地理区域。 图 5: AWS CloudWatch RUM – 性能标签页

  • 错误标签页:调试的得力助手 错误标签页将错误跟踪转化为系统性的问题解决。它将应用问题分为三个类别:网络错误、崩溃、ANR/应用挂起。 网络错误标签页包含一个折线图,显示 HTTP 请求的 HTTP 性能指标,左 Y 轴显示故障率(HTTP 错误、HTTP 故障、网络故障),右 Y 轴显示 HTTP 延迟。这些时间序列数据点允许用户点击,在诊断面板中查看相关跨度和会话以进行故障排除。底部的表格列出了最常见的 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 将移动应用的可观测性从被动故障排除转变为主动优化,通过性能监控带来业务影响。团队可以识别并解决关键问题,例如导致区域性崩溃的本地化 bug,或影响冷启动性能的第三方 SDK 等。与 CloudWatch Application Signals 的无缝集成支持从移动用户体验到后端依赖项的端到端跟踪。

此功能在 CloudWatch RUM 运营的所有商业区域均可用。通过此实现,团队可以在保持现有开发工作流程的同时收集性能数据,利用来自应用堆栈各个层面被跟踪用户会话的指标,改变组织进行移动应用开发的方式。

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