Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

Performance Monitoring データの BigQuery へのエクスポート

Performance Monitoring データを iOS アプリと Android アプリから BigQuery にエクスポートして、詳細に分析できます。BigQuery では、BigQuery SQL を使用してデータを分析できるほか、別のクラウド プロバイダにデータをエクスポートしたり、データをカスタム ML モデルで使用したりできます。

BigQuery エクスポートを有効にする

  1. Firebase コンソールの [統合] ページに移動し、[BigQuery] カードの [リンク] をクリックします。

  2. 画面上の指示に従って BigQuery を有効にします。

プロジェクトを BiqQuery にリンクすると、次のようになります。

  • Firebase は BigQuery に既存データのコピーをエクスポートします。

    • 最初にプロジェクトをリンクする際、Firebase は BigQuery テーブルに過去 7 日間のデータがバックフィルされるよう自動的にスケジュール設定するため、テストを直ちに開始できます。初期データは数時間後に BigQuery で利用できるようになります。

    • 過去 30 日間のデータ バックフィルは手動でスケジュールすることも可能です。

  • Firebase は、Firebase プロジェクトから BigQuery へのデータの毎日の同期を設定します。

  • デフォルトでは、プロジェクト内のすべてのアプリが BigQuery にリンクされ、後からプロジェクトに追加するアプリもすべて BigQuery に自動的にリンクされます。データを送信するアプリを管理することもできます。

BigQuery エクスポートを無効にするには、Firebase コンソールでプロジェクトのリンクを解除します。

BigQuery にエクスポートされるデータの概要

プロジェクトの各アプリについて、データのエクスポートにより、キャプチャされたすべてのパフォーマンス イベントを含むテーブルが作成されます。テーブル内の各行は、次のいずれかのパフォーマンス イベントに対応しています。

  • 所要時間トレース - デフォルトではアプリの起動、フォアグラウンドのアプリ、バックグラウンドのアプリを含む「期間」の指標と、デベロッパーのインストゥルメント化されたカスタムコード トレースを収集するトレース。

    • event_typeDURATION_TRACE
    • event_name はトレース名と同じです
  • トレース指標 - デベロッパーがインストゥルメント化したカスタムコード トレースに関連付けられているカスタム指標

    • event_typeTRACE_METRIC
    • event_name は指標の名前です
    • parent_trace_name はこの指標を含むトレース名です
  • 画面トレース - 画面の存続時間にわたるトレース(画面レンダリング トレース)

    • event_typeSCREEN_TRACE
    • event_name はプレフィックス _st_ と実際の画面名です
  • ネットワーク リクエスト - ネットワーク リクエストの存続時間にわたるトレース(HTTP ネットワーク リクエスト トレース)

    • event_typeNETWORK_REQUEST
    • event_name はネットワーク リクエストの URL の分類済みパターンです

各パフォーマンス イベントには、イベントの属性(クライアント デバイスの国や通信会社など)とイベント固有の情報が含まれています。

  • 所要時間トレース、トレース指標、画面トレースには trace_info が含まれています
  • トレース指標には trace_info.metric_info が含まれています
  • 画面トレースには trace_info.screen_info が含まれています
  • ネットワーク トレースには network_info が含まれています

詳細なデータスキーマ

フィールド名 説明
event_timestamp timestamp クライアント デバイスでイベント(トレース開始、ネットワーク開始など)が開始されたエポックを起点とするタイムスタンプ
app_display_version 文字列 アプリケーションの表示バージョン(4.1.7 など)
  • Android の場合 - VersionName
  • iOS の場合 - CFBundleShortVersionString
app_build_version 文字列 アプリケーションのビルド バージョン(1523456 など)
  • Android の場合 - VersionCode
  • iOS の場合 - CFBundleVersion
os_version 文字列 クライアント デバイスの OS バージョン
  • Android の場合 - Android API レベル(26 など)
  • iOS の場合 - iOS バージョン(11.4 など)
device_name 文字列 クライアント デバイスの名前(「Google Pixel」など)
country 文字列 イベントが発生した国の 2 文字の国コード(たとえば「US」など。不明な国の場合は「ZZ」)
carrier 文字列 クライアント デバイスの通信会社
radio_type 文字列 イベントが発生したときの有効な無線通信のタイプ(「WIFI」など)
custom_attributes ARRAY<RECORD> このイベントに関連付けられているすべてのカスタム属性
custom_attributes.key 文字列 カスタム属性のキー
custom_attributes.value 文字列 カスタム属性の値
event_type 文字列 イベントのタイプ。取りうる値:
  • DURATION_TRACE - デフォルトではアプリの起動、フォアグラウンドのアプリ、バックグラウンドのアプリを含む「期間」の指標と、デベロッパーのインストゥルメント化されたカスタムコード トレースを収集するトレース。
  • SCREEN_TRACE - 画面の存続時間にわたるトレース(画面レンダリング トレース)
  • TRACE_METRIC - デベロッパーがインストゥルメント化したカスタムコード トレースに関連付けられているカスタム指標
  • NETWORK_REQUEST - ネットワーク リクエストの存続時間にわたるトレース(HTTP ネットワーク リクエスト トレース)
event_name 文字列 イベント名
  • DURATION_TRACE の場合 - トレース名
  • TRACE_METRIC の場合 - カスタム指標名
  • SCREEN_TRACE の場合 - _st_ にトレース名が続く
  • NETWORK_REQUEST の場合 - ネットワーク リクエストの URL パターン
parent_trace_name 文字列 トレース指標を保持する親トレースの名前
TRACE_METRIC の場合のみ存在
trace_info RECORD DURATION_TRACESCREEN_TRACETRACE_METRIC の場合のみ表示される
trace_info.duration_us int64
  • DURATION_TRACESCREEN_TRACE の場合 - トレースの開始から終了までの時間(「期間」)
  • TRACE_METRIC の場合 - 親トレースの開始から終了までの時間(「期間」)
単位: マイクロ秒
trace_info.screen_info RECORD SCREEN_TRACE の場合のみ表示される
trace_info.screen_info.slow_frame_ratio float64 0~1 の範囲の値で、画面トレースにおける低速フレームの割合を示す(たとえば、値が 0.05 である場合は、この画面インスタンスのフレームの 5% が、レンダリングに 16 ms を超える時間を要したことを示しています)
trace_info.screen_info.frozen_frame_ratio float64 0~1 の範囲の値で、画面トレースにおいてフリーズしたフレームの割合を示す(たとえば値が 0.05 である場合は、この画面インスタンスのフレームの 5% が、レンダリングに 700 ms を超える時間を要したことを示しています)
trace_info.metric_info RECORD TRACE_METRIC の場合のみ表示される
trace_info.metric_info.metric_value int64 トレース指標の値
network_info RECORD NETWORK_REQUEST の場合のみ表示される
network_info.response_code int64 ネットワーク レスポンスの HTTP レスポンス コード(200、404 など)
network_info.response_mime_type 文字列 ネットワーク レスポンスの MIME タイプ(「text/html」など)
network_info.request_http_method 文字列 ネットワーク リクエストの HTTP メソッド(「GET」、「POST」など)
network_info.request_payload_bytes int64 ネットワーク リクエストのペイロードのサイズ
単位: バイト
network_info.response_payload_bytes int64 ネットワーク レスポンスのペイロードのサイズ
単位: バイト
network_info.request_completed_time_us int64 ネットワーク リクエストの送信が完了した event_timestamp 以後の経過時間
単位: マイクロ秒
network_info.response_initiated_time_us int64 ネットワーク レスポンスが開始した event_timestamp 以後の経過時間
単位: マイクロ秒
network_info.response_completed_time_us int64 ネットワーク レスポンスが完了した event_timestamp 以後の経過時間
単位: マイクロ秒

エクスポートされたデータで可能な操作

以下のセクションでは、エクスポートした Performance Monitoring データに対して BigQuery で実行できるクエリの例を示します。

平均アプリ起動レイテンシの国別表示

SELECT AVG(trace_info.duration_us), country
FROM `TABLE_NAME`
WHERE _PARTITIONTIME > TIMESTAMP("YYYY-MM-DD")
AND event_type = "DURATION_TRACE"
AND event_name = "_app_start"
GROUP BY 2;

さまざまな条件下におけるフリーズしたフレームの比率の確認

たとえば、さまざまな無線のタイプ(Wi-Fii、4G など)ごとに、フリーズしたフレームの比率や、ユーザーがアプリの各画面に留まった時間を確認できます。

SELECT
  AVG(trace_info.duration_us / 1000000) AS seconds_on_screen,
  AVG(trace_info.screen_info.frozen_frame_ratio) AS frozen_frame_ratio,
  event_name,
  radio_type
FROM `TABLE_NAME`
WHERE _PARTITIONTIME > TIMESTAMP("YYYY-MM-DD")
AND event_type = "SCREEN_TRACE"
GROUP BY event_name, radio_type
ORDER BY event_name, radio_type;

特定のファイルタイプをディスクから読み込む際のキャッシュ ヒット率の計算

この分析を行うには、file-extension というカスタム属性と cache-hit というカスタム指標(TRACE_METRIC)を使用して、ディスク読み込み用のカスタムコード トレースをインストゥルメント化しておく必要があります。このカスタム指標は、キャッシュ ヒットの場合は 1、キャッシュミスの場合は 0 に設定されます。

たとえば、ディスクから PNG ファイルを読み込む場合のキャッシュ ヒット率は、以下のように計算できます。

SELECT AVG(trace_info.metric_info.metric_value) AS cache_hit_rate
FROM `TABLE_NAME`
WHERE _PARTITIONTIME > TIMESTAMP("YYYY-MM-DD")
AND event_type = "TRACE_METRIC"
AND event_name = "cache-hit"
AND parent_trace_name = "loadFromDisk"
AND STRUCT("file-extension", "png") IN UNNEST(custom_attributes);

ユーザーがネットワーク リクエストを発行した時刻の確認

たとえば、米国のユーザーがアプリからネットワーク リクエストを発行する時刻は、以下のようにして確認できます。

SELECT
  count(1) AS hourly_count,
  EXTRACT(HOUR FROM event_timestamp) AS hour_of_day
FROM `TABLE_NAME`
WHERE _PARTITIONTIME > TIMESTAMP("YYYY-MM-DD")
AND event_type = "NETWORK_REQUEST"
AND country = "US"
GROUP BY 2 ORDER BY 2;

Performance Monitoring データのさまざまな場所への移動

必要に応じて、サーバー側で Performance Monitoring データにアクセスしたり、サードパーティ ソリューションに Performance Monitoring データを push したりできます。現時点では、データのエクスポートは無料です。

データをエクスポートする方法は次のとおりです。

  • BigQuery ウェブ UI を使用する

  • CLI コマンド bq extract を実行する

  • API またはクライアント ライブラリを介して抽出ジョブを送信する

料金

Performance Monitoring からのデータのエクスポートには料金がかかりません。BigQuery には無料で使用できる上限枠があります。詳細については、BigQuery の料金または BigQuery サンドボックスをご覧ください。