はじめに
みなさん、長らく待望していたと思われる CloudWatch RUM が iOS / Android アプリに対応したので、今回は Android で試してみたいと思います。
リリースの内容をチェック
サービスアップデートの内容
Amazon CloudWatch RUM が iOS および Android アプリケーションをサポートし、リアルユーザーモニタリングを Web アプリケーションを超えて拡張しました。開発者や SRE は、画面読み込み時間、クラッシュ率、API 遅延などのパフォーマンス指標を可視化することで、モバイルアプリケーションの問題を迅速に特定し、エンドユーザー体験を向上させることができるようになりました。
モバイル向け CloudWatch RUM は、OpenTelemetry(OTEL)標準を使用してスパンとイベントを送信します。このサービスは、アプリケーション起動時間、画面読み込み時間、バックエンドネットワーク呼び出しなどのモバイルスパンを取得します。また、クラッシュや ANR / AppHang などのイベントも取得し、CloudWatch コンソールで豊富なトラブルシューティングインサイトを提供します。
特定のエラーやクラッシュに対する影響分析を実行し、相関するテレメトリにドリルダウンし、場所、デバイスタイプ、オペレーティングシステム、アプリバージョンでフィルタリングして、根本原因を迅速に特定することができます。モバイルテレメトリは、CloudWatch Application Signals のアプリケーション指標、トレース、ログ、Web RUM モニタリング、合成モニタリングと統合され、トラブルシューティングを高速化し、アプリケーションの中断を削減します。
iOS および Android 向けの CloudWatch RUM サポートは、Web モニタリングが利用可能なすべての AWS 商用リージョンで利用できます。詳細については、以下を参照してください。
- 料金: https://aws.amazon.com/jp/cloudwatch/pricing/
- Android: https://github.com/aws-observability/aws-otel-android?tab=readme-ov-file#aws-distro-for-opentelemetry---android
- iOS: https://github.com/aws-observability/aws-otel-swift?tab=readme-ov-file#aws-distro-for-opentelemetry-for-swift
- ドキュメント: https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-RUM-web-mobile.html#CloudWatch-RUM-mobile-monitoring
Android 向けの GitHub の内容
このリポジトリには、Android 向けの AWS Distro for OpenTelemetry(ADOT)が含まれています。これは以下のものを標準で提供するバンドルです。
- OpenTelemetry Java SDK(https://github.com/open-telemetry/opentelemetry-java)
- OpenTelemetry Android 自動計装(https://github.com/open-telemetry/opentelemetry-android)
- ANR、クラッシュ、Activity ライフサイクルなどのテレメトリ計装
- 現在 OpenTelemetry Android の上流に含まれていない追加の自動計装(「初回描画までの時間」テレメトリなど)
- AWS 固有のエクスポーターと認証設定(AWS CloudWatch RUM へのエクスポート時に標準で動作)
このディストリビューションは、AWS CloudWatch RUM とのシームレスな統合のために事前設定されています。
主な利点は以下の通りです。
- 最も一般的な Android テレメトリに対するゼロコード計装
- CloudWatch RUM および Application Signals との AWS ネイティブ統合
- 最小限のパフォーマンスオーバーヘッドで本番環境対応
- クラッシュ、ANR、UI パフォーマンス、ネットワークリクエストを含む包括的な監視
- プログラマティックおよび設定ファイル設定の両方をサポートする柔軟な構成
実装
CloudWatch RUM の準備
ドキュメントに従って進めます。
- CloudWatch コンソール を開きます。
- ナビゲーションペインで Application Signals、RUM を選択します。
- Add app monitor を選択します。
- App monitor name に名前を入力します。
- プラットフォームとして Android を選択します。
- Data storage の下で、RUM OTEL ログイベントとスパンのコピーを CloudWatch Logs に保存し、保持期間を設定することができます。デフォルトでは、CloudWatch Logs ロググループはデータを 30 日間保持します。保持期間は CloudWatch Logs コンソールで調整できます。
- Resource Based Policy の下で、Create public policy を選択し、誰でもアプリモニターにリクエストを送信できるリソースポリシーを作成します。
- Active tracing を選択し、Trace my service with AWS X-Ray を選択します。これにより、サンプリングされたユーザーセッション中に生成された OTEL スパンがトレースされます。これらのセッションからのトレースとスパンを RUM ダッシュボード、X-Ray トレースマップ、トレース詳細ページで確認できます。これらのユーザーセッションは、アプリケーションで Application Signals を有効にした後、クライアントページとしても表示されます。
- Add app monitor を選択します。
- Sample code セクションで、アプリケーションに追加するコードスニペットをコピーできます。今回は AWS Distro for OpenTelemetry(ADOT)SDK を使用して、Zero-Code Instrumentation を利用します。
- Copy または Download を選択し、Done を選択します。
コピーした内容は、Android アプリの実装時に利用します。(なお、Kiro の Vibe コーディングで指示するだけです)
なんと、実装はこれだけ完了です(自動計装すごい)。
まだ作成したばかりなので、トラフィックは反映されていません。
コードを実装
実装は Kiro を利用し、Spec 開発を行います。
CloudWatch RUM を計装して欲しいので、その旨も伝えて計装します。事前に Android 向けの実装方法について GitHub から README.md をダウンロードし、Spec 作成時に読むように指示しておきます。
今回作成するアプリは元々 Nuxt(SPA)と Ruby on Rails(API)でサービスを作成しています。そのため、Android アプリのデザインは Nuxt(SPA)と同等のものを利用し、API サーバーは Ruby on Rails をそのまま利用します。Kiro のプロジェクトではどちらも含むようにし、android というフォルダを作成して、そのフォルダ内で開発を進めるように指示しています。
Spec が作成されたら、とりあえず作成されたタスクをどんどん進めます。なお、途中で Android Studio を入れていなかったので指摘され、Android Studio のインストールも行なっています。
アプリの動作をチェック
動作チェックはエミュレータで行います。エミュレータを起動してアプリをインストール・実行する作業も Kiro で行なってもらいます。
エラーが出ていたので、画像を Kiro に渡して修正してもらいます。
修正完了。ログインもちゃんと行え、いい感じです。
CloudWatch RUM のダッシュボードをチェック
一通りシミュレーターを触ったので、次は CloudWatch RUM のコンソールをチェックします。
Performance > Screen load time
Performance > App Launch time
Performance > Locations
Errors
エラーのグラフをクリックすると Span も見れます。この辺りは Web RUM と変わりませんね。また、別のタブではクラッシュエラーやアプリケーション応答なし (ANR) エラーの詳細を確認することができます。エラーから関連するセッション、トレースを確認することも可能です。
Sessions
セッションを選択すると、下に詳しく出てきます。
トレースを選択すると、Traces 画面に遷移します。
Metrics
最後にトレースを見てみましたが、Rails とは線が繋がっていないようでした。Rails 側で正しくトレース ID を取得できていないようです。おそらく実装漏れだと思うので、分かり次第追記しようと思います。
まとめ
CloudWatch RUM が iOS と Android に対応したことで、Web だけでなくアプリ側でも計装できるようになり、ユーザー行動分析が AWS 上で簡単に行えるようになりました。特に、自動計装でも基本的に必要な情報を収集できる点は、簡単に導入できそうです。
また、クライアントエラーの監視も簡単にできるので、まだアプリ監視を入れていない場合はぜひ使ってみると良さそうでした。






















