Bạn có thể xuất dữ liệu Firebase Crashlytics vào BigQuery để phân tích thêm. BigQuery cho phép bạn phân tích dữ liệu bằng SQL BigQuery, xuất dữ liệu sang một nhà cung cấp dịch vụ đám mây khác và sử dụng dữ liệu đó để tạo hình ảnh trực quan cũng như trang tổng quan tuỳ chỉnh bằng Google Data Studio.
Bật tính năng xuất sang BigQuery
Trong bảng điều khiển Firebase, hãy chuyển đến trang Tích hợp.
Trong thẻ BigQuery, hãy nhấp vào Liên kết.
Làm theo hướng dẫn trên màn hình để bật tính năng xuất sang BigQuery.
Nếu bạn muốn truy cập gần như theo thời gian thực vào dữ liệu Crashlytics trong BigQuery, hãy cân nhắc nâng cấp lên tính năng xuất trực tuyến.
Điều gì xảy ra khi bạn bật tính năng xuất?
Bạn chọn vị trí của tập dữ liệu. Sau khi tạo tập dữ liệu, bạn sẽ không thể thay đổi vị trí này nữa. Tuy nhiên, bạn có thể sao chép tập dữ liệu sang một vị trí khác hoặc tự di chuyển (tạo lại) tập dữ liệu ở một vị trí khác. Để tìm hiểu thêm, hãy xem phần Thay đổi vị trí cho các tệp xuất hiện tại.
Vị trí này chỉ áp dụng cho dữ liệu được xuất vào BigQuery và không ảnh hưởng đến vị trí của dữ liệu được lưu trữ để sử dụng trong trang tổng quan Crashlytics của bảng điều khiển Firebase hoặc trong Android Studio.
Theo mặc định, mọi ứng dụng trong dự án của bạn đều được liên kết với BigQuery và mọi ứng dụng mà bạn thêm vào dự án sau thời điểm liên kết cũng sẽ tự động liên kết với BigQuery. Bạn có thể quản lý những ứng dụng gửi dữ liệu.
Firebase thiết lập tính năng đồng bộ hoá dữ liệu hằng ngày với BigQuery.
Sau khi liên kết dự án, bạn thường phải đợi đến lần đồng bộ hoá vào ngày tiếp theo để tập dữ liệu đầu tiên được xuất sang BigQuery.
Quá trình đồng bộ hoá hằng ngày diễn ra một lần mỗi ngày, bất kể bạn có thiết lập chế độ xuất theo lịch nào trong BigQuery hay không. Xin lưu ý rằng thời gian và thời lượng của công việc đồng bộ hoá có thể thay đổi. Vì vậy, bạn không nên lên lịch cho các hoạt động hoặc công việc tiếp theo dựa trên thời gian cụ thể của quá trình xuất.
Firebase xuất bản sao dữ liệu hiện có của bạn sang BigQuery. Quá trình truyền dữ liệu ban đầu để xuất có thể mất đến 48 giờ.
Đối với mỗi ứng dụng được liên kết, tệp xuất này bao gồm một bảng lô chứa dữ liệu từ quá trình đồng bộ hoá hằng ngày.
Bạn có thể lên lịch tự động điền dữ liệu theo cách thủ công cho bảng theo lô trong tối đa 30 ngày qua hoặc cho ngày gần đây nhất khi bạn bật tính năng xuất sang BigQuery (bất kỳ ngày nào gần đây nhất).
Xin lưu ý rằng nếu đã bật tính năng xuất dữ liệu Crashlytics trước giữa tháng 10 năm 2024, thì bạn cũng có thể chèn dữ liệu 30 ngày trước ngày bạn bật tính năng xuất.
Nếu bạn bật tính năng xuất dữ liệu theo luồng Crashlytics sang BigQuery, thì tất cả ứng dụng được liên kết cũng sẽ có một bảng theo thời gian thực chứa dữ liệu liên tục cập nhật.
Để huỷ kích hoạt tính năng xuất sang BigQuery, hãy huỷ liên kết dự án của bạn trong bảng điều khiển Firebase.
Dữ liệu nào được xuất sang BigQuery?
Dữ liệu Firebase Crashlytics được xuất vào một tập dữ liệu BigQuery có tên là firebase_crashlytics
. Theo mặc định, các bảng riêng lẻ sẽ được tạo bên trong tập dữ liệu Crashlytics cho từng ứng dụng trong dự án. Firebase đặt tên cho các bảng dựa trên giá trị nhận dạng của ứng dụng, trong đó dấu chấm được chuyển đổi thành dấu gạch dưới và tên nền tảng được thêm vào cuối.
Ví dụ: dữ liệu cho một ứng dụng Android có tên gói là com.google.test
sẽ nằm trong bảng có tên com_google_test_ANDROID
. Bảng theo lô này được cập nhật một lần mỗi ngày. Nếu bạn bật tính năng xuất trực tuyến Crashlytics sang BigQuery, thì dữ liệu Crashlytics cũng sẽ được truyền trực tuyến theo thời gian thực sang một bảng có tên là com_google_test_ANDROID_REALTIME
.
Mỗi hàng trong bảng đại diện cho một sự kiện đã xảy ra trong ứng dụng, bao gồm cả sự cố, lỗi không nghiêm trọng và lỗi ANR.
Xuất trực tuyến Crashlytics sang BigQuery
Bạn có thể truyền trực tuyến dữ liệu Crashlytics theo thời gian thực bằng tính năng truyền trực tuyến BigQuery. Bạn có thể sử dụng API này cho bất kỳ mục đích nào yêu cầu dữ liệu trực tiếp, chẳng hạn như trình bày thông tin trong trang tổng quan trực tiếp, xem quá trình triển khai trực tiếp hoặc theo dõi các vấn đề về ứng dụng kích hoạt cảnh báo và quy trình làm việc tuỳ chỉnh.
Khi bật tính năng xuất trực tuyến Crashlytics sang BigQuery, ngoài bảng theo lô, bạn cũng sẽ có một bảng theo thời gian thực. Dưới đây là những điểm khác biệt mà bạn cần lưu ý giữa các bảng:
Bảng lô | Bảng theo thời gian thực |
---|---|
|
|
Bảng theo lô rất phù hợp để phân tích dài hạn và xác định xu hướng theo thời gian vì chúng tôi lưu trữ sự kiện một cách bền vững trước khi ghi và có thể bổ sung dữ liệu cũ vào bảng trong tối đa 30 ngày*. Khi ghi dữ liệu vào bảng theo thời gian thực, chúng tôi sẽ ghi dữ liệu đó vào BigQuery ngay lập tức. Vì vậy, đây là bảng lý tưởng cho trang tổng quan trực tiếp và cảnh báo tuỳ chỉnh. Bạn có thể kết hợp hai bảng này với một truy vấn nối để tận dụng lợi ích của cả hai.
Theo mặc định, bảng theo thời gian thực có thời gian hết hạn của phân vùng là 30 ngày. Để tìm hiểu cách sửa đổi điều này, hãy xem phần Đặt thời gian hết hạn của phân vùng trong tài liệu BigQuery.
* Xem thông tin chi tiết về tính năng hỗ trợ chèn dữ liệu cũ trong bài viết Nâng cấp lên cơ sở hạ tầng xuất mới.
Bật tính năng xuất trực tuyến Crashlytics sang BigQuery
Trong bảng điều khiển Firebase, hãy chuyển đến trang Tích hợp.
Trong thẻ BigQuery, hãy nhấp vào Quản lý.
Đánh dấu vào hộp Bao gồm nội dung phát trực tiếp.
Thao tác này sẽ bật tính năng truyền trực tuyến cho tất cả ứng dụng được liên kết.
Bạn có thể làm gì với dữ liệu đã xuất?
Dữ liệu xuất sang BigQuery chứa dữ liệu sự cố thô, bao gồm loại thiết bị, hệ điều hành, ngoại lệ (ứng dụng Android) hoặc lỗi (ứng dụng Apple) và nhật ký Crashlytics, cũng như các dữ liệu khác.
Xem lại chính xác dữ liệu Crashlytics được xuất và giản đồ bảng của dữ liệu đó ở phần sau của trang này.
Sử dụng mẫu Data Studio
Để bật dữ liệu theo thời gian thực trong mẫu Data Studio, hãy làm theo hướng dẫn trong bài viết Biểu diễn dữ liệu Crashlytics đã xuất bằng Data Studio.
Tạo thành phần hiển thị
Bạn có thể chuyển đổi truy vấn thành thành phần hiển thị bằng giao diện người dùng BigQuery. Để biết hướng dẫn chi tiết, hãy xem phần Tạo thành phần hiển thị trong tài liệu về BigQuery.
Chạy truy vấn
Các ví dụ sau đây minh hoạ các truy vấn mà bạn có thể chạy trên dữ liệu Crashlytics để tạo báo cáo tổng hợp dữ liệu sự kiện sự cố thành bản tóm tắt dễ hiểu hơn. Vì các loại báo cáo này không có trong trang tổng quan Crashlytics của bảng điều khiển Firebase, nên các báo cáo này có thể bổ sung cho việc phân tích và hiểu biết của bạn về dữ liệu sự cố.
Ví dụ 1: Lỗi trục trặc theo ngày
Sau khi cố gắng khắc phục nhiều lỗi nhất có thể, bạn cho rằng nhóm của mình cuối cùng cũng sẵn sàng ra mắt ứng dụng chia sẻ ảnh mới. Trước khi làm như vậy, bạn muốn kiểm tra số lượng sự cố mỗi ngày trong tháng vừa qua để đảm bảo việc khắc phục lỗi đã giúp ứng dụng ổn định hơn theo thời gian.
Dưới đây là truy vấn mẫu cho một ứng dụng Android. Đối với ứng dụng iOS, hãy sử dụng mã nhận dạng gói và IOS
(thay vì tên gói và 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;
Ví dụ 2: Tìm các sự cố phổ biến nhất
Để ưu tiên đúng cách các kế hoạch phát hành, bạn cần tìm ra 10 sự cố phổ biến nhất trong ứng dụng. Bạn sẽ tạo một truy vấn cung cấp các điểm dữ liệu liên quan.
Dưới đây là truy vấn mẫu cho một ứng dụng Android. Đối với ứng dụng iOS, hãy sử dụng mã nhận dạng gói và IOS
(thay vì tên gói và 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;
Ví dụ 3: 10 thiết bị gặp sự cố hàng đầu
Mùa thu là mùa của điện thoại mới! Công ty của bạn biết rằng điều này cũng có nghĩa là mùa mới của các vấn đề dành riêng cho thiết bị, đặc biệt là đối với Android. Để giải quyết các vấn đề về khả năng tương thích sắp xảy ra, bạn tạo một truy vấn xác định 10 thiết bị gặp nhiều sự cố nhất trong tuần qua (168 giờ).
Dưới đây là truy vấn mẫu cho một ứng dụng Android. Đối với ứng dụng iOS, hãy sử dụng mã nhận dạng gói và IOS
(thay vì tên gói và 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;
Ví dụ 4: Lọc theo khoá tuỳ chỉnh
Bạn là một nhà phát triển trò chơi muốn biết cấp độ nào của trò chơi gặp phải nhiều sự cố nhất.
Để theo dõi chỉ số đó, bạn đặt một khoá Crashlytics tuỳ chỉnh có tên là current_level
và cập nhật khoá đó mỗi khi người dùng đạt đến một cấp mới.
Swift
Crashlytics.sharedInstance().setIntValue(3, forKey: "current_level");
Objective-C
CrashlyticsKit setIntValue:3 forKey:@"current_level";
Java
Crashlytics.setInt("current_level", 3);
Với khoá đó trong tệp xuất sang BigQuery, bạn có thể viết một truy vấn để báo cáo mức phân phối của các giá trị current_level
liên kết với từng sự kiện sự cố.
Dưới đây là truy vấn mẫu cho một ứng dụng Android. Đối với ứng dụng iOS, hãy sử dụng mã nhận dạng gói và IOS
(thay vì tên gói và 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
Ví dụ 5: Trích xuất mã nhận dạng người dùng
Bạn có một ứng dụng Android đang ở giai đoạn quyền truy cập sớm. Hầu hết người dùng đều thích ứng dụng này, nhưng 3 người dùng đã gặp phải số lượng sự cố bất thường. Để tìm hiểu rõ vấn đề, bạn sẽ viết một truy vấn để lấy tất cả sự kiện sự cố cho những người dùng đó bằng mã nhận dạng người dùng của họ.
Dưới đây là truy vấn mẫu cho một ứng dụng Android. Đối với ứng dụng iOS, hãy sử dụng mã nhận dạng gói và IOS
(thay vì tên gói và 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
Ví dụ 6: Tìm tất cả người dùng gặp phải một vấn đề cụ thể về sự cố
Nhóm của bạn đã vô tình phát hành một lỗi nghiêm trọng cho một nhóm người kiểm thử phiên bản thử nghiệm. Nhóm của bạn có thể sử dụng truy vấn trong ví dụ"Tìm sự cố phổ biến nhất" ở trên để xác định mã vấn đề sự cố cụ thể. Bây giờ, nhóm của bạn muốn chạy một truy vấn để trích xuất danh sách người dùng ứng dụng bị ảnh hưởng bởi sự cố này.
Dưới đây là truy vấn mẫu cho một ứng dụng Android. Đối với ứng dụng iOS, hãy sử dụng mã nhận dạng gói và IOS
(thay vì tên gói và 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;
Ví dụ 7: Số người dùng chịu ảnh hưởng của một sự cố, được phân tích theo quốc gia
Nhóm của bạn đã phát hiện một lỗi nghiêm trọng trong quá trình triển khai bản phát hành mới. Bạn có thể sử dụng truy vấn trong ví dụ"Tìm sự cố phổ biến nhất" ở trên để xác định mã vấn đề sự cố cụ thể. Giờ đây, nhóm của bạn muốn xem liệu sự cố này có lan sang người dùng ở các quốc gia trên thế giới hay không.
Để viết truy vấn này, nhóm của bạn cần làm như sau:
Bật tính năng xuất dữ liệu Google Analytics sang BigQuery. Xem bài viết Xuất dữ liệu dự án sang BigQuery.
Cập nhật ứng dụng của bạn để truyền mã nhận dạng người dùng vào cả SDK Google Analytics và SDK Crashlytics.
Swift
Crashlytics.sharedInstance().setUserIdentifier("123456789"); Analytics.setUserID("123456789");
Objective-C
CrashlyticsKit setUserIdentifier:@"123456789"; FIRAnalytics setUserID:@"12345678 9";
Java
Crashlytics.setUserIdentifier("123456789"); mFirebaseAnalytics.setUserId("123456789");
Viết truy vấn sử dụng trường mã nhận dạng người dùng để kết hợp các sự kiện trong tập dữ liệu Google Analytics với các sự cố trong tập dữ liệu Crashlytics.
Dưới đây là truy vấn mẫu cho một ứng dụng Android. Đối với ứng dụng iOS, hãy sử dụng mã nhận dạng gói và
IOS
(thay vì tên gói và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
Ví dụ 8: 5 vấn đề hàng đầu tính đến thời điểm hiện tại
Dưới đây là truy vấn mẫu cho một ứng dụng Android. Đối với ứng dụng iOS, hãy sử dụng mã nhận dạng gói và IOS
(thay vì tên gói và 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;
Ví dụ 9: 5 vấn đề hàng đầu kể từ NGÀY, bao gồm cả hôm nay
Bạn cũng có thể kết hợp bảng theo lô và bảng theo thời gian thực bằng truy vấn nối để thêm thông tin theo thời gian thực vào dữ liệu theo lô đáng tin cậy. Vì event_id
là khoá chính, nên bạn có thể sử dụng DISTINCT event_id
để loại bỏ trùng lặp mọi sự kiện phổ biến trong hai bảng.
Dưới đây là truy vấn mẫu cho một ứng dụng Android. Đối với ứng dụng iOS, hãy sử dụng mã nhận dạng gói và IOS
(thay vì tên gói và 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;
Tìm hiểu giản đồ Crashlytics trong BigQuery
Khi bạn thiết lập tính năng xuất dữ liệu Crashlytics sang BigQuery, Firebase sẽ xuất các sự kiện gần đây (sự cố, lỗi không nghiêm trọng và lỗi ANR), bao gồm cả các sự kiện từ tối đa 2 ngày trước khi liên kết, với tuỳ chọn điền lại tối đa 30 ngày.
Từ thời điểm đó cho đến khi bạn huỷ kích hoạt tính năng xuất, Firebase sẽ xuất các sự kiện Crashlytics hằng ngày. Có thể mất vài phút thì dữ liệu mới xuất hiện trong BigQuery sau mỗi lần xuất.
Tập dữ liệu
Crashlytics tạo một tập dữ liệu mới trong BigQuery cho dữ liệu Crashlytics. Tập dữ liệu này bao gồm toàn bộ dự án của bạn, ngay cả khi dự án có nhiều ứng dụng.
Bảng
Crashlytics tạo một bảng trong tập dữ liệu cho mỗi ứng dụng trong dự án, trừ phi bạn chọn không xuất dữ liệu cho ứng dụng đó. Firebase đặt tên cho các bảng dựa trên giá trị nhận dạng của ứng dụng, trong đó dấu chấm được chuyển đổi thành dấu gạch dưới và tên nền tảng được thêm vào cuối.
Ví dụ: dữ liệu cho một ứng dụng Android có tên gói là com.google.test
sẽ nằm trong bảng có tên com_google_test_ANDROID
và dữ liệu theo thời gian thực (nếu được bật) sẽ nằm trong bảng có tên com_google_test_ANDROID_REALTIME
Bảng chứa một tập hợp dữ liệu Crashlytics tiêu chuẩn ngoài mọi khoá Crashlytics tuỳ chỉnh mà bạn xác định trong ứng dụng.
Hàng
Mỗi hàng trong bảng thể hiện một lỗi mà ứng dụng gặp phải.
Cột
Các cột trong bảng giống hệt nhau đối với sự cố, lỗi không nghiêm trọng và lỗi ANR. Nếu bạn bật tính năng xuất trực tuyến Crashlytics sang BigQuery, thì bảng theo thời gian thực sẽ có các cột giống như bảng theo lô. Xin lưu ý rằng bạn có thể có các cột trong hàng đại diện cho các sự kiện không có dấu vết ngăn xếp.
Các cột trong tệp xuất được liệt kê trong bảng sau:
Tên trường | Loại dữ liệu | Mô tả |
---|---|---|
platform |
STRING | Nền tảng của ứng dụng được đăng ký trong dự án Firebase
(giá trị hợp lệ: IOS hoặc ANDROID )
|
bundle_identifier |
STRING | Giá trị nhận dạng duy nhất cho ứng dụng đã đăng ký trong dự án Firebase
(ví dụ: com.google.gmail Đối với ứng dụng nền tảng Apple, đây là mã nhận dạng gói của ứng dụng. Đối với ứng dụng Android, đây là tên gói của ứng dụng. |
event_id |
STRING | Mã nhận dạng duy nhất của sự kiện |
is_fatal |
BOOLEAN | Liệu ứng dụng có gặp sự cố hay không |
error_type |
STRING | Loại lỗi của sự kiện (ví dụ: FATAL , NON_FATAL , ANR , v.v.) |
issue_id |
STRING | Vấn đề liên quan đến sự kiện |
variant_id |
STRING | Biến thể vấn đề liên kết với sự kiện này Xin lưu ý rằng không phải sự kiện nào cũng có biến thể vấn đề liên kết. |
event_timestamp |
DẤU THỜI GIAN | Thời điểm sự kiện xảy ra |
device |
RECORD | Thiết bị xảy ra sự kiện |
device.manufacturer |
STRING | Nhà sản xuất thiết bị |
device.model |
STRING | Mẫu thiết bị |
device.architecture |
STRING | Ví dụ: X86_32 , X86_64 , ARMV7 , ARM64 , ARMV7S hoặc ARMV7K |
memory |
RECORD | Trạng thái bộ nhớ của thiết bị |
memory.used |
INT64 | Số byte bộ nhớ đã sử dụng |
memory.free |
INT64 | Số byte bộ nhớ còn lại |
storage |
RECORD | Bộ nhớ ổn định của thiết bị |
storage.used |
INT64 | Số byte bộ nhớ đã dùng |
storage.free |
INT64 | Dung lượng lưu trữ còn lại (byte) |
operating_system |
RECORD | Thông tin chi tiết về hệ điều hành trên thiết bị |
operating_system.display_version |
STRING | Phiên bản hệ điều hành trên thiết bị |
operating_system.name |
STRING | Tên hệ điều hành trên thiết bị |
operating_system.modification_state |
STRING | Thiết bị có bị sửa đổi hay không (ví dụ: ứng dụng đã bẻ khoá là MODIFIED và ứng dụng đã can thiệp vào hệ thống là UNMODIFIED ) |
operating_system.type |
STRING | (Chỉ dành cho ứng dụng của Apple) Loại hệ điều hành đang chạy trên thiết bị (ví dụ: IOS , MACOS , v.v.) |
operating_system.device_type |
STRING | Loại thiết bị (ví dụ: MOBILE , TABLET , TV , v.v.); còn gọi là "danh mục thiết bị" |
application |
RECORD | Ứng dụng đã tạo sự kiện |
application.build_version |
STRING | Phiên bản bản dựng của ứng dụng |
application.display_version |
STRING | |
user |
RECORD | (Không bắt buộc) Thông tin được thu thập về người dùng ứng dụng |
user.name |
STRING | (Không bắt buộc) Tên của người dùng |
user.email |
STRING | (Không bắt buộc) Địa chỉ email của người dùng |
user.id |
STRING | (Không bắt buộc) Mã nhận dạng dành riêng cho ứng dụng được liên kết với người dùng |
custom_keys |
BẢN GHI LẶP LẠI | Cặp khoá-giá trị do nhà phát triển xác định |
custom_keys.key |
STRING | Khoá do nhà phát triển xác định |
custom_keys.value |
STRING | Giá trị do nhà phát triển xác định |
installation_uuid |
STRING | Mã nhận dạng một lượt cài đặt ứng dụng và thiết bị riêng biệt |
crashlytics_sdk_versions |
STRING | Phiên bản SDK Crashlytics đã tạo sự kiện |
app_orientation |
STRING | Ví dụ: PORTRAIT , LANDSCAPE , FACE_UP , FACE_DOWN , v.v. |
device_orientation |
STRING | Ví dụ: PORTRAIT , LANDSCAPE , FACE_UP , FACE_DOWN , v.v. |
process_state |
STRING | BACKGROUND hoặc FOREGROUND |
logs |
BẢN GHI LẶP LẠI | Thông điệp nhật ký có dấu thời gian do trình ghi nhật ký Crashlytics tạo ra, nếu được bật |
logs.timestamp |
DẤU THỜI GIAN | Thời điểm tạo nhật ký |
logs.message |
STRING | Thông báo được ghi lại |
breadcrumbs |
BẢN GHI LẶP LẠI | Tập hợp liên kết phân cấp Google Analytics có dấu thời gian, nếu được bật |
breadcrumbs.timestamp |
DẤU THỜI GIAN | Dấu thời gian liên kết với đường dẫn dạng chuỗi |
breadcrumbs.name |
STRING | Tên liên kết với đường dẫn dạng chuỗi |
breadcrumbs.params |
BẢN GHI LẶP LẠI | Các tham số liên kết với đường dẫn điều hướng |
breadcrumbs.params.key |
STRING | Khoá thông số liên kết với đường dẫn dạng chuỗi |
breadcrumbs.params.value |
STRING | Giá trị tham số được liên kết với đường dẫn điều hướng |
blame_frame |
RECORD | Khung được xác định là nguyên nhân gốc rễ của sự cố hoặc lỗi |
blame_frame.line |
INT64 | Số dòng của tệp khung |
blame_frame.file |
STRING | Tên của tệp khung |
blame_frame.symbol |
STRING | Biểu tượng đã được hydrat hoá hoặc biểu tượng thô nếu không thể hydrat hoá |
blame_frame.offset |
INT64 | Độ dời byte vào hình ảnh nhị phân chứa mã Không đặt cho các ngoại lệ Java |
blame_frame.address |
INT64 | Địa chỉ trong hình ảnh nhị phân chứa mã Không đặt cho các khung Java |
blame_frame.library |
STRING | Tên hiển thị của thư viện chứa khung |
blame_frame.owner |
STRING | Ví dụ: DEVELOPER , VENDOR , RUNTIME , PLATFORM hoặc SYSTEM |
blame_frame.blamed |
BOOLEAN | Liệu Crashlytics có xác định rằng khung này là nguyên nhân gây ra sự cố hay lỗi hay không |
exceptions |
BẢN GHI LẶP LẠI | (Chỉ dành cho Android) Các trường hợp ngoại lệ xảy ra trong sự kiện này. Các ngoại lệ được lồng ghép được trình bày theo thứ tự thời gian đảo ngược, tức là bản ghi cuối cùng là ngoại lệ đầu tiên được gửi |
exceptions.type |
STRING | Loại ngoại lệ (ví dụ: java.lang.IllegalStateException) |
exceptions.exception_message |
STRING | Thông báo liên kết với ngoại lệ |
exceptions.nested |
BOOLEAN | Đúng đối với tất cả ngoại trừ ngoại lệ được gửi gần đây nhất (nghĩa là bản ghi đầu tiên) |
exceptions.title |
STRING | Tiêu đề của chuỗi tin nhắn |
exceptions.subtitle |
STRING | Phụ đề của chuỗi tin nhắn |
exceptions.blamed |
BOOLEAN | Đúng nếu Crashlytics xác định ngoại lệ là nguyên nhân gây ra lỗi hoặc sự cố |
exceptions.frames |
BẢN GHI LẶP LẠI | Các khung hình liên kết với ngoại lệ |
exceptions.frames.line |
INT64 | Số dòng của tệp khung |
exceptions.frames.file |
STRING | Tên của tệp khung |
exceptions.frames.symbol |
STRING | Biểu tượng đã được hydrat hoá hoặc biểu tượng thô nếu không thể hydrat hoá |
exceptions.frames.offset |
INT64 | Độ dời byte vào hình ảnh nhị phân chứa mã Không đặt cho các ngoại lệ Java |
exceptions.frames.address |
INT64 | Địa chỉ trong hình ảnh nhị phân chứa mã Không đặt cho các khung Java |
exceptions.frames.library |
STRING | Tên hiển thị của thư viện chứa khung |
exceptions.frames.owner |
STRING | Ví dụ: DEVELOPER , VENDOR , RUNTIME , PLATFORM hoặc SYSTEM |
exceptions.frames.blamed |
BOOLEAN | Liệu Crashlytics có xác định rằng khung này là nguyên nhân gây ra sự cố hay lỗi hay không |
error |
BẢN GHI LẶP LẠI | (Chỉ ứng dụng của Apple) lỗi không nghiêm trọng |
error.queue_name |
STRING | Hàng đợi mà luồng đang chạy |
error.code |
INT64 | Mã lỗi liên kết với NSError được ghi nhật ký tuỳ chỉnh của ứng dụng |
error.title |
STRING | Tiêu đề của chuỗi tin nhắn |
error.subtitle |
STRING | Phụ đề của chuỗi tin nhắn |
error.blamed |
BOOLEAN | Liệu Crashlytics có xác định rằng khung này là nguyên nhân gây ra lỗi hay không |
error.frames |
BẢN GHI LẶP LẠI | Các khung của dấu vết ngăn xếp |
error.frames.line |
INT64 | Số dòng của tệp khung |
error.frames.file |
STRING | Tên của tệp khung |
error.frames.symbol |
STRING | Biểu tượng đã được hydrat hoá hoặc biểu tượng thô nếu không thể hydrat hoá |
error.frames.offset |
INT64 | Độ dời byte vào hình ảnh nhị phân chứa mã |
error.frames.address |
INT64 | Địa chỉ trong hình ảnh nhị phân chứa mã |
error.frames.library |
STRING | Tên hiển thị của thư viện chứa khung |
error.frames.owner |
STRING | Ví dụ: DEVELOPER , VENDOR , RUNTIME , PLATFORM hoặc SYSTEM |
error.frames.blamed |
BOOLEAN | Liệu Crashlytics có xác định rằng khung này là nguyên nhân gây ra lỗi hay không |
threads |
BẢN GHI LẶP LẠI | Các luồng có tại thời điểm diễn ra sự kiện |
threads.crashed |
BOOLEAN | Liệu luồng có gặp sự cố hay không |
threads.thread_name |
STRING | Tên của luồng |
threads.queue_name |
STRING | (Chỉ dành cho ứng dụng của Apple) Hàng đợi mà luồng đang chạy |
threads.signal_name |
STRING | Tên của tín hiệu khiến ứng dụng gặp sự cố, chỉ xuất hiện trên các luồng gốc bị sự cố |
threads.signal_code |
STRING | Mã của tín hiệu khiến ứng dụng gặp sự cố; chỉ xuất hiện trên các luồng gốc bị sự cố |
threads.crash_address |
INT64 | Địa chỉ của tín hiệu khiến ứng dụng gặp sự cố; chỉ xuất hiện trên các luồng gốc gặp sự cố |
threads.code |
INT64 | (Chỉ dành cho ứng dụng của Apple) Mã lỗi của NSError được ghi nhật ký tuỳ chỉnh của ứng dụng |
threads.title |
STRING | Tiêu đề của chuỗi tin nhắn |
threads.subtitle |
STRING | Phụ đề của chuỗi tin nhắn |
threads.blamed |
BOOLEAN | Liệu Crashlytics có xác định rằng khung này là nguyên nhân gây ra sự cố hay lỗi hay không |
threads.frames |
BẢN GHI LẶP LẠI | Khung của luồng |
threads.frames.line |
INT64 | Số dòng của tệp khung |
threads.frames.file |
STRING | Tên của tệp khung |
threads.frames.symbol |
STRING | Biểu tượng đã được hydrat hoá hoặc biểu tượng thô nếu không thể hydrat hoá |
threads.frames.offset |
INT64 | Độ dời byte vào hình ảnh nhị phân chứa mã |
threads.frames.address |
INT64 | Địa chỉ trong hình ảnh nhị phân chứa mã |
threads.frames.library |
STRING | Tên hiển thị của thư viện chứa khung |
threads.frames.owner |
STRING | Ví dụ: DEVELOPER , VENDOR , RUNTIME , PLATFORM hoặc SYSTEM |
threads.frames.blamed |
BOOLEAN | Liệu Crashlytics có xác định rằng khung này là nguyên nhân gây ra lỗi hay không |
unity_metadata.unity_version |
STRING | Phiên bản Unity chạy trên thiết bị này |
unity_metadata.debug_build |
BOOLEAN | Nếu đây là bản gỡ lỗi |
unity_metadata.processor_type |
STRING | Loại bộ xử lý |
unity_metadata.processor_count |
INT64 | Số lượng bộ xử lý (nhân) |
unity_metadata.processor_frequency_mhz |
INT64 | Tần số của(các) bộ xử lý tính bằng MHz |
unity_metadata.system_memory_size_mb |
INT64 | Dung lượng bộ nhớ của hệ thống tính bằng Mb |
unity_metadata.graphics_memory_size_mb |
INT64 | Bộ nhớ đồ hoạ tính bằng MB |
unity_metadata.graphics_device_id |
INT64 | Giá trị nhận dạng của thiết bị đồ hoạ |
unity_metadata.graphics_device_vendor_id |
INT64 | Giá trị nhận dạng của nhà cung cấp bộ xử lý đồ hoạ |
unity_metadata.graphics_device_name |
STRING | Tên của thiết bị đồ hoạ |
unity_metadata.graphics_device_vendor |
STRING | Nhà cung cấp thiết bị đồ hoạ |
unity_metadata.graphics_device_version |
STRING | Phiên bản của thiết bị đồ hoạ |
unity_metadata.graphics_device_type |
STRING | Loại thiết bị đồ hoạ |
unity_metadata.graphics_shader_level |
INT64 | Cấp độ chương trình đổ bóng của đồ hoạ |
unity_metadata.graphics_render_target_count |
INT64 | Số lượng mục tiêu kết xuất đồ hoạ |
unity_metadata.graphics_copy_texture_support |
STRING | Hỗ trợ sao chép hoạ tiết đồ hoạ như được xác định trong API Unity |
unity_metadata.graphics_max_texture_size |
INT64 | Kích thước tối đa dành riêng cho việc kết xuất hoạ tiết |
unity_metadata.screen_size_px |
STRING | Kích thước màn hình tính bằng pixel, được định dạng là chiều rộng x chiều cao |
unity_metadata.screen_resolution_dpi |
STRING | DPI của màn hình dưới dạng số dấu phẩy động |
unity_metadata.screen_refresh_rate_hz |
INT64 | Tốc độ làm mới của màn hình tính bằng Hz |
Trực quan hoá dữ liệu Crashlytics đã xuất bằng Data Studio
Google Data Studio biến các tập dữ liệu Crashlytics trong BigQuery thành các báo cáo dễ đọc, dễ chia sẻ và có thể tuỳ chỉnh hoàn toàn.
Để tìm hiểu thêm về cách sử dụng Data Studio, hãy thử hướng dẫn nhanh về Data Studio, Chào mừng bạn đến với Data Studio.
Sử dụng mẫu báo cáo Crashlytics
Data Studio có một báo cáo mẫu cho Crashlytics, bao gồm một nhóm phương diện và chỉ số toàn diện từ giản đồ Crashlytics BigQuery đã xuất. Nếu đã bật tính năng xuất trực tuyến Crashlytics sang BigQuery, thì bạn có thể xem dữ liệu đó trên trang Xu hướng theo thời gian thực của mẫu Data Studio.Bạn có thể sử dụng mẫu này làm mẫu để nhanh chóng tạo báo cáo và hình ảnh trực quan mới dựa trên dữ liệu sự cố thô của ứng dụng:
Nhấp vào Sử dụng mẫu ở góc trên bên phải.
Trong trình đơn thả xuống New Data Source (Nguồn dữ liệu mới), hãy chọn Create New Data Source (Tạo nguồn dữ liệu mới).
Nhấp vào Chọn trên thẻ BigQuery.
Chọn một bảng chứa dữ liệu Crashlytics đã xuất bằng cách chọn My Projects (Dự án của tôi) > PROJECT_ID > firebase_crashlytics > TABLE_NAME.
Bạn luôn có thể chọn bảng hàng loạt. Nếu bạn bật tính năng xuất trực tuyến Crashlytics sang BigQuery, thì bạn có thể chọn bảng theo thời gian thực.
Trong phần Cấu hình, hãy đặt Crashlytics Mức mẫu thành Mặc định.
Nhấp vào Kết nối để tạo nguồn dữ liệu mới.
Nhấp vào Thêm vào báo cáo để quay lại mẫu Crashlytics.
Cuối cùng, hãy nhấp vào Tạo báo cáo để tạo bản sao của mẫu Trang tổng quan Data Studio Crashlytics.
Nâng cấp lên cơ sở hạ tầng xuất mới
Vào giữa tháng 10 năm 2024, Crashlytics đã ra mắt một cơ sở hạ tầng mới để xuất dữ liệu Crashlytics vào BigQuery. Hiện tại, bạn không bắt buộc phải nâng cấp lên cơ sở hạ tầng mới này.
Cơ sở hạ tầng mới này hỗ trợ các vị trí tập dữ liệu Crashlytics bên ngoài Hoa Kỳ.
Nếu đã bật tính năng xuất trước giữa tháng 10 năm 2024, thì giờ đây, bạn có thể tuỳ ý thay đổi vị trí xuất dữ liệu thành bất kỳ vị trí tập dữ liệu nào được BigQuery hỗ trợ.
Nếu đã bật tính năng xuất dữ liệu từ giữa tháng 10 năm 2024 trở đi, thì bạn có thể chọn bất kỳ vị trí tập dữ liệu nào được BigQuery hỗ trợ trong quá trình thiết lập.
Một điểm khác biệt khác trong cơ sở hạ tầng mới là cơ sở hạ tầng này không hỗ trợ việc điền lại dữ liệu từ trước khi bạn bật tính năng xuất. (Với cơ sở hạ tầng cũ, bạn có thể chèn lại dữ liệu tối đa 30 ngày trước ngày bật.) Cấu trúc mới hỗ trợ điền dữ liệu cũ trong tối đa 30 ngày qua hoặc cho ngày gần đây nhất mà bạn bật tính năng xuất sang BigQuery (tuỳ theo ngày nào gần đây nhất).
Điều kiện tiên quyết để nâng cấp
Trước khi nâng cấp lên cơ sở hạ tầng mới, hãy xác nhận rằng bạn đáp ứng điều kiện tiên quyết sau: Các bảng BigQuery theo lô hiện tại của bạn có giá trị nhận dạng khớp với mã gói hoặc tên gói được đặt cho Ứng dụng Firebase đã đăng ký.
Ví dụ:
Nếu có bảng BigQuery tên là
com_yourcompany_yourproject_IOS
, thì bạn phải có Ứng dụng Firebase iOS+ được đăng ký trong dự án Firebase của mình bằng mã góicom.yourcompany.yourproject
.Nếu có một bảng BigQuery tên là
com_yourcompany_yourproject_ANDROID
, thì bạn phải có một Ứng dụng Android Firebase được đăng ký trong dự án Firebase của mình với tên gói làcom.yourcompany.yourproject
.
Sau đây là cách tìm tất cả Ứng dụng Firebase đã đăng ký trong dự án Firebase:
Trong bảng điều khiển Firebase, hãy chuyển đến Cài đặt dự án.
Di chuyển xuống thẻ Ứng dụng của bạn, sau đó nhấp vào Ứng dụng Firebase mà bạn muốn để xem thông tin của ứng dụng, bao gồm cả giá trị nhận dạng.
Cơ sở hạ tầng xuất mới sẽ xuất dữ liệu của từng ứng dụng dựa trên tên gói hoặc mã gói được đặt cho Ứng dụng Firebase đã đăng ký. Để không làm gián đoạn quy trình làm việc BigQuery, điều quan trọng là bạn phải đảm bảo các bảng theo lô hiện tại đã có tên chính xác để cơ sở hạ tầng mới có thể thêm tất cả dữ liệu mới vào các bảng hiện có. Nếu tên bảng theo lô không khớp với Ứng dụng Firebase đã đăng ký nhưng bạn vẫn muốn nâng cấp, hãy liên hệ với Nhóm hỗ trợ Firebase.
Cách nâng cấp lên cơ sở hạ tầng mới
Nếu đã bật tính năng xuất, bạn có thể nâng cấp lên cơ sở hạ tầng mới bằng cách tắt rồi bật lại tính năng xuất dữ liệu Crashlytics trong bảng điều khiển Firebase.
Sau đây là các bước chi tiết:
Trong bảng điều khiển Firebase, hãy chuyển đến trang Tích hợp.
Trong thẻ BigQuery, hãy nhấp vào Quản lý.
Tắt thanh trượt Crashlytics để tắt tính năng xuất. Khi được nhắc, hãy xác nhận rằng bạn muốn ngừng xuất dữ liệu.
Ngay lập tức, hãy bật lại thanh trượt Crashlytics để bật lại tính năng xuất. Khi được nhắc, hãy xác nhận rằng bạn muốn xuất dữ liệu.
Quá trình xuất dữ liệu Crashlytics sang BigQuery hiện đang sử dụng cơ sở hạ tầng xuất mới.