Xuất dữ liệu trong Firebase Crashlytics sang BigQuery

Bạn có thể xuất dữ liệu Firebase Crashlytics của mình 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, 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 đó cho mục đích trực quan hoá và tạo trang tổng quan tuỳ chỉnh bằng Google Data Studio.BigQuery

Bật tính năng xuất sang BigQuery

  1. Trong bảng điều khiển Firebase, hãy chuyển đến trang Tích hợp.

  2. Trong thẻ BigQuery, hãy nhấp vào Liên kết.

  3. 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 có quyề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 bài viết Thay đổi vị trí cho các tệp xuất hiện có.

    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 chế độ đồ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 hôm sau thì tập dữ liệu đầu tiên mới đượ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 các thao tác hoặc công việc tiếp theo dựa trên một thời gian xuất cụ thể.

  • 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 sẽ 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 điền lại dữ liệu theo cách thủ công cho bảng hàng loạt 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 (tuỳ theo 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, bạn cũng có thể điền dữ liệu từ 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 theo luồng Crashlytics sang BigQuery, tất cả cá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.

Để tắt tính năng xuất sang BigQuery, hãy huỷ liên kết dự á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 trong tập dữ liệu Crashlytics cho mỗi ứng dụng trong dự án của bạn. Firebase đặt tên cho các bảng dựa trên mã 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 com.google.test sẽ nằm trong một bảng có tên com_google_test_ANDROID. Bảng lô này được cập nhật một lần mỗi ngày. Nếu bạn bật chế độ 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 vào một bảng có tên là com_google_test_ANDROID_REALTIME.

Mỗi hàng trong bảng biểu thị 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.

Crashlytics xuất trực tuyến 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 công cụ này cho mọi mục đích cần đến dữ liệu trực tiếp, chẳng hạn như trình bày thông tin trong một trang tổng quan trực tiếp, xem trực tiếp quá trình phát hành 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 tuỳ chỉnh.

Khi bật tính năng xuất dữ liệu theo luồng 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 giữa các bảng mà bạn nên lưu ý:

Bảng lô Bảng theo thời gian thực
  • Dữ liệu được xuất mỗi ngày một lần.
  • Các sự kiện được lưu trữ lâu dài trước khi ghi hàng loạt vào BigQuery.
  • Dữ liệu có thể được bổ sung tối đa 30 ngày trước đó*.
  • Dữ liệu được xuất theo thời gian thực.
  • Không có tính năng lấp đầy.

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ữ các sự kiện một cách bền vững trước khi ghi chúng và có thể điền lại 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 ngay dữ liệu đó vào BigQuery. Vì vậy, đây là lựa chọn 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 kết hợp để tận dụng lợi ích của cả hai.

Theo mặc định, bảng thời gian thực có thời gian hết hạn phân vùng là 30 ngày. Để tìm hiểu cách sửa đổi chế độ 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ợ điền dữ liệu cũ trong phần Nâng cấp lên cơ sở hạ tầng xuất dữ liệu mới.

Bật tính năng xuất dữ liệu truyền trực tuyến Crashlytics sang BigQuery

  1. Trong bảng điều khiển Firebase, hãy chuyển đến trang Tích hợp.

  2. Trong thẻ BigQuery, hãy nhấp vào Quản lý.

  3. Đánh dấu vào hộp Bao gồm lượt phát trực tuyến.

Thao tác này cho phép phát trực tuyến cho tất cả cá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 thô về sự cố, bao gồm loại thiết bị, hệ điều hành, các trường hợp 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 chính xác dữ liệu Crashlytics nào được xuất và sơ đồ 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 Trực quan hoá dữ liệu Crashlytics đã xuất bằng Data Studio.

Tạo chế độ xem

Bạn có thể chuyển đổi các truy vấn thành khung 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 bài viết Tạo khung hiển thị trong tài liệu BigQuery.

Chạy truy vấn

Các ví dụ sau đây minh hoạ những 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 các 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 chúng có thể bổ sung cho hoạt động phân tích và hiểu biết của bạn về dữ liệu sự cố.

Ví dụ 1: Số lượt gặp sự cố theo ngày

Sau khi nỗ lực 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 đã sẵn sàng ra mắt ứng dụng chia sẻ ảnh mới. Trước khi làm việc đó, bạn muốn kiểm tra số lượng sự cố mỗi ngày trong tháng qua để đảm bảo rằng việc kiểm thử lỗi đã giúp ứng dụng ổn định hơn theo thời gian.

Dưới đây là một ví dụ về truy vấn cho ứ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 những sự cố phổ biến nhất

Để ưu tiên đúng cách các kế hoạch sản xuất, bạn cần tìm ra 10 sự cố phổ biến nhất trong ứng dụng của mình. Bạn tạo một truy vấn cung cấp các điểm dữ liệu liên quan.

Dưới đây là một ví dụ về truy vấn cho ứ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 đ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 giải mới của các vấn đề cụ thể về thiết bị đang đến, đặc biệt là đối với Android. Để giải quyết những lo ngại về khả năng tương thích sắp xảy ra, bạn đã tổng hợp 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à một ví dụ về truy vấn cho ứ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 và muốn biết cấp độ nào trong trò chơi của bạn gặp 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á này 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ác giá trị current_level được liên kết với từng sự kiện gặp sự cố.

Dưới đây là một ví dụ về truy vấn cho ứ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 User ID

Bạn có một ứng dụng Android đang ở giai đoạn tiếp cận sớm. Hầu hết người dùng đều thích ứng dụng của bạn, nhưng 3 người dùng đã gặp phải số lượng sự cố bất thường. Để tìm ra nguyên nhân của vấn đề, bạn viết một truy vấn để kéo tất cả các sự kiện gặp sự cố cho những người dùng đó bằng cách sử dụng mã nhận dạng người dùng của họ.

Dưới đây là một ví dụ về truy vấn cho ứ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ử beta. Nhóm của bạn có thể sử dụng truy vấn trong ví dụ"Tìm lỗi phổ biến nhất" ở trên để xác định mã vấn đề cụ thể về lỗi. Giờ đây, 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 chịu ảnh hưởng của sự cố này.

Dưới đây là một ví dụ về truy vấn cho ứ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 bị ảnh hưởng bởi vấn đề về sự cố, được phân tích theo quốc gia

Nhóm của bạn phát hiện thấy một lỗi nghiêm trọng trong quá trình triển khai một bản phát hành mới. Bạn có thể sử dụng truy vấn trong ví dụ"Tìm các sự cố phổ biến nhất" ở trên để xác định mã vấn đề cụ thể về sự cố. Giờ đây, nhóm của bạn muốn biết liệu sự cố này có lan rộng đến người dùng ở nhiều 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ững việc sau:

  1. Bật tính năng xuất dữ liệu Google Analytics sang BigQuery. Hãy xem phần Xuất dữ liệu dự án sang BigQuery.

  2. 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");
    
  3. Viết mộ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.

    Sau đây là một ví dụ về truy vấn cho ứng dụng Android. Đối với ứng dụng iOS, hãy 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ừ đầu ngày đến giờ

Dưới đây là một ví dụ về truy vấn cho ứ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, tính cả hôm nay

Bạn cũng có thể kết hợp các bảng theo lô và bảng theo thời gian thực bằng một truy vấn kết hợp để 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ể dùng DISTINCT event_id để loại bỏ mọi sự kiện trùng lặp trong hai bảng.

Dưới đây là một ví dụ về truy vấn cho ứ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 chế độ 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 diễn ra tối đa 2 ngày trước khi liên kết, đồng thời bạn có thể đ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 sẽ tạo một bảng trong tập dữ liệu cho mỗi ứng dụng trong dự án của bạ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, với 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 com.google.test sẽ nằm trong một 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 một bảng có tên com_google_test_ANDROID_REALTIME

Các bảng chứa một bộ dữ liệu Crashlytics tiêu chuẩn, ngoài mọi khoá Crashlytics tuỳ chỉnh do 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 là giống nhau đối với sự cố, lỗi không nghiêm trọng và lỗi ANR. Nếu bạn bật chế độ Crashlyticsxuất trực tuyến 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 những 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 này:

Tên trường Loại dữ liệu Mô tả
platform STRING Nền tảng của ứng dụng như đã đă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 khi được đăng ký trong dự án Firebase (ví dụ: com.google.gmail)
Đối với các ứng dụng trên nền tảng Apple, đây là mã nhận dạng gói của ứng dụng.
Đối với các ứ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 Ứ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 quan đến 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 quan.
event_timestamp DẤU THỜI GIAN Thời điểm xảy ra sự kiện
device RECORD Thiết bị mà sự kiện diễn ra
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ớ đã 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 Số byte bộ nhớ còn lại
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 của hệ điều hành trên thiết bị
operating_system.modification_state STRING Thiết bị đã bị sửa đổi hay chưa (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 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 được 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 REPEATED RECORD 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 giúp xác định 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 REPEATED RECORD Thông điệp nhật ký có dấu thời gian do trình ghi nhật ký Crashlytics tạo, 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 REPEATED RECORD Google AnalyticsTập hợp liên kết phân cấp 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 đánh dấu
breadcrumbs.name STRING Tên được liên kết với đường liên kết dạng đánh dấu
breadcrumbs.params REPEATED RECORD Các tham số được liên kết với đường liên kết dạng đánh dấu
breadcrumbs.params.key STRING Khoá thông số được liên kết với đường dẫn
breadcrumbs.params.value STRING Giá trị tham số được liên kết với đường liên kết
blame_frame RECORD Khung được xác định là nguyên nhân gốc gây ra 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 hình
blame_frame.symbol STRING Biểu tượng được kết xuất hoặc biểu tượng thô nếu không kết xuất được
blame_frame.offset INT64 Độ lệch byte vào hình ảnh nhị phân chứa mã
Chưa đặt cho các trường hợp ngoại lệ Java
blame_frame.address INT64 Địa chỉ trong hình ảnh nhị phân chứa mã
Chưa đặt cho các khung Java
blame_frame.library STRING Tên hiển thị của thư viện chứa khung hình
blame_frame.owner STRING Ví dụ: DEVELOPER, VENDOR, RUNTIME, PLATFORM hoặc SYSTEM
blame_frame.blamed BOOLEAN Liệu Crashlytics có xác định khung hình này là nguyên nhân gây ra sự cố hoặc lỗi hay không
exceptions REPEATED RECORD (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ệ lồng nhau đượ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 đưa ra
exceptions.type STRING Loại ngoại lệ (ví dụ: java.lang.IllegalStateException)
exceptions.exception_message STRING Thông báo liên quan đến trường hợp ngoại lệ
exceptions.nested BOOLEAN Đúng cho tất cả, trừ ngoại lệ được ném cuối cùng (nghĩa là bản ghi đầu tiên)
exceptions.title STRING Tiêu đề của chuỗi
exceptions.subtitle STRING Phụ đề của chuỗi
exceptions.blamed BOOLEAN Đúng nếu Crashlytics xác định ngoại lệ chịu trách nhiệm về lỗi hoặc sự cố
exceptions.frames REPEATED RECORD Các khung hình liên kết với trường hợp 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 hình
exceptions.frames.symbol STRING Biểu tượng được kết xuất hoặc biểu tượng thô nếu không kết xuất được
exceptions.frames.offset INT64 Độ lệch byte vào hình ảnh nhị phân chứa mã
Chưa đặt cho các trường hợp ngoại lệ Java
exceptions.frames.address INT64 Địa chỉ trong hình ảnh nhị phân chứa mã
Chưa đặt cho các khung Java
exceptions.frames.library STRING Tên hiển thị của thư viện chứa khung hình
exceptions.frames.owner STRING Ví dụ: DEVELOPER, VENDOR, RUNTIME, PLATFORM hoặc SYSTEM
exceptions.frames.blamed BOOLEAN Liệu Crashlytics có xác định khung hình này là nguyên nhân gây ra sự cố hoặc lỗi hay không
error REPEATED RECORD (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 tuỳ chỉnh được ghi nhật ký của ứng dụng
error.title STRING Tiêu đề của chuỗi
error.subtitle STRING Phụ đề của chuỗi
error.blamed BOOLEAN Liệu Crashlytics có xác định rằng khung hình này là nguyên nhân gây ra lỗi hay không
error.frames REPEATED RECORD Khung của stacktrace
error.frames.line INT64 Số dòng của tệp khung
error.frames.file STRING Tên của tệp khung hình
error.frames.symbol STRING Biểu tượng được kết xuất hoặc biểu tượng thô nếu không kết xuất được
error.frames.offset INT64 Độ lệch byte trong 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 hình
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 hình này là nguyên nhân gây ra lỗi hay không
threads REPEATED RECORD Các luồng có tại thời điểm xảy ra sự kiện
threads.crashed BOOLEAN Chuỗi có bị lỗi hay không
threads.thread_name STRING Tên của luồng
threads.queue_name STRING (Chỉ dành cho ứng dụng 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 gặp sự cố
threads.signal_code STRING Mã của tín hiệu gây ra sự cố cho ứng dụng; chỉ xuất hiện trên các luồng gốc gặp 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 Apple) Mã lỗi của NSError tuỳ chỉnh được ghi lại của ứng dụng
threads.title STRING Tiêu đề của chuỗi
threads.subtitle STRING Phụ đề của chuỗi
threads.blamed BOOLEAN Liệu Crashlytics có xác định khung hình này là nguyên nhân gây ra sự cố hoặc lỗi hay không
threads.frames REPEATED RECORD Các khung hình 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 hình
threads.frames.symbol STRING Biểu tượng được tạo hoặc biểu tượng thô nếu không thể tạo
threads.frames.offset INT64 Độ lệch byte trong 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 hình
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 hình 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 đang 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ý (lõi)
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 Mã 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 độ đổ 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 Unity API
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ố thập phân
unity_metadata.screen_refresh_rate_hz INT64 Tốc độ làm mới 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 chuyển đổi các tập dữ liệu Crashlytics của bạn trong BigQuery thành các báo cáo dễ đọc, dễ chia sẻ và hoàn toàn có thể tuỳ chỉnh.

Để tìm hiểu thêm về cách sử dụng Data Studio, hãy dùng thử hướng dẫn bắt đầu 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, trong đó có một bộ 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 dữ liệu phát trực tiếp 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 thô về sự cố của ứng dụng:

  1. Mở Crashlytics mẫu Trang tổng quan Data Studio.

  2. Nhấp vào Sử dụng mẫu ở góc trên bên phải.

  3. Trong trình đơn thả xuống Nguồn dữ liệu mới, hãy chọn Tạo nguồn dữ liệu mới.

  4. Nhấp vào Chọn trên thẻ BigQuery.

  5. Chọn một bảng chứa dữ liệu Crashlytics đã xuất bằng cách chọn 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 chế độ Crashlyticsxuất trực tuyến sang BigQuery, thì bạn có thể chọn bảng theo thời gian thực.

  6. Trong mục Configuration (Cấu hình), hãy đặt Crashlytics Template level (Cấp mẫu) thành Default (Mặc định).

  7. Nhấp vào Kết nối để tạo nguồn dữ liệu mới.

  8. Nhấp vào Thêm vào báo cáo để quay lại mẫu Crashlytics.

  9. Cuối cùng, hãy nhấp vào Tạo báo cáo để tạo bản sao của Crashlyticsmẫu Trang tổng quan Data Studio.



Nâng cấp lên cơ sở hạ tầng xuất dữ liệu 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 hàng loạt dữ liệu Crashlytics vào BigQuery.

Tất cả dự án Firebase sẽ tự động được nâng cấp lên cơ sở hạ tầng xuất theo lô mới chậm nhất là vào ngày 15 tháng 9 năm 2025. Bạn có thể nâng cấp trước ngày này, nhưng hãy đảm bảo rằng các bảng theo lô BigQuery đáp ứng các điều kiện tiên quyết để nâng cấp.

Bạn có thể nâng cấp lên cơ sở hạ tầng mới, nhưng hãy đảm bảo rằng các bảng theo lô BigQuery đáp ứng các điều kiện tiên quyết để nâng cấp.

Xác định xem bạn có đang sử dụng cơ sở hạ tầng mới hay không

Nếu bạn bật tính năng xuất theo lô từ giữa tháng 10 năm 2024 trở đi, thì dự án Firebase của bạn sẽ tự động sử dụng cơ sở hạ tầng xuất dữ liệu mới.

Bạn có thể kiểm tra cơ sở hạ tầng mà dự án của mình đang sử dụng: Chuyển đến bảng điều khiển Google Cloud, nếu "cấu hình chuyển dữ liệu" của bạn được gắn nhãn Firebase Crashlytics with Multi-Region Support, thì dự án của bạn đang sử dụng cơ sở hạ tầng xuất dữ liệu mới.

Những điểm khác biệt quan trọng giữa cơ sở hạ tầng xuất dữ liệu cũ và cơ sở hạ tầng xuất dữ liệu mới

  • Cơ sở hạ tầng mới hỗ trợ Crashlytics vị trí tập dữ liệu bên ngoài Hoa Kỳ.

    • Đã bật tính năng xuất trước giữa tháng 10 năm 2024 đã nâng cấp lên cơ sở hạ tầng xuất mới – Giờ đây, bạn có thể thay đổi vị trí xuất dữ liệu (không bắt buộc).

    • Đã bật tính năng xuất dữ liệu từ giữa tháng 10 năm 2024 trở đi – Bạn được nhắc chọn vị trí để xuất dữ liệu trong quá trình thiết lập.

  • Cơ sở hạ tầng mới 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.

    • Cơ sở hạ tầng cũ hỗ trợ điền lại dữ liệu tối đa 30 ngày trước ngày bạn bật tính năng xuất.

    • Cơ sở hạ tầng mới hỗ trợ việc điền lại 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 (tuỳ theo ngày nào gần đây nhất).

  • Các bảng theo lô BigQuery có tên cơ sở hạ tầng mới sử dụng các giá trị nhận dạng được đặt cho Ứng dụng Firebase trong dự án Firebase của bạn.

    • Cơ sở hạ tầng cũ ghi dữ liệu vào các bảng theo lô có tên dựa trên mã nhận dạng gói hoặc tên gói trong cấu hình Firebase trong cơ sở mã của ứng dụng.

    • Cơ sở hạ tầng mới ghi dữ liệu vào các bảng theo lô có tên dựa trên mã nhận dạng gói hoặc tên gói được đặt cho các ứng dụng Firebase đã đăng ký trong dự án Firebase.

Bước 1: Điều kiện tiên quyết để nâng cấp

  1. Kiểm tra để đảm bảo các bảng theo lô BigQuery hiện có của bạn sử dụng các giá trị nhận dạng khớp với mã nhận dạng gói hoặc tên gói được đặt cho các Ứng dụng Firebase đã đăng ký trong dự án Firebase. Nếu không khớp, bạn có thể gặp phải tình trạng gián đoạn đối với dữ liệu hàng loạt đã xuất. Hầu hết các dự án sẽ ở trạng thái phù hợp và tương thích, nhưng bạn cần kiểm tra trước khi nâng cấp.

    • Bạn có thể tìm thấy tất cả Ứng dụng Firebase đã đăng ký trong dự án Firebase của mình trong bảng điều khiển Firebase: Chuyển đến phần Cài đặt dự án, sau đó di chuyển đến thẻ Ứng dụng của bạn để xem tất cả Ứng dụng Firebase và thông tin của các ứng dụng đó.

    • Bạn có thể tìm thấy tất cả các bảng BigQuery theo lô trong trang BigQuery của bảng điều khiển Google Cloud.

    Ví dụ: sau đây là các trạng thái lý tưởng mà bạn sẽ không gặp phải vấn đề nào khi nâng cấp:

    • Bạn có một bảng lô có tên là com_yourcompany_yourproject_IOS và một ứng dụng Firebase iOS+ có mã nhận dạng gói com.yourcompany.yourproject đã đăng ký trong dự án Firebase của bạn.

    • Bạn có một bảng lô có tên là com_yourcompany_yourproject_ANDROID và một ứng dụng Android Firebase có tên gói com.yourcompany.yourproject được đăng ký trong dự án Firebase.

  2. Nếu bạn có tên bảng hàng loạt không khớp với các giá trị nhận dạng được đặt cho Ứng dụng Firebase đã đăng ký, thì hãy làm theo hướng dẫn sau này trên trang này trước khi nâng cấp theo cách thủ công hoặc trước ngày 15 tháng 9 năm 2025 để tránh làm gián đoạn quá trình xuất hàng loạt.

Bước 2: Nâng cấp lên cơ sở hạ tầng mới theo cách thủ công

Nếu đã bật tính năng xuất hàng loạt trước giữa tháng 10 năm 2024, thì bạn có thể nâng cấp lên cơ sở hạ tầng mới theo cách thủ công bằng cách chỉ cần 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:

  1. Trong bảng điều khiển Firebase, hãy chuyển đến trang Tích hợp.

  2. Trong thẻ BigQuery, hãy nhấp vào Quản lý.

  3. 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.

  4. Ngay lập tức bật lại nút 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.

Tên bảng hàng loạt hiện có của bạn không khớp với giá trị nhận dạng Ứng dụng Firebase