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

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

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

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

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

    Performance MonitoringBigQuery エクスポートを有効にすると、次のようになります。

    • Firebase は BigQuery既存データのコピーをエクスポートします。エクスポートするデータの初回の読み込みには、最長で 48 時間かかる場合があります。

    • データセットの作成後はロケーションを変更できませんが、データセットを別のロケーションにコピーするか、データセットを別のロケーションに手動で移動(再作成)することはできます。詳細については、データセットのロケーションの変更をご覧ください。

    • Firebase は、Firebase プロジェクトから BigQuery へのデータの定期的な同期を設定します。通常、これらの毎日のエクスポート オペレーションは、スケジュールされてから 24 時間以内に完了します。

    • デフォルトでは、プロジェクト内のすべてのアプリが 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」など)
文字列 イベントが発生した国の 2 文字の国コード(たとえば「US」など。不明な国の場合は「ZZ」)
携帯通信会社 文字列 クライアント デバイスの通信会社
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 で実行できるクエリの例を示します。

コンソールに表示されるデータと一致させる

Firebase ダッシュボードでは、America/Los_Angeles タイムゾーンで 1 日分のデータを集計します。 コンソールに表示された内容と一致させるには、日付関数でタイムゾーンとして America/Los_Angeles を明示的に設定する必要があります。設定しない場合、日付関数はデフォルトで UTC を使用します。

SELECT
  DATE(event_timestamp, 'America/Los_Angeles') AS daily_date,
  APPROX_QUANTILES(trace_info.duration_us, 100)[OFFSET(90)] / 1000000 AS p90_seconds,
FROM `TABLE_NAME`
WHERE
  DATE(event_timestamp, 'America/Los_Angeles')
    >= DATE_SUB( PARSE_DATE('%Y%m%d', 'YYYY-MM-DD'), INTERVAL 7 DAY)
  AND DATE(event_timestamp, 'America/Los_Angeles')
    <= PARSE_DATE('%Y%m%d', 'YYYY-MM-DD')
  AND event_name = '_app_start'
GROUP BY 1
ORDER BY 1 DESC;

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

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 データにアクセスしたり、サードパーティ ソリューションにそのデータを push したりできます。現時点では、データのエクスポートは無料です。

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

  • BigQuery ウェブ UI を使用する

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

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

料金

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