Cloud Service
Amazon CloudWatch RUM
実ユーザーの体感を計測し、フロントエンドの遅さやエラーを発生箇所ごとに把握。ブラウザから収集したパフォーマンスと JavaScript エラーを可視化する Real User Monitoring(GCP の Web Vitals 計測などに相当)。
- 1.実際のブラウザ上の表示速度・エラー・操作を計測しユーザー体感を可視化する。
- 2.Core Web Vitals やページ読み込み時間を端末・ブラウザ・地域別に分析できる。
- 3.X-Ray と連携してフロントの遅延からバックエンドのトレースまで追える。
解決する課題
サーバー側のメトリクスが正常でも、ユーザーのブラウザでは「表示が遅い」「ボタンが効かない」「特定の端末だけ JavaScript エラーが出る」といった問題が起きます。サーバー側だけを見ても、実際の利用者がどんな体感をしているかはわかりません。CloudWatch RUM(Real User Monitoring)は:
- 実際の Web ページに埋め込んだコードで、本物のユーザーの体感を計測する
- ページ読み込み時間や Core Web Vitals を、端末・ブラウザ・地域別に分解して把握する
- フロントエンドで起きた JavaScript エラーやリクエスト失敗の発生箇所を切り分ける
主要概念と用語
- RUM(Real User Monitoring): 実際の利用者のブラウザから収集する計測手法。合成監視(決まった経路を自動巡回する手法)と対比される
- アプリモニター: 計測対象の Web アプリ単位の設定。収集するデータ種別やサンプリング率を持つ
- Web クライアント: ページに読み込む JavaScript スニペット。表示速度やエラー、ユーザー操作を収集して送信する
- Core Web Vitals: 表示の体感品質を示す指標群(最大コンテンツ描画・入力応答性・レイアウトの安定性など)
- セッション: 1人のユーザーがサイトを操作する一連の流れ。ページ遷移やイベントがひも付く
- サンプリング率: 全セッションのうちどれだけを記録するかの割合。記録量とコストを制御する
- テレメトリ: 収集対象の種類。パフォーマンス、エラー、HTTP リクエスト、ユーザー操作などを選んで有効化する
- Cognito ID プール: ブラウザの Web クライアントに、データ送信用の一時的な権限を与える仕組み
仕様・制限・クォータ
- 計測データは CloudWatch のメトリクスとして集計され、ダッシュボードやアラームから扱える
- 収集データには保持期間があり、一定期間を過ぎた古いイベントは参照できなくなる
- アプリモニターやサンプリング率、収集できるイベント量には上限がある
- 主要なブラウザを対象とするが、計測コードを読み込めない環境(古いブラウザや無効化された JavaScript)では収集できない
- リージョン単位でデータを保持する
全セッションを記録すると送信イベント量とコストが増えます。トラフィックが多いサイトはサンプリング率を下げ、代表的なセッションだけを収集するのが基本です。
内部の仕組み
各 Web ページに Web クライアント(JavaScript スニペット)を読み込みます。クライアントはブラウザの標準 API(Performance API、エラーイベント、リソースタイミングなど)を使って表示速度・エラー・操作を計測し、まとめて RUM のエンドポイントへ送信します。送信時の認可には Cognito ID プールが発行する一時クレデンシャルを使います。
集まったイベントは RUM 側で集計され、ページや端末・ブラウザ・地域といった軸で分解できます。代表的な指標は CloudWatch メトリクスとして書き出されるため、ダッシュボードやアラームに組み込めます。さらに X-Ray と連携させると、フロントエンドのリクエストにトレース ID を付与し、遅延の原因をバックエンドのトレースまでたどれます。
Web クライアントの読み込みが遅れると、ページの初期表示に関わるイベントを取りこぼすことがあります。スニペットはできるだけ早い段階で読み込むよう配置します。
設計パターン / ベストプラクティス
- 必要なテレメトリだけ有効化: パフォーマンス・エラー・HTTP・操作のうち、知りたいものに絞って送信量を抑える
- サンプリング率を設計する: 重要な画面や少トラフィックなサイトは記録率を上げ、大量アクセスのページは下げる
- X-Ray と連携: フロントの遅延を起点に、バックエンドのトレースへつなげて原因を深掘りする
- アラームと組み合わせ: 体感指標が悪化したらしきい値で通知し、リリース直後のリグレッションを早期に検知する
- 合成監視と併用: RUM で実ユーザーの傾向を、合成監視(CloudWatch Synthetics)で定常的な可用性を見る
運用・監視
- ページ別・端末別・ブラウザ別に分解し、特定の組み合わせだけ遅い/エラーが多い箇所を起点に調査する
- Core Web Vitals の悪化や JavaScript エラー率の上昇をアラームで検知する
- デプロイ前後で体感指標を比較し、リリースによる劣化(リグレッション)を見つける
- データが届かない場合は、Web クライアントの読み込み、Cognito ID プールの権限、アプリモニターの設定を順に確認する
コスト
- 課金は主に収集した RUM イベント数に基づく
- 一定量までの無料利用枠が用意されている
- トラフィックが多いサイトはサンプリング率を下げて収集量を抑えるのが基本
- 不要なテレメトリ(使わないユーザー操作の記録など)を無効化すると送信量を減らせる
セキュリティ
- Web クライアントには Cognito ID プール経由で最小権限の一時クレデンシャルを与え、データ送信のみを許可する
- 収集データに個人情報や機密値を入れない。URL のクエリ文字列にトークンが含まれる場合はマスクを検討する
- 許可するドメイン(送信元)を絞り、想定外のサイトからの送信を防ぐ
- 保存データは暗号化され、API 操作の監査は CloudTrail で記録する
ブラウザで動く Web クライアントが収集する値は、改ざんや漏えいのリスクがあります。認証トークンや個人情報を計測イベントに含めないよう注意します。
関連サービス・比較
決まったシナリオを自動で巡回する CloudWatch Synthetics とよく対比されます。実ユーザー計測の RUM と合成監視の Synthetics は競合ではなく補完関係です。
| 観点 | CloudWatch RUM | CloudWatch Synthetics |
|---|---|---|
| 計測対象 | 実ユーザーのブラウザ | 自動の合成リクエスト |
| わかること | 実際の体感とエラーの分布 | 定常的な可用性と所要時間 |
| 得意な問い | 利用者の体感は悪化した? | サイトは今ちゃんと動く? |
| 主な使いどき | フロント体感の継続改善 | 外形監視とアラート |
ハンズオン / CLI例
# アプリモニターを作成(収集データの種類とサンプリング率を指定)
aws rum create-app-monitor \
--name "my-web-app" \
--domain "example.com" \
--app-monitor-configuration '{
"AllowCookies": true,
"EnableXRay": true,
"SessionSampleRate": 0.2,
"Telemetries": ["performance", "errors", "http"]
}'
# 作成したアプリモニターの設定を確認
aws rum get-app-monitor --name "my-web-app"
AWS Service
Amazon CloudWatch RUMを実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
監視・オブザーバビリティ
比較で見る軸
クラウド: AWS / カテゴリ: 監視・オブザーバビリティ / 難易度: intermediate
導入後に効く点
Core Web Vitals やページ読み込み時間を端末・ブラウザ・地域別に分析できる。
先に潰すリスク
サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。
- クラウド
- AWS
- カテゴリ
- 監視・オブザーバビリティ
- 難易度
- intermediate
- 関連資格
- DVA-C02 / DOP-C02 / SOA-C02
- 設計柱
- operational / performance
判断チェックリスト
- 自社の用途が「監視・オブザーバビリティ / operational」に近いか確認する。
- 強みである「実際のブラウザ上の表示速度・エラー・操作を計測しユーザー体感を可視化する。」が本当に評価軸になるか確認する。
- 注意点の「サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。