將 Performance Monitoring 資料匯出至 BigQuery

您可以將 Apple 和 Android 應用程式的 Performance Monitoring 資料匯出至 BigQuery,以利進一步分析。BigQuery 可讓您使用 BigQuery SQL 分析資料、將資料匯出至其他雲端服務供應商,甚至將資料用於自訂機器學習模型。

啟用 BigQuery 匯出功能

  1. 前往 Firebase 控制台的「整合」頁面,然後在「BigQuery」資訊卡中按一下「連結」

  2. 按照畫面上的指示啟用 BigQuery

    Performance Monitoring 啟用 BigQuery 匯出功能時,會發生下列情況:

    • Firebase 會將現有資料的副本匯出BigQuery。匯出資料的初始傳播作業最多可能需要 48 小時才能完成。

    • 建立資料集後,該資料集的位置就無法再變更,不過您可以將資料集複製到其他位置,或將資料集手動移動 (重新建立) 至其他位置。詳情請參閱「變更資料集位置」。

    • Firebase 會定期將資料從 Firebase 專案同步至 BigQuery。這些每日匯出作業通常會在排定時間後的 24 小時內完成。

    • 根據預設,專案中的所有應用程式都會連結至 BigQuery。您之後才加進專案的應用程式,也會自動連結至 BigQuery。您可以管理要傳送資料的應用程式

如要停用 BigQuery 匯出功能,請在 Firebase 控制台中取消連結專案

匯出至 BigQuery 的資料有哪些?

針對專案中的每個應用程式,匯出作業會建立包含所有擷取的效能事件的資料表。表格中的每一列都是單一成效事件,可分為下列任一類別:

  • 時間長度追蹤記錄:根據預設,會收集「時間長度」指標的追蹤記錄,包括應用程式啟動、應用程式在前景、應用程式在背景,以及任何開發人員用儀表板收集的自訂程式碼追蹤記錄

    • event_type」現為「DURATION_TRACE
    • event_name 與追蹤名稱相同
  • 追蹤記錄指標:與開發人員檢測的自訂程式碼追蹤記錄相關的自訂指標

    • event_type」現為「TRACE_METRIC
    • event_name 是指標的名稱
    • parent_trace_name 是包含此指標的追蹤記錄名稱
  • 畫面追蹤記錄:涵蓋畫面生命週期的追蹤記錄 (畫面轉譯追蹤記錄)

    • event_type」現為「SCREEN_TRACE
    • event_name 是前置字串 _st_ 加上實際的畫面名稱
  • 網路要求:涵蓋網路要求整個生命週期的追蹤記錄 (HTTP 網路要求追蹤記錄)

    • event_type」現為「NETWORK_REQUEST
    • event_name 是網路要求網址的類別模式

每個成效事件都包含事件屬性 (例如用戶端裝置的國家/地區和電信業者),以及事件專屬資訊:

  • 時間長度追蹤記錄、追蹤指標和畫面追蹤記錄包含 trace_info
  • 追蹤記錄指標包含 trace_info.metric_info
  • 畫面追蹤記錄包含 trace_info.screen_info
  • 網路追蹤記錄包含 network_info

詳細資料結構定義

欄位名稱 類型 說明
event_timestamp 時間戳記 事件在用戶端裝置上開始時的時間戳記 (從 Epoch 紀元時間算起) (追蹤開始、網路開始等)
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」)
國家/地區 字串 事件發生國家/地區的雙字母國家/地區代碼 (例如「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:網路要求網址模式
parent_trace_name 字串 載入追蹤指標
的父追蹤記錄名稱 僅適用於 TRACE_METRIC
trace_info RECORD 僅適用於 DURATION_TRACESCREEN_TRACETRACE_METRIC
trace_info.duration_us int64
  • 針對 DURATION_TRACESCREEN_TRACE:從追蹤記錄開始到結束的時間長度 (「duration」)
  • 對於 TRACE_METRIC:從父追蹤記錄的開頭到結尾的時間長度 (「duration」)
單位:微秒
trace_info.screen_info RECORD 僅適用於 SCREEN_TRACE
trace_info.screen_info.slow_frame_ratio float64 此畫面追蹤記錄的緩慢畫格比率,介於 0 和 1 之間 (例如,值為 0.05 表示此畫面例項的 5% 畫格顯示時間超過 16 毫秒)
trace_info.screen_info.frozen_frame_ratio float64 此畫面追蹤記錄的凍結畫面比率,介於 0 和 1 之間 (例如,值為 0.05 表示此畫面執行個體的 5% 畫面顯示時間超過 700 毫秒)
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 之後)
單位:微秒

匯出的資料可做什麼用途?

以下各節提供查詢範例,您可以在 BigQuery 中針對匯出的 Performance Monitoring 資料執行這些查詢。

比對控制台中顯示的資料

Firebase 資訊主頁會匯總 America/Los_Angeles 時區的每日資料。為符合控制台顯示的內容,日期函式應明確將 America/Los_Angeles 設為時區,否則日期函式會預設為使用世界標準時間

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-Fi、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 資料,或將資料推送至其他第三方解決方案。目前匯出資料不收費。

你可以透過下列方式匯出資料:

  • 使用 BigQuery 網頁版 UI

  • 執行 CLI 指令 bq extract

  • 透過 API 或用戶端程式庫提交擷取工作

定價

Performance Monitoring 匯出資料不會產生費用,而且 BigQuery 提供豐富的免費使用限制。如需詳細資訊,請參閱 BigQuery 定價BigQuery 沙箱