您可以將 Firebase Crashlytics 資料匯出至 BigQuery,以進行進一步分析。BigQuery 讓您使用 BigQuery SQL 分析資料、將資料匯出至其他雲端供應商,以及使用 Google 數據分析製作視覺化圖表和自訂資訊主頁。
啟用匯出至「BigQuery」的功能
前往 Firebase 控制台的「整合」頁面。
在 BigQuery 資訊卡中,按一下「連結」。
按照畫面上的指示啟用匯出至 BigQuery 的功能。
如要在 BigQuery 中近乎即時地存取 Crashlytics 資料,建議升級至串流匯出。
啟用匯出功能後會怎麼樣?
選取資料集位置。建立資料集後,該資料集的位置就無法再變更,不過您可以將資料集複製到其他位置,或將資料集手動移動 (重新建立) 至其他位置。詳情請參閱「變更現有匯出作業的位置」。
這個位置僅適用於匯出至 BigQuery 的資料,不會影響儲存資料的位置,因此您仍可在 Firebase 控制台的 Crashlytics 資訊主頁或 Android Studio 中使用這些資料。
根據預設,您專案中所有的應用程式都會連結至 BigQuery,您之後才加進專案的應用程式也統統會自動與 BigQuery 連結。此外,您可以控管該讓哪些應用程式傳送資料。
Firebase 會設定每日將資料同步至 BigQuery。
連結專案後,通常需要等到隔天同步處理,第一組資料才會匯出至 BigQuery。
無論您在 BigQuery 中設定的排定匯出作業為何,系統每天都會執行一次每日同步作業。請注意,同步作業的時間和持續時間可能會變更,因此不建議根據匯出的特定時間安排下游作業或工作。
Firebase 會將現有資料副本匯出至 BigQuery。資料首次傳播以供匯出時,最多可能需要 48 小時。
針對每個連結的應用程式,這項匯出作業會包含一個批次資料表,內含每日同步處理的資料。
您可以手動排定資料回填作業,為批次資料表回填過去 30 天的資料或啟用匯出至 BigQuery 的最新日期資料 (以較近的日期為準)。
請注意,如果您在 2024 年 10 月中旬前啟用 Crashlytics 資料匯出功能,也可以回填啟用匯出功能前 30 天的資料。
如果啟用Crashlytics串流匯出至 BigQuery,所有連結的應用程式也會有即時資料表,內含持續更新的資料。
如要停用匯出至 BigQuery 的功能,請在 Firebase 控制台中取消連結專案。
哪些資料會匯出至 BigQuery?
Firebase Crashlytics資料會匯出至名為「firebase_crashlytics
」的BigQuery資料集。根據預設,系統會在 Crashlytics 資料集中,為專案中的每個應用程式建立個別資料表。Firebase 會依據應用程式的 ID 來命名資料表,同時會將句號轉換為底線,並將平台名稱附加到結尾處。
舉例來說,套件名稱為 com.google.test
的 Android 應用程式資料會位於名為 com_google_test_ANDROID
的資料表中。這個批次資料表每天更新一次。如果啟用Crashlytics串流匯出至 BigQuery,系統也會將Crashlytics資料即時串流至名為 com_google_test_ANDROID_REALTIME
的資料表。
表格中的每一列都代表應用程式中發生的事件,包括當機、非重大錯誤和 ANR。
Crashlytics串流匯出至 BigQuery
您可以透過BigQuery串流即時串流 Crashlytics 資料。 您可以使用這項功能處理任何需要即時資料的用途,例如在即時資訊主頁中呈現資訊、觀看發布作業的即時情況,或是監控會觸發快訊和自訂工作流程的應用程式問題。
啟用Crashlytics串流匯出至 BigQuery 後,除了批次資料表,您還會取得即時資料表。以下是您應注意的資料表差異:
批次資料表 | 即時表格 |
---|---|
|
|
批次資料表適合長期分析及找出一段時間內的趨勢,因為系統會先永久儲存事件,再寫入資料表,且最多可回填 30 天的資料*。當我們將資料寫入即時資料表時,會立即將資料寫入 BigQuery,因此非常適合用於即時資訊主頁和自訂快訊。這兩個資料表可以透過縫合查詢合併,同時享有兩者的優點。
根據預設,即時資料表的分割區到期時間為 30 天。如要瞭解如何修改這項設定,請參閱 BigQuery 說明文件中的「設定分割區到期時間」。
* 如要瞭解回填支援的詳細資訊,請參閱「升級至新的匯出基礎架構」。
啟用 Crashlytics 串流匯出至 BigQuery
前往 Firebase 控制台的「整合」頁面。
在 BigQuery 資訊卡中,按一下「管理」。
勾選「包含串流」核取方塊。
這項操作會為所有連結的應用程式啟用串流功能。
匯出資料的用途
匯出至 BigQuery 的檔案包含原始當機資料,包括裝置類型、作業系統、例外狀況 (Android 應用程式) 或錯誤 (Apple 應用程式),以及 Crashlytics 記錄和其他資料。
如要瞭解匯出的 Crashlytics 資料和資料表結構定義,請參閱本頁稍後的內容。
使用數據分析範本
如要在數據分析範本中啟用即時資料,請按照「使用數據分析視覺化匯出的 Crashlytics 資料」一文中的操作說明進行。
建立檢視表
您可以使用 BigQuery UI 將查詢轉換為檢視區塊。 如需詳細操作說明,請參閱建立檢視區塊一文的BigQuery說明文件。
執行查詢
下列範例示範您可以在 Crashlytics 資料上執行的查詢,產生報表並將當機事件資料匯總至更容易理解的摘要中。由於這些類型的報表無法在 Firebase 控制台的 Crashlytics 資訊主頁中查看,因此可用於補充分析,並協助您瞭解當機資料。
範例 1:每日當機次數
在盡力修正錯誤後,您認為團隊終於可以推出新的相片分享應用程式。不過,您想先查看過去一個月內每天當機的次數,確認這段時間排除錯誤的確讓應用程式變得更穩定。
以下是 Android 應用程式的查詢範例。如果是 iOS 應用程式,請使用軟體包 ID 和 IOS
(而非套件名稱和 ANDROID
)。
SELECT COUNT(DISTINCT event_id) AS number_of_crashes, FORMAT_TIMESTAMP("%F", event_timestamp) AS date_of_crashes FROM `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID` GROUP BY date_of_crashes ORDER BY date_of_crashes DESC LIMIT 30;
範例 2:找出最普遍的當機問題
為了適當排定生產計畫的優先順序,您想找出應用程式中最常出現的 10 大當機問題,因此產生查詢,提供相關資料點。
以下是 Android 應用程式的查詢範例。如果是 iOS 應用程式,請使用軟體包 ID 和 IOS
(而非套件名稱和 ANDROID
)。
SELECT DISTINCT issue_id, COUNT(DISTINCT event_id) AS number_of_crashes, COUNT(DISTINCT installation_uuid) AS number_of_impacted_user, blame_frame.file, blame_frame.line FROM `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID` WHERE event_timestamp >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(),INTERVAL 168 HOUR) AND event_timestamp < CURRENT_TIMESTAMP() GROUP BY issue_id, blame_frame.file, blame_frame.line ORDER BY number_of_crashes DESC LIMIT 10;
範例 3:前 10 大當機裝置
秋天是換新手機的季節!貴公司知道這也代表新手機問題特別多的季節來臨,Android 更是如此。為了提早因應即將到來的相容性問題,您做了一個查詢,找出最近一週 (168 小時) 最常當機的 10 台裝置。
以下是 Android 應用程式的查詢範例。如果是 iOS 應用程式,請使用軟體包 ID 和 IOS
(而非套件名稱和 ANDROID
)。
SELECT device.model, COUNT(DISTINCT event_id) AS number_of_crashes FROM `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID` WHERE event_timestamp >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 168 HOUR) AND event_timestamp < CURRENT_TIMESTAMP() GROUP BY device.model ORDER BY number_of_crashes DESC LIMIT 10;
範例 4:依自訂鍵篩選
您是遊戲開發人員,想知道遊戲的哪個關卡最常當機。
為了協助追蹤該統計資料,您設定了名為 current_level
的自訂 Crashlytics 鍵,並在使用者每次到達新關卡時更新該鍵。
Swift
Crashlytics.sharedInstance().setIntValue(3, forKey: "current_level");
Objective-C
CrashlyticsKit setIntValue:3 forKey:@"current_level";
Java
Crashlytics.setInt("current_level", 3);
透過匯出至 BigQuery 中的這個鍵,您可以撰寫查詢,回報與每次當機事件相關聯的 current_level
值分佈情況。
以下是 Android 應用程式的查詢範例。如果是 iOS 應用程式,請使用軟體包 ID 和 IOS
(而非套件名稱和 ANDROID
)。
SELECT
COUNT(DISTINCT event_id) AS num_of_crashes,
value
FROM
`PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID`
UNNEST(custom_keys)
WHERE
key = "current_level"
GROUP BY
key,
value
ORDER BY
num_of_crashes DESC
範例 5:擷取 User-ID
您有一個處於搶先體驗階段的 Android 應用程式。大部分使用者都對該應用程式感到滿意,但有三位使用者則遇到不尋常的當機次數。為了釐清問題的真正原因,您撰寫查詢,使用這些使用者的 ID 來提取所有當機事件。
以下是 Android 應用程式的查詢範例。如果是 iOS 應用程式,請使用軟體包 ID 和 IOS
(而非套件名稱和 ANDROID
)。
SELECT *
FROM
`PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID`
WHERE
user.id IN ("USER_ID_1", "USER_ID_2", "USER_ID_3")
ORDER BY
user.id
範例 6:找出所有遇到特定當機問題的使用者
您的團隊不慎將重大錯誤發布給一群 Beta 版測試人員。 您的團隊已使用上述「找出最普遍的當機問題」範例中的查詢,找出特定當機問題 ID。現在團隊想執行查詢,擷取受這個當機問題影響的應用程式使用者清單。
以下是 Android 應用程式的查詢範例。如果是 iOS 應用程式,請使用軟體包 ID 和 IOS
(而非套件名稱和 ANDROID
)。
SELECT user.id as user_id
FROM
`PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID`
WHERE
issue_id = "ISSUE_ID"
AND application.display_version = "APP_VERSION"
AND user.id != ""
ORDER BY
user.id;
範例 7:按國家/地區劃分,受當機問題影響的使用者人數
您的團隊在推出新版本時發現重大錯誤,您可以使用上述「找出最普遍的當機問題」範例中的查詢,找出特定當機問題 ID。現在,您的團隊想瞭解這項當機問題是否已擴散到世界各地。
如要編寫這項查詢,您的團隊需要執行下列操作:
啟用將 Google Analytics 資料匯出至 BigQuery 的功能。 請參閱「將專案資料匯出至 BigQuery」。
更新應用程式,將使用者 ID 傳遞至 Google Analytics SDK 和 Crashlytics SDK。
Swift
Crashlytics.sharedInstance().setUserIdentifier("123456789"); Analytics.setUserID("123456789");
Objective-C
CrashlyticsKit setUserIdentifier:@"123456789"; FIRAnalytics setUserID:@"12345678 9";
Java
Crashlytics.setUserIdentifier("123456789"); mFirebaseAnalytics.setUserId("123456789");
撰寫查詢,使用使用者 ID 欄位,將 Google Analytics 資料集中的事件與 Crashlytics 資料集中的當機事件聯結。
以下是 Android 應用程式的查詢範例。如果是 iOS 應用程式,請使用軟體包 ID 和
IOS
(而非套件名稱和ANDROID
)。SELECT DISTINCT c.issue_id, a.geo.country, COUNT(DISTINCT c.user.id) as num_users_impacted FROM `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID` c INNER JOIN `PROJECT_ID.analytics_TABLE_NAME.events_*` a on c.user.id = a.user_id WHERE c.issue_id = "ISSUE_ID" AND a._TABLE_SUFFIX BETWEEN '20190101' AND '20200101' GROUP BY c.issue_id, a.geo.country, c.user.id
範例 8:今天目前為止的前 5 大問題
以下是 Android 應用程式的查詢範例。如果是 iOS 應用程式,請使用軟體包 ID 和 IOS
(而非套件名稱和 ANDROID
)。
SELECT issue_id, COUNT(DISTINCT event_id) AS events FROM `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID_REALTIME` WHERE DATE(event_timestamp) = CURRENT_DATE() GROUP BY issue_id ORDER BY events DESC LIMIT 5;
範例 9:自「DATE」起 (含今天) 的前 5 大問題
您也可以使用縫合查詢,合併批次和即時資料表,將即時資訊新增至可靠的批次資料。由於 event_id
是主鍵,因此您可以使用 DISTINCT event_id
,從這兩個資料表中移除任何常見事件的重複項目。
以下是 Android 應用程式的查詢範例。如果是 iOS 應用程式,請使用軟體包 ID 和 IOS
(而非套件名稱和 ANDROID
)。
SELECT issue_id, COUNT(DISTINCT event_id) AS events FROM ( SELECT issue_id, event_id, event_timestamp FROM `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID_REALTIME` UNION ALL SELECT issue_id, event_id, event_timestamp FROM `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID`) WHERE event_timestamp >= "YYYY_MM_DD" GROUP BY issue_id ORDER BY events DESC LIMIT 5;
瞭解 Crashlytics 結構定義 BigQuery
設定將資料匯出至 BigQuery 時,Firebase 會匯出近期事件 (當機、一般錯誤和 ANR),包括連結前兩天出現的事件,並提供回填最多 30 天資料的選項。Crashlytics
從啟用匯出功能到停用匯出功能,Firebase 每天都會匯出 Crashlytics 事件。每次匯出後可能需要幾分鐘的時間,您才能在 BigQuery 中使用資料。
資料集
Crashlytics 會在 BigQuery 中為 Crashlytics 資料建立新的資料集。這個資料集會涵蓋整個專案,即使專案包含多個應用程式亦同。
表格
Crashlytics 會在資料集中為專案裡的每個應用程式建立資料表,除非您選擇停用該應用程式的匯出資料功能。Firebase 會依據應用程式的 ID 來命名資料表,同時會將句號轉換為底線,並將平台名稱附加到結尾處。
舉例來說,如果 Android 應用程式的套件名稱為 com.google.test
,資料就會位於名為 com_google_test_ANDROID
的資料表中,而即時資料 (如已啟用) 則會位於名為 com_google_test_ANDROID_REALTIME
的資料表中。
除了您在應用程式中定義的任何自訂 Crashlytics 鍵之外,資料表還包含一組標準的 Crashlytics 資料。
資料列
每個在資料表中的資料列都代表應用程式遇到的某個錯誤。
欄
對於當機、輕微錯誤和 ANR 來說,資料表中的資料欄都完全相同。如果啟用 Crashlytics 串流匯出至 BigQuery,即時資料表就會與批次資料表有相同的資料欄。請注意,您可能在代表沒有堆疊追蹤的事件的資料列中,有資料欄。
系統匯出的資料欄如下表所示:
欄位名稱 | 資料類型 | 說明 |
---|---|---|
platform |
STRING | 在 Firebase 專案中註冊的應用程式平台
(有效值:IOS 或 ANDROID )
|
bundle_identifier |
STRING | 在 Firebase 專案中註冊的應用程式專屬 ID (例如 com.google.gmail 如果是 Apple 平台應用程式,這是指應用程式的套件組合 ID。 如果是 Android 應用程式,這是指應用程式的套件名稱。 |
event_id |
STRING | 活動的專屬 ID |
is_fatal |
BOOLEAN | 應用程式是否異常終止 |
error_type |
STRING | 事件的錯誤類型 (例如 FATAL 、NON_FATAL 、ANR 等) |
issue_id |
STRING | 與事件相關的問題 |
variant_id |
STRING | 與這個事件相關聯的問題變體 請注意,並非所有事件都有相關聯的問題變體。 |
event_timestamp |
TIMESTAMP | 事件發生時間 |
device |
RECORD | 發生事件的裝置 |
device.manufacturer |
STRING | 裝置製造商 |
device.model |
STRING | 裝置型號 |
device.architecture |
STRING | 例如:X86_32 、X86_64 、ARMV7 、ARM64 、ARMV7S 或 ARMV7K |
memory |
RECORD | 裝置的記憶體狀態 |
memory.used |
INT64 | 使用的記憶體位元組數 |
memory.free |
INT64 | 剩餘記憶體位元組數 |
storage |
RECORD | 裝置的永久儲存空間 |
storage.used |
INT64 | 已使用的儲存空間位元組數 |
storage.free |
INT64 | 剩餘儲存空間 (位元組) |
operating_system |
RECORD | 裝置作業系統的詳細資料 |
operating_system.display_version |
STRING | 裝置上的作業系統版本 |
operating_system.name |
STRING | 裝置上的作業系統名稱 |
operating_system.modification_state |
STRING | 裝置是否經過修改 (例如,越獄解鎖的應用程式為 MODIFIED ,啟用 Root 權限的應用程式為 UNMODIFIED ) |
operating_system.type |
STRING | (僅限 Apple 應用程式) 裝置執行的作業系統類型 (例如 IOS 、MACOS 等) |
operating_system.device_type |
STRING | 裝置類型 (例如 MOBILE 、TABLET 、
TV 等),也稱為「裝置類別」 |
application |
RECORD | 產生事件的應用程式 |
application.build_version |
STRING | 應用程式的建構版本 |
application.display_version |
STRING | |
user |
RECORD | (選用) 收集應用程式使用者相關資訊 |
user.name |
STRING | (選用) 使用者名稱 |
user.email |
STRING | (選用) 使用者的電子郵件地址 |
user.id |
STRING | (選用) 與使用者相關聯的應用程式專屬 ID |
custom_keys |
REPEATED RECORD | 開發人員定義的鍵/值組合 |
custom_keys.key |
STRING | 開發人員定義的金鑰 |
custom_keys.value |
STRING | 開發人員定義的值 |
installation_uuid |
STRING | 用於識別不重複的應用程式和裝置安裝作業 |
crashlytics_sdk_versions |
STRING | 產生事件的 Crashlytics SDK 版本 |
app_orientation |
STRING | 例如 PORTRAIT 、LANDSCAPE 、FACE_UP 、FACE_DOWN 等。 |
device_orientation |
STRING | 例如 PORTRAIT 、LANDSCAPE 、FACE_UP 、FACE_DOWN 等。 |
process_state |
STRING | BACKGROUND 或FOREGROUND |
logs |
REPEATED RECORD | Crashlytics記錄器產生的含時間戳記記錄訊息 (如已啟用) |
logs.timestamp |
TIMESTAMP | 記錄建立時間 |
logs.message |
STRING | 記錄的訊息 |
breadcrumbs |
REPEATED RECORD | 時間戳記 Google Analytics 導覽標記 (如已啟用) |
breadcrumbs.timestamp |
TIMESTAMP | 與麵包屑相關聯的時間戳記 |
breadcrumbs.name |
STRING | 與麵包屑相關聯的名稱 |
breadcrumbs.params |
REPEATED RECORD | 與麵包屑相關聯的參數 |
breadcrumbs.params.key |
STRING | 與麵包屑相關聯的參數鍵 |
breadcrumbs.params.value |
STRING | 與麵包屑相關聯的參數值 |
blame_frame |
RECORD | 導致當機或錯誤的頁框 |
blame_frame.line |
INT64 | 框架檔案的行號 |
blame_frame.file |
STRING | 影格檔案的名稱 |
blame_frame.symbol |
STRING | 已補水符號,或無法補水時的原始符號 |
blame_frame.offset |
INT64 | 包含程式碼的二進位映像檔中的位元組偏移 未針對 Java 例外狀況設定 |
blame_frame.address |
INT64 | 含有程式碼的二進位映像檔中的位址 Java 框架未設定 |
blame_frame.library |
STRING | 包含影格的程式庫顯示名稱 |
blame_frame.owner |
STRING | 例如 DEVELOPER 、VENDOR 、RUNTIME 、PLATFORM 或 SYSTEM |
blame_frame.blamed |
BOOLEAN | Crashlytics 是否判定這個影格是導致當機或錯誤的原因 |
exceptions |
REPEATED RECORD | (僅限 Android) 此事件期間發生的例外狀況。巢狀例外狀況會依時間倒序顯示,也就是說,最後一筆記錄是擲回的第一個例外狀況 |
exceptions.type |
STRING | 例外狀況類型 (例如 java.lang.IllegalStateException) |
exceptions.exception_message |
STRING | 與例外狀況相關的訊息 |
exceptions.nested |
BOOLEAN | 除了最後擲回的例外狀況 (也就是第一個記錄) 以外,其餘皆為 True |
exceptions.title |
STRING | 討論串標題 |
exceptions.subtitle |
STRING | 討論串的副標題 |
exceptions.blamed |
BOOLEAN | 如果 Crashlytics 判斷例外狀況是造成錯誤或當機的原因,則為 True |
exceptions.frames |
REPEATED RECORD | 與例外狀況相關的影格 |
exceptions.frames.line |
INT64 | 框架檔案的行號 |
exceptions.frames.file |
STRING | 影格檔案的名稱 |
exceptions.frames.symbol |
STRING | 已補水符號,或無法補水時的原始符號 |
exceptions.frames.offset |
INT64 | 包含程式碼的二進位映像檔中的位元組偏移 未針對 Java 例外狀況設定 |
exceptions.frames.address |
INT64 | 含有程式碼的二進位映像檔中的位址 Java 框架未設定 |
exceptions.frames.library |
STRING | 包含影格的程式庫顯示名稱 |
exceptions.frames.owner |
STRING | 例如 DEVELOPER 、VENDOR 、RUNTIME 、PLATFORM 或 SYSTEM |
exceptions.frames.blamed |
BOOLEAN | Crashlytics 是否判定這個影格是導致當機或錯誤的原因 |
error |
REPEATED RECORD | (僅限 Apple 應用程式) 一般錯誤 |
error.queue_name |
STRING | 執行緒執行的佇列 |
error.code |
INT64 | 與應用程式自訂記錄的 NSError 相關聯的錯誤代碼 |
error.title |
STRING | 討論串標題 |
error.subtitle |
STRING | 討論串的副標題 |
error.blamed |
BOOLEAN | Crashlytics 是否判定這個影格是錯誤的原因 |
error.frames |
REPEATED RECORD | 堆疊追蹤的框架 |
error.frames.line |
INT64 | 框架檔案的行號 |
error.frames.file |
STRING | 影格檔案的名稱 |
error.frames.symbol |
STRING | 已補水符號,或無法補水時的原始符號 |
error.frames.offset |
INT64 | 包含程式碼的二進位映像檔中的位元組偏移 |
error.frames.address |
INT64 | 含有程式碼的二進位映像檔中的位址 |
error.frames.library |
STRING | 包含影格的程式庫顯示名稱 |
error.frames.owner |
STRING | 例如 DEVELOPER 、VENDOR 、RUNTIME 、PLATFORM 或 SYSTEM |
error.frames.blamed |
BOOLEAN | Crashlytics 是否判定這個影格是錯誤的原因 |
threads |
REPEATED RECORD | 事件發生時的執行緒 |
threads.crashed |
BOOLEAN | 執行緒是否當機 |
threads.thread_name |
STRING | 討論串名稱 |
threads.queue_name |
STRING | (僅限 Apple 應用程式) 執行執行緒的佇列 |
threads.signal_name |
STRING | 導致應用程式當機的信號名稱,僅適用於當機的原生執行緒 |
threads.signal_code |
STRING | 導致應用程式當機的訊號代碼,只會出現在當機的原生執行緒中 |
threads.crash_address |
INT64 | 導致應用程式停止運作的信號位址;僅適用於停止運作的原生執行緒 |
threads.code |
INT64 | (僅限 Apple 應用程式) 應用程式自訂記錄的 NSError 錯誤碼 |
threads.title |
STRING | 討論串標題 |
threads.subtitle |
STRING | 討論串的副標題 |
threads.blamed |
BOOLEAN | Crashlytics 是否判定這個影格是導致當機或錯誤的原因 |
threads.frames |
REPEATED RECORD | 執行緒的影格 |
threads.frames.line |
INT64 | 框架檔案的行號 |
threads.frames.file |
STRING | 影格檔案的名稱 |
threads.frames.symbol |
STRING | 水合符號,或無法水合的原始符號 |
threads.frames.offset |
INT64 | 包含程式碼的二進位映像檔中的位元組偏移 |
threads.frames.address |
INT64 | 含有程式碼的二進位映像檔中的位址 |
threads.frames.library |
STRING | 包含影格的程式庫顯示名稱 |
threads.frames.owner |
STRING | 例如 DEVELOPER 、VENDOR 、RUNTIME 、PLATFORM 或 SYSTEM |
threads.frames.blamed |
BOOLEAN | Crashlytics 是否判定這個影格是錯誤的原因 |
unity_metadata.unity_version |
STRING | 裝置上執行的 Unity 版本 |
unity_metadata.debug_build |
BOOLEAN | 如果這是偵錯版本 |
unity_metadata.processor_type |
STRING | 處理器類型 |
unity_metadata.processor_count |
INT64 | 處理器 (核心) 數量 |
unity_metadata.processor_frequency_mhz |
INT64 | 處理器的頻率(以 MHz 為單位) |
unity_metadata.system_memory_size_mb |
INT64 | 系統記憶體大小 (以 MB 為單位) |
unity_metadata.graphics_memory_size_mb |
INT64 | 以 MB 為單位的圖形記憶體 |
unity_metadata.graphics_device_id |
INT64 | 圖形裝置的 ID |
unity_metadata.graphics_device_vendor_id |
INT64 | 圖形處理器供應商的 ID |
unity_metadata.graphics_device_name |
STRING | 顯示裝置的名稱 |
unity_metadata.graphics_device_vendor |
STRING | 繪圖裝置的供應商 |
unity_metadata.graphics_device_version |
STRING | 顯示裝置版本 |
unity_metadata.graphics_device_type |
STRING | 顯示裝置類型 |
unity_metadata.graphics_shader_level |
INT64 | 圖像的著色器層級 |
unity_metadata.graphics_render_target_count |
INT64 | 圖形算繪目標數量 |
unity_metadata.graphics_copy_texture_support |
STRING | 支援複製圖形紋理,如 Unity API 中所定義 |
unity_metadata.graphics_max_texture_size |
INT64 | 用於算繪紋理的大小上限 |
unity_metadata.screen_size_px |
STRING | 螢幕大小 (以像素為單位),格式為「寬 x 高」 |
unity_metadata.screen_resolution_dpi |
STRING | 螢幕的 DPI,以浮點數表示 |
unity_metadata.screen_refresh_rate_hz |
INT64 | 螢幕的刷新率 (以 Hz 為單位) |
使用數據分析工具,以圖表呈現匯出的 Crashlytics 資料
Google 數據分析可將您在 BigQuery 中的 Crashlytics 資料集變成易於閱讀、共用且可完全自訂的報表。
如要進一步瞭解如何使用數據分析,請參閱《數據分析快速入門指南》中的歡迎使用數據分析。
使用 Crashlytics 報表範本
數據分析提供 Crashlytics 範例報表,其中包含從匯出的 Crashlytics BigQuery結構定義中取得的一組完整維度和指標。如果您已啟用Crashlytics串流匯出BigQuery功能,即可在數據分析範本的「即時趨勢」頁面查看資料。您可以使用該範例做為範本,依據您自己應用程式上的原始當機資料,快速建立新的報表與視覺化效果:
按一下右上角的 [Use Template] (使用範本)。
在「新資料來源」下拉式選單中,選取「建立新資料來源」。
按一下「BigQuery」資訊卡上的「選取」。
依序選擇「My Projects」> PROJECT_ID >「firebase_crashlytics」> TABLE_NAME,選取包含匯出 Crashlytics 資料的資料表。
你隨時可以選取批次表格。如果啟用Crashlytics串流匯出至 BigQuery,則可改為選取即時資料表。
在「Configuration」(設定) 底下,將「Crashlytics Template level」(範本等級) 設為「Default」(預設)。
按一下 [Connect] (連結) 建立新的資料來源。
按一下「加入報表」,即可返回 Crashlytics 範本。
最後按一下「建立報表」,建立 Crashlytics 數據分析資訊主頁範本的副本。
升級至新的匯出基礎架構
2024 年 10 月中旬,Crashlytics推出了新基礎架構,可批次將 Crashlytics 資料匯出至 BigQuery。
所有 Firebase 專案最快將於 2025 年 9 月 15 日自動升級至新的批次匯出基礎架構。 您可以在這個日期前升級,但請確認 BigQuery 批次資料表符合升級的先決條件。
您可以升級至新版基礎架構,但請確認您的 BigQuery 批次資料表符合升級必要條件。
判斷是否使用新基礎架構
如果您在 2024 年 10 月中旬以後啟用批次匯出功能,Firebase 專案就會自動使用新的匯出基礎架構。
如要查看專案使用的基礎架構,請前往 Google Cloud 控制台,如果「資料移轉設定」標示為 Firebase Crashlytics with Multi-Region Support
,則專案使用新的匯出基礎架構。
舊版和新版匯出基礎架構的重要差異
新基礎架構支援Crashlytics美國以外的資料集位置。
在 2024 年 10 月中旬前啟用匯出功能並升級至新的匯出基礎架構:您現在可以選擇變更資料匯出位置。
2024 年 10 月中旬後啟用匯出功能:設定時系統會提示你選取資料匯出位置。
新基礎架構不支援回填啟用匯出前的資料。
舊版基礎架構支援回填最多 30 天的資料 (從啟用匯出功能當天算起)。
新基礎架構支援回填過去 30 天內的資料或您啟用匯出至 BigQuery 的最新日期 (以較近者為準)。
新基礎架構會使用 Firebase 專案中為 Firebase 應用程式設定的 ID,為批次資料表命名。BigQuery
舊版基礎架構會根據應用程式程式碼集 Firebase 設定中的軟體包 ID 或套件名稱,將資料寫入批次資料表。
新基礎架構會根據在 Firebase 專案中為已註冊 Firebase 應用程式設定的軟體包 ID 或套件名稱,將資料寫入批次資料表。
步驟 1:升級的必要條件
檢查現有的BigQuery批次資料表是否使用與Firebase 專案中已註冊 Firebase 應用程式所設軟體包 ID 或套件名稱相符的 ID。如果不符,匯出的批次資料可能會中斷。大多數專案都會處於適當且相容的狀態,但升級前請務必檢查。
如要查看 Firebase 專案中註冊的所有 Firebase 應用程式,請前往 Firebase 控制台:依序前往「專案設定」,然後捲動至「您的應用程式」資訊卡,即可查看所有 Firebase 應用程式及其資訊。
您可以在 Google Cloud 控制台的BigQuery 頁面中找到所有 BigQuery 批次表格。
舉例來說,以下是升級時不會發生任何問題的理想狀態:
您有一個名為
com_yourcompany_yourproject_IOS
的批次資料表,以及在 Firebase 專案中註冊的 Firebase iOS+ 應用程式,其軟體包 ID 為com.yourcompany.yourproject
。您有一個名為「
com_yourcompany_yourproject_ANDROID
」的批次資料表,以及在 Firebase 專案中註冊的 Firebase Android 應用程式,套件名稱為「com.yourcompany.yourproject
」。
如果批次資料表名稱與已註冊 Firebase 應用程式設有的 ID不相符,請按照本頁稍後的說明,在手動升級或 2025 年 9 月 15 日前完成操作,以免批次匯出作業中斷。
步驟 2:手動升級至新基礎架構
如果您在 2024 年 10 月中旬之前啟用批次匯出功能,只要在 Firebase 控制台中切換 Crashlytics 資料匯出功能,先關閉再開啟,即可手動升級至新基礎架構。
詳細步驟如下:
前往 Firebase 控制台的「整合」頁面。
在 BigQuery 資訊卡中,按一下「管理」。
將 Crashlytics 滑桿切換為關閉,即可停用匯出功能。按照提示確認要停止匯出資料。
立即再次開啟 Crashlytics 滑桿,重新啟用匯出功能。 系統顯示提示時,請確認要匯出資料。
您現在使用新的匯出基礎架構,將 Crashlytics 資料匯出至 BigQuery。