クライアントサイドアプリ

スマートフォン、デスクトップ、小売キオスクなどのデバイスで動く、エンドユーザーが操作するアプリで OpenTelemetry を使用します。

サーバーサイドのワークロードと比較して、クライアントサイドのアプリケーションは、オブザーバビリティにおける特有の課題があります。 こうしたアプリは、あなたが管理できないデバイス上で動作し、ネットワーク条件、ハードウェア性能、ユーザーの振る舞いもさまざまです。

なぜクライアントサイドのオブザーバビリティが重要なのか

従来のサーバーサイドモニタリングは、バックエンドシステムの可視化には役立ちますが、ユーザー体験の全体像までは捉えきれません。 クライアントサイドのオブザーバビリティは、以下のことができます。

  • 実際のユーザー体験を把握する: ユーザーが体験する実際の読み込み時間、フレームレート、応答性を確認できます。
  • コンテキストに沿って問題をデバッグする: デバイスの特性やネットワーク条件、ユーザーの操作とエラーを紐づけられます。
  • エンドツーエンドのトランザクションを追跡する: クライアントサイドの処理とバックエンドのトレースをつなぎ、完全な分散トレースを実現します。
  • アプリの健全性を大規模に監視する: ユーザーベース全体のテレメトリーを集約し、パターンや傾向を特定できます。

サーバーサイドの計装との主な違い

クライアントアプリを計装する場合、以下の点を考慮してください。

  • リソース制約: モバイル端末やブラウザは、CPU やメモリ、バッテリーに限りがあります。 テレメトリーの収集は効率的に行い、アプリのパフォーマンスに悪影響を与えないようにします。
  • ネットワークの変動性: ユーザーのネットワーク環境は、低速、断続的、またはオフラインである可能性があります。 ネットワークの不安定さに備え、オフラインバッファリングとバッチエクスポートを実装します。
  • セッション管理: ユーザーセッションを追跡し、関連するテレメトリーをまとめます。 複数のアプリ起動にまたがるユーザージャーニーも把握しやすくなります。
  • プライバシーと同意: クライアントアプリは、プライバシー規制の対象となるデータを収集することがよくあります。 データ最小化、同意の管理、属性の削除を計画します。
  • データ量: ユーザー数が数百万規模になりうる場合、コストを抑えつつ代表的なテレメトリーを保持するには、サンプリング戦略が不可欠になります。

リアルユーザーモニタリング (RUM)

OpenTelemetry は、実際のユーザーがアプリケーションをどのように体験しているかを把握するリアルユーザーモニタリング(RUM)パターンをサポートしています。

  • ページ / 画面の読み込み性能: 最初のバイトや最初のコンテンツ描画、読み込み完了までの時間。
  • ユーザー操作: クリックイベントや画面遷移のパターン、フォーム送信。
  • エラーとクラッシュ: 未処理の例外や ANR イベント、エラー率。
  • リソースの読み込み: ネットワークリクエストの所要時間やキャッシュヒット率、リソースサイズ。

バックエンドとの接続

クライアントテレメトリーは、バックエンドのトレースと結びつけられたときに最も価値が出ます。 HTTP リクエストにトレースコンテキストを伝搬させ、エンドツーエンドで見えるようにします。

クライアントアプリ → API ゲートウェイ → バックエンドサービス → データベース
      │                 │                 │                │
      └─────────────────┴─────────────────┴────────────────┘
                          関連するトレース

クライアント SDK でトレースヘッダー (traceparent, tracestate) を付与するよう設定し、バックエンドサービスの各処理でもこのコンテキストを伝搬するようにします。


Android

iOS

Use OpenTelemetry in apps running on iOS and iPadOS

Web

ウェブブラウザ上で動作するアプリで OpenTelemetry を使う