ส่งออกข้อมูล Firebase Crashlytics ไปยัง BigQuery

คุณส่งออกข้อมูล Crashlytics ไปยัง BigQuery เพื่อวิเคราะห์เพิ่มเติมได้ BigQuery ช่วยให้คุณวิเคราะห์ข้อมูลโดยใช้ BigQuery SQL ส่งออกไปยังผู้ให้บริการคลาวด์รายอื่น และใช้ข้อมูลนี้เพื่อแสดงแดชบอร์ดที่กำหนดเองและแดชบอร์ดได้ด้วย Google Data Studio

เปิดใช้การส่งออก BigQuery

  1. ไปที่หน้าการผสานรวม ในคอนโซล Firebase
  2. คลิกลิงก์ในการ์ด BigQuery
  3. ทำตามวิธีการบนหน้าจอเพื่อเปิดใช้ BigQuery

สิ่งที่จะเกิดขึ้นเมื่อลิงก์โปรเจ็กต์กับ BigQuery มีดังนี้

  • Firebase จะตั้งค่าการซิงค์ข้อมูลรายวันจากโปรเจ็กต์ Firebase ไปยัง BigQuery
  • โดยค่าเริ่มต้น แอปทั้งหมดในโปรเจ็กต์จะลิงก์กับ BigQuery อยู่แล้วและแอปที่คุณเพิ่มลงในโปรเจ็กต์ในภายหลังจะลิงก์กับ BigQuery โดยอัตโนมัติ คุณสามารถจัดการแอปที่ส่งข้อมูลได้
  • Firebase จะส่งออกสำเนาข้อมูลที่มีอยู่ไปยัง BigQuery สำหรับแอปที่ลิงก์แต่ละแอป รายการนี้จะมีตารางกลุ่มที่มีข้อมูลจากการซิงค์รายวัน
  • หากคุณเปิดใช้การส่งออกแบบสตรีมสำหรับ BigQuery ของ Crashlytics แอปที่ลิงก์ทั้งหมดจะมีตารางแบบเรียลไทม์ที่มีข้อมูลซึ่งอัปเดตอยู่เสมอด้วย

หากต้องการปิดใช้งาน BigQuery Export ให้ยกเลิกการลิงก์โปรเจ็กต์ในคอนโซล Firebase

ข้อมูลที่ส่งออกไปยัง BigQuery

ระบบส่งออกข้อมูล Firebase Crashlytics ไปยังชุดข้อมูล BigQuery ชื่อ firebase_crashlytics แล้ว โดยค่าเริ่มต้น ระบบจะสร้างแต่ละตารางภายในชุดข้อมูล Crashlytics สำหรับแต่ละแอปในโปรเจ็กต์ Firebase ตั้งชื่อตารางตามตัวระบุ Bundle ของแอป แล้วแปลงเครื่องหมายจุดเป็นขีดล่างและชื่อแพลตฟอร์มต่อท้าย

เช่น ข้อมูลของแอปที่มีรหัส com.google.test จะอยู่ในตารางชื่อ com_google_test_ANDROID ตารางกลุ่มนี้จะอัปเดตวันละครั้ง หากคุณเปิดใช้การส่งออกแบบสตรีมสำหรับ BigQuery ของ Crashlytics ระบบจะสตรีมข้อมูล Firebase Crashlytics ไปยัง com_google_test_ANDROID_REALTIME แบบเรียลไทม์ด้วย

แต่ละแถวในตารางแสดงเหตุการณ์ที่เกิดขึ้นในแอป ซึ่งรวมถึงข้อขัดข้อง ข้อผิดพลาดที่ไม่ร้ายแรง และ ANR

เปิดใช้การส่งออกแบบสตรีม BigQuery ของ Crashlytics

คุณสตรีมข้อมูล Crashlytics แบบเรียลไทม์ได้ด้วย BigQueryStreaming คุณสามารถใช้รายงานนี้เพื่อวัตถุประสงค์ใดก็ตามที่ต้องใช้ข้อมูลสด เช่น การนำเสนอข้อมูลในหน้าแดชบอร์ดสด การดูการเปิดตัวแบบสด หรือการตรวจสอบปัญหาเกี่ยวกับแอปพลิเคชันที่ทำให้เกิดการแจ้งเตือนและเวิร์กโฟลว์ที่กำหนดเอง

การส่งออกแบบสตรีม BigQuery ของ Crashlytics ไม่พร้อมใช้งานสำหรับแซนด์บ็อกซ์ของ BigQuery

เมื่อเปิดใช้การส่งออกแบบสตรีม BigQuery ของ Crashlytics นอกจากตารางกลุ่มแล้ว คุณจะมีตารางแบบเรียลไทม์ด้วย ข้อแตกต่างที่คุณควรทราบระหว่างตารางต่างๆ มีดังนี้

ตารางกลุ่ม ตารางแบบเรียลไทม์
  • ส่งออกข้อมูลวันละครั้ง
  • เหตุการณ์ที่จัดเก็บไว้อย่างคงทนก่อนการเขียนแบบกลุ่มไปยัง BigQuery
  • สามารถทดแทนข้อมูลล่วงหน้าได้ไม่เกิน 30 วัน
  • ส่งออกข้อมูลแบบเรียลไทม์แล้ว
  • ไม่มีโฆษณาทดแทน

ตารางแบบกลุ่มเหมาะสำหรับการวิเคราะห์ในระยะยาวและระบุแนวโน้มเมื่อเวลาผ่านไป เนื่องจากเราจัดเก็บเหตุการณ์อย่างมั่นคงก่อนที่จะเขียน และสามารถทดแทนข้อมูลลงในตารางได้นานถึง 30 วัน เมื่อเราเขียนข้อมูลลงในตารางแบบเรียลไทม์ของคุณ เราจะเขียนข้อมูลไปยัง BigQuery ทันที จึงเหมาะสำหรับหน้าแดชบอร์ดแบบเรียลไทม์และการแจ้งเตือนที่กำหนดเอง และสามารถนำ 2 ตารางนี้มารวมกับคำค้นหาการต่อวิดีโอ เพื่อให้ได้รับประโยชน์จากทั้ง 2 ตาราง ดูคำค้นหาตัวอย่างที่ 9 ด้านล่าง

โดยค่าเริ่มต้น ตารางแบบเรียลไทม์จะมีเวลาหมดอายุของพาร์ติชันอยู่ที่ 30 วัน ดูวิธีแก้ไขได้ที่การอัปเดตการหมดอายุของพาร์ติชัน

เปิดใช้การสตรีม Crashlytics บน Crashlytics

หากต้องการเปิดใช้สตรีมมิง ให้ไปที่ส่วน Crashlytics ในหน้าการผสานรวม BigQuery แล้วเลือกช่องทำเครื่องหมายรวมสตรีมมิง

เทมเพลต Data Studio

หากต้องการเปิดใช้ข้อมูลแบบเรียลไทม์ในเทมเพลต Data Studio ให้ทำตามวิธีการในการแสดงภาพข้อมูล Crashlytics ที่ส่งออกด้วย Data Studio

การดู

คุณเปลี่ยนตัวอย่างการค้นหาด้านล่างเป็นมุมมองได้โดยใช้ BigQuery UI ดู การสร้างมุมมอง สำหรับคำแนะนำโดยละเอียด

คุณจะทำอะไรได้บ้างกับข้อมูลที่ส่งออก

การส่งออก BigQuery มีข้อมูลดิบเกี่ยวกับข้อขัดข้อง ได้แก่ ประเภทอุปกรณ์ ระบบปฏิบัติการ ข้อยกเว้น (แอป Android) หรือข้อผิดพลาด (แอป Apple) และบันทึก Crashlytics รวมถึงข้อมูลอื่นๆ

การทำงานกับข้อมูล Firebase Crashlytics ใน BigQuery

ตัวอย่างต่อไปนี้แสดงการค้นหาที่คุณเรียกใช้กับข้อมูล Crashlytics ได้ การค้นหาเหล่านี้จะสร้างรายงานที่ไม่อยู่ในแดชบอร์ด Crashlytics

ตัวอย่างคำค้นหา Crashlytics

ตัวอย่างต่อไปนี้แสดงวิธีสร้างรายงานที่รวบรวมข้อมูลเหตุการณ์ข้อขัดข้องไว้ในสรุปที่เข้าใจได้ง่ายขึ้น

ตัวอย่างที่ 1: ข้อขัดข้องตามวัน

หลังจากแก้ไขข้อบกพร่องให้ได้มากที่สุดแล้ว หัวหน้านักพัฒนาคิดว่าในที่สุดทีมก็พร้อมที่จะเปิดตัวแอปแชร์รูปภาพใหม่ ก่อนที่จะดำเนินการ พวกเขาต้องการตรวจสอบจำนวนข้อขัดข้องต่อวันในเดือนที่ผ่านมาเพื่อให้แน่ใจว่าข้อบกพร่องที่แก้ไขได้ทำให้แอปมีความเสถียรมากขึ้นเมื่อเวลาผ่านไป

SELECT
  COUNT(DISTINCT event_id) AS number_of_crashes,
  FORMAT_TIMESTAMP("%F", event_timestamp) AS date_of_crashes
FROM
 `projectId.firebase_crashlytics.package_name_ANDROID`
GROUP BY
  date_of_crashes
ORDER BY
  date_of_crashes DESC
LIMIT 30;

ตัวอย่างที่ 2: ค้นหาข้อขัดข้องที่พบได้ทั่วไปมากที่สุด

ผู้จัดการโครงการต้องพิจารณาถึงวิธีชี้ให้เห็นข้อขัดข้องที่แพร่กระจายมากที่สุด 10 อันดับแรกในผลิตภัณฑ์ของตนเพื่อจัดลำดับความสำคัญของแผนการผลิตอย่างเหมาะสม สร้างคำค้นหาที่ให้ข้อมูลที่เกี่ยวข้อง

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
  `projectId.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 อันดับแรก

ฤดูใบไม้ร่วงเป็นฤดูกาลใหม่ของโทรศัพท์ นักพัฒนาซอฟต์แวร์ก็จะยังทราบดีว่านี่เป็นฤดูกาลใหม่ที่เจาะจง สำหรับอุปกรณ์โดยเฉพาะด้วย เพื่อรู้เท่าทันข้อกังวลเรื่องความเข้ากันได้ที่พบได้บ่อย พวกเขาจึงรวบรวมคำค้นหาที่ระบุอุปกรณ์ 10 เครื่องที่พบปัญหาขัดข้องมากที่สุดในสัปดาห์ที่ผ่านมา

SELECT
  device.model,
COUNT(DISTINCT event_id) AS number_of_crashes
FROM
  `projectId.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: กรองตามคีย์ที่กำหนดเอง

นักพัฒนาเกมต้องการทราบว่าเกมของตนระดับไหนที่พบปัญหาข้อขัดข้องมากที่สุด ทีมตั้งค่าคีย์ Crashlytics ที่กำหนดเอง current_level และอัปเดตคีย์ดังกล่าวทุกครั้งที่ผู้ใช้ไปถึงระดับใหม่เพื่อช่วยติดตามสถิตินั้น

Objective-C

CrashlyticsKit setIntValue:3 forKey:@"current_level";

Swift

Crashlytics.sharedInstance().setIntValue(3, forKey: "current_level");

Java

Crashlytics.setInt("current_level", 3);

จากนั้นก็เขียนคำค้นหาเพื่อรายงานการแจกแจงค่า current_level ที่เชื่อมโยงกับเหตุการณ์ข้อขัดข้องแต่ละรายการด้วยคีย์ดังกล่าวใน BigQuery Export

SELECT
COUNT(DISTINCT event_id) AS num_of_crashes,
  value
FROM
  `projectId.firebase_crashlytics.package_name_ANDROID`
UNNEST(custom_keys)
WHERE
  key = "current_level"
GROUP BY
  key,
  value
ORDER BY
  num_of_crashes DESC

ตัวอย่างที่ 5: การดึงข้อมูลรหัสผู้ใช้

นักพัฒนาแอปมีแอปเวอร์ชันทดลองใช้ก่อนเปิดตัว ผู้ใช้ส่วนใหญ่ชอบแอปนี้ แต่มี 3 เครื่อง พบการขัดข้องหลายครั้ง ในการที่ที่ด้านล่างของปัญหา ทางทีมเขียนข้อความค้นหาที่ดึงเหตุการณ์ข้อขัดข้องทั้งหมดของผู้ใช้เหล่านั้นโดยใช้รหัสผู้ใช้

SELECT *
FROM
  `projectId.firebase_crashlytics.package_name_ANDROID`
WHERE
  user.id IN ("userid1", "userid2", "userid3")
ORDER BY
  user.id
 

ตัวอย่างที่ 6: ค้นหาผู้ใช้ทั้งหมดที่เผชิญปัญหาข้อขัดข้องบางอย่าง

นักพัฒนาซอฟต์แวร์ได้เผยแพร่ข้อบกพร่องร้ายแรงให้กับกลุ่มผู้ทดสอบเวอร์ชันเบต้า ทีมสามารถใช้การค้นหาจากตัวอย่างที่ 2 ด้านบนเพื่อระบุรหัสปัญหาข้อขัดข้องที่เฉพาะเจาะจง ตอนนี้พวกเขาต้องการเรียกใช้การค้นหาเพื่อแยกรายชื่อผู้ใช้แอปที่ได้รับผลกระทบจากข้อขัดข้องนี้

SELECT user.id as user_id
FROM
  `projectId.firebase_crashlytics.package_name_ANDROID`
WHERE
  issue_id = "YOUR_ISSUE_ID"
  AND application.display_version = ""
  AND user.id != ""
ORDER BY
  user.id;

ตัวอย่างที่ 7: จำนวนผู้ใช้ที่ได้รับผลกระทบจากปัญหาข้อขัดข้อง โดยแยกตามประเทศ

ตอนนี้ทีมตรวจพบข้อบกพร่องร้ายแรงระหว่างการเปิดตัวรุ่นใหม่ พวกเขาใช้การค้นหาจากตัวอย่างที่ 2 ด้านบนเพื่อระบุรหัสปัญหาข้อขัดข้องที่เฉพาะเจาะจงได้ ตอนนี้ทีมของเราอยากทราบว่าข้อขัดข้องนี้แพร่กระจายไปสู่ผู้ใช้ในประเทศต่างๆ ทั่วโลกแล้วหรือไม่

ในการเขียนคำค้นหานี้ ทีมจะต้อง

  1. เปิดใช้การส่งออก BigQuery สำหรับ Google Analytics โปรดดูการส่งออกข้อมูลโปรเจ็กต์ไปยัง BigQuery

  2. อัปเดตแอปเพื่อส่ง User-ID ไปยังทั้ง Google Analytics SDK และ Crashlytics SDK

    Objective-C
    CrashlyticsKit setUserIdentifier:@"123456789";
    FIRAnalytics setUserID:@"12345678 9";
    
    Swift
    Crashlytics.sharedInstance().setUserIdentifier("123456789");
    Analytics.setUserID("123456789");
    
    Java
    Crashlytics.setUserIdentifier("123456789");
    mFirebaseAnalytics.setUserId("123456789");
    
  3. เขียนการค้นหาที่ใช้ช่อง User-ID เพื่อผูกเหตุการณ์ในชุดข้อมูล BigQuery ของ Google Analytics ที่มีข้อขัดข้องในชุดข้อมูล Crashlytics ของ Crashlytics ดังนี้

    SELECT DISTINCT c.issue_id, a.geo.country, COUNT(DISTINCT c.user.id) as num_users_impacted
    FROM `projectId.firebase_crashlytics.package_name_ANDROID` c
    INNER JOIN  `projectId.analytics_YOUR_TABLE.events_*` a on c.user.id = a.user_id
    WHERE
     c.issue_id = "YOUR_ISSUE_ID"
     AND a._TABLE_SUFFIX BETWEEN '20190101'
     AND '20200101'
    GROUP BY
     c.issue_id,
     a.geo.country,
     c.user.id
    

ตัวอย่างที่ 8: 5 ประเด็นแรกจนถึงตอนนี้

ต้องเปิดใช้การส่งออกแบบสตรีมสำหรับ BigQuery ของ Crashlytics

SELECT
  issue_id,
  COUNT(DISTINCT event_id) AS events
FROM
  `your_project.firebase_crashlytics.package_name_ANDROID_REALTIME`
WHERE
  DATE(event_timestamp) = CURRENT_DATE()
GROUP BY
  issue_id
ORDER BY
  events DESC
LIMIT
  5;

ตัวอย่างที่ 9: 5 ปัญหายอดนิยมตั้งแต่ DATE รวมถึงวันนี้

ต้องเปิดใช้การส่งออกแบบสตรีมสำหรับ BigQuery ของ Crashlytics

ในตัวอย่างนี้ เรารวมตารางแบบกลุ่มและตารางแบบเรียลไทม์เพื่อเพิ่มข้อมูลแบบเรียลไทม์ลงในข้อมูลกลุ่มที่เชื่อถือได้ เนื่องจาก event_id เป็นคีย์หลัก เราจึงใช้ DISTINCT event_id เพื่อกรองข้อมูลเหตุการณ์ทั่วไปที่ซ้ำกันออกจากทั้ง 2 ตารางได้

SELECT
  issue_id,
  COUNT(DISTINCT event_id) AS events
FROM (
  SELECT
    issue_id,
    event_id,
    event_timestamp
  FROM
    `your_project.firebase_crashlytics.package_name_ANDROID_REALTIME`
  UNION ALL
  SELECT
    issue_id,
    event_id,
    event_timestamp
  FROM
    `your_project.firebase_crashlytics.package_name_ANDROID`)
WHERE
  event_timestamp >= "2020-01-13"
GROUP BY
  issue_id
ORDER BY
  events DESC
LIMIT
  5;

ทำความเข้าใจสคีมา Firebase Crashlytics ใน BigQuery

เมื่อคุณลิงก์ Crashlytics กับ BigQuery แล้ว Firebase จะส่งออกเหตุการณ์ล่าสุด (ข้อขัดข้อง ข้อผิดพลาดที่ไม่ร้ายแรง และ ANR) รวมถึงเหตุการณ์สูงสุด 2 วันก่อนการลิงก์ พร้อมตัวเลือกในการทดแทนข้อมูลสูงสุด 30 วัน

จากจุดนั้นจนกว่าคุณจะปิดใช้ลิงก์ Firebase จะส่งออกเหตุการณ์ Crashlytics เป็นประจำทุกวัน ซึ่งอาจใช้เวลา 2-3 นาทีเพื่อให้ข้อมูลพร้อมใช้งานใน BigQuery หลังจากการส่งออกแต่ละครั้ง

ชุดข้อมูล

Firebase Crashlytics จะสร้างชุดข้อมูลใหม่ใน BigQuery สำหรับข้อมูล Crashlytics ชุดข้อมูลจะครอบคลุมทั้งโปรเจ็กต์แม้ว่าจะมีหลายแอปก็ตาม

ตาราง

Firebase Crashlytics จะสร้างตารางในชุดข้อมูลของแต่ละแอปในโปรเจ็กต์ เว้นแต่คุณจะเลือกไม่ใช้การส่งออกข้อมูลสำหรับแอปนั้นไว้ Firebase ตั้งชื่อตารางตามตัวระบุ Bundle ของแอป พร้อมใส่จุดที่แปลงเป็นขีดล่าง และใช้ชื่อแพลตฟอร์มต่อท้าย

เช่น ข้อมูลสำหรับแอป Android ที่มีรหัส com.google.test จะอยู่ในตารางชื่อ com_google_test_ANDROID และข้อมูลแบบเรียลไทม์ (หากเปิดใช้) จะอยู่ในตารางชื่อ com_google_test_ANDROID_REALTIME

ตารางมีชุดข้อมูล Crashlytics มาตรฐานนอกเหนือจากคีย์ Crashlytics ที่กำหนดเองซึ่งนักพัฒนาแอปกำหนด

แถว

แต่ละแถวในตารางแสดงข้อผิดพลาดที่แอปพบ

คอลัมน์

คอลัมน์ในตารางจะเหมือนกันสำหรับข้อขัดข้อง ข้อผิดพลาดที่ไม่ร้ายแรง และ ANR หากเปิดใช้การส่งออกแบบสตรีม BigQuery ของ Crashlytics ตารางแบบเรียลไทม์จะมีคอลัมน์เดียวกับตารางกลุ่ม คอลัมน์ภายในการส่งออก จะแสดงอยู่ด้านล่างนี้

ไม่มีสแต็กเทรซ

มีคอลัมน์ในแถวที่แสดงเหตุการณ์ที่ไม่มีสแต็กเทรซ

ชื่อช่อง ประเภทข้อมูล คำอธิบาย
platform STRING แอป Apple หรือ Android
ตัวระบุแพ็กเกจ [bundle_identifier] STRING รหัสชุด เช่น com.google.gmail
รหัสเหตุการณ์ STRING รหัสที่ไม่ซ้ำกันสำหรับกิจกรรม
ร้ายแรง BOOLEAN แอปขัดข้องหรือไม่
ประเภทข้อผิดพลาด STRING ประเภทข้อผิดพลาดของกิจกรรม (FATAL, NON_FATAL, ANR)
รหัสปัญหา STRING ปัญหาที่เกี่ยวข้องกับเหตุการณ์
รหัสตัวแปร [Variant_id] STRING ตัวแปรของปัญหาที่เชื่อมโยงกับเหตุการณ์นี้
โปรดทราบว่ามีเพียงบางเหตุการณ์เท่านั้นที่มีตัวแปรของปัญหาที่เกี่ยวข้อง
event_timestamp การประทับเวลา เวลาที่เกิดเหตุการณ์
อุปกรณ์ RECORD อุปกรณ์ที่เกิดเหตุการณ์
device.manufacturer STRING ผู้ผลิตอุปกรณ์
รุ่นของอุปกรณ์ STRING รุ่นอุปกรณ์
สถาปัตยกรรมอุปกรณ์ STRING X86_32, X86_64, ARMV7, ARM64, ARMV7S หรือ ARMV7K
หน่วยความจำ RECORD สถานะหน่วยความจำของอุปกรณ์
หน่วยความจำที่ใช้แล้ว INT64 จำนวนไบต์ของหน่วยความจำที่ใช้
หน่วยความจำว่าง INT64 ไบต์ของหน่วยความจำที่เหลืออยู่
พื้นที่เก็บข้อมูล RECORD พื้นที่เก็บข้อมูลถาวรของอุปกรณ์
พื้นที่เก็บข้อมูลที่ใช้แล้ว INT64 จำนวนไบต์ของพื้นที่เก็บข้อมูลที่ใช้
พื้นที่เก็บข้อมูลฟรี INT64 ไบต์ของพื้นที่เก็บข้อมูลที่เหลืออยู่
ระบบปฏิบัติการ RECORD รายละเอียดของระบบปฏิบัติการในอุปกรณ์
เวอร์ชันระบบปฏิบัติการ.display_version STRING เวอร์ชันของระบบปฏิบัติการในอุปกรณ์
operating_system.name STRING ชื่อระบบปฏิบัติการในอุปกรณ์
สถานะการทำงานของระบบ.modification_state STRING อุปกรณ์มีการแก้ไขหรือไม่ เช่น เจลเบรค/รูท (MODIFIED หรือ UNMODIFIED)
ประเภทระบบปฏิบัติการ STRING ประเภทของระบบปฏิบัติการที่ทำงานในอุปกรณ์ (เช่น iOS และ MACOS) ใช้ได้กับแอปในแพลตฟอร์ม Apple เท่านั้น
ประเภทระบบปฏิบัติการ.อุปกรณ์ STRING ประเภทอุปกรณ์ (เช่น อุปกรณ์เคลื่อนที่ แท็บเล็ต ทีวี ฯลฯ) หรือที่เรียกว่า "หมวดหมู่อุปกรณ์"
แอปพลิเคชัน RECORD แอปที่สร้างกิจกรรม
application.build_version STRING เวอร์ชันบิลด์ของแอป
เวอร์ชันการแสดงผลแอปพลิเคชัน STRING
ผู้ใช้ RECORD ไม่บังคับ: ข้อมูลที่รวบรวมจากผู้ใช้แอป
user.name STRING ไม่บังคับ: ชื่อผู้ใช้
อีเมลผู้ใช้ STRING ไม่บังคับ: อีเมลของผู้ใช้
user.id STRING ไม่บังคับ: รหัสเฉพาะแอปที่เชื่อมโยงกับผู้ใช้
custom_keys บันทึกซ้ำ คู่คีย์-ค่าที่นักพัฒนาแอปกำหนด
คีย์ที่กำหนดเอง STRING คีย์ที่นักพัฒนาแอปกำหนด
custom_keys.value STRING ค่าที่นักพัฒนาแอปกำหนด
การติดตั้ง_uuid STRING รหัสที่ระบุการติดตั้งแอปและอุปกรณ์ที่ไม่ซ้ำกัน
Crashlytics_sdk_versions STRING เวอร์ชัน Crashlytics SDK ที่สร้างเหตุการณ์
การวางแนวแอป STRING แนวตั้ง, แนวนอน, FACE_UP หรือ FACE_DOWN
การวางแนวอุปกรณ์ STRING แนวตั้ง, แนวนอน, FACE_UP หรือ FACE_DOWN
สถานะการประมวลผล STRING พื้นหลังหรือเส้นขอบ
บันทึก บันทึกซ้ำ ข้อความบันทึกที่มีการประทับเวลาที่สร้างโดยตัวบันทึก Crashlytics หากเปิดใช้ไว้
บันทึกการประทับเวลา การประทับเวลา เวลาที่สร้างบันทึก
บันทึก.message STRING ข้อความที่บันทึก
เบรดครัมบ์ บันทึกซ้ำ เบรดครัมบ์ Google Analytics ที่มีการประทับเวลา หากเปิดใช้
เบรดครัมบ์.timestamp การประทับเวลา การประทับเวลาที่เชื่อมโยงกับเบรดครัมบ์
breadcrumbs.name STRING ชื่อที่เชื่อมโยงกับเบรดครัมบ์
เบรดครัมบ์.params บันทึกซ้ำ พารามิเตอร์ที่เชื่อมโยงกับเบรดครัมบ์
เบรดครัมบ์.params.key STRING คีย์พารามิเตอร์ที่เชื่อมโยงกับเบรดครัมบ์
เบรดครัมบ์.params.value STRING ค่าพารามิเตอร์ที่เชื่อมโยงกับเบรดครัมบ์
กรอบเบลม RECORD เฟรมที่ระบุเป็นสาเหตุหลักของการขัดข้องหรือข้อผิดพลาด
บรรทัดเฟรม Blame INT64 หมายเลขบรรทัดของไฟล์ของเฟรม
ไฟล์ blame_frame STRING ชื่อไฟล์เฟรม
เบลม_เฟรม.สัญลักษณ์ STRING สัญลักษณ์ไฮเดรตหรือสัญลักษณ์ดิบ หากเติมน้ำไม่ได้
blame_frame.offset INT64 ออฟเซ็ตแบบไบต์ในรูปไบนารีที่มีโค้ด โดยไม่ต้องตั้งค่าสำหรับข้อยกเว้น Java
ที่อยู่เฟรม blame INT64 ที่อยู่ในรูปภาพไบนารีที่มีโค้ด ไม่ได้ตั้งค่าสำหรับเฟรม Java
blame_frame.library STRING ชื่อที่แสดงของไลบรารีที่มีเฟรม
blame_frame.owner STRING นักพัฒนาซอฟต์แวร์, ผู้ให้บริการ, RUNTIME, แพลตฟอร์ม หรือระบบ
blame_frame.blamed BOOLEAN การวิเคราะห์ของ Crashlytics ระบุว่าเฟรมนี้เป็นสาเหตุของข้อขัดข้องหรือข้อผิดพลาดหรือไม่
ข้อยกเว้น บันทึกซ้ำ Android เท่านั้น: ข้อยกเว้นที่เกิดขึ้นระหว่างกิจกรรมนี้ ข้อยกเว้นที่ซ้อนกันจะแสดงตามลำดับเวลาย้อนกลับ (อ่าน: บันทึกสุดท้ายคือการยกเว้นครั้งแรก)
ประเภทข้อยกเว้น STRING ประเภทข้อยกเว้น เช่น java.lang.IllegalStateException
ข้อความข้อยกเว้น STRING ข้อความที่เชื่อมโยงกับข้อยกเว้น
ข้อยกเว้นที่ซ้อนกัน BOOLEAN จริงสำหรับทุกรายการยกเว้นข้อยกเว้นที่ส่งครั้งสุดท้าย (เช่น ระเบียนแรก)
ข้อยกเว้นชื่อ STRING ชื่อชุดข้อความ
ข้อยกเว้นคำบรรยาย STRING ชื่อรองของชุดข้อความ
ข้อยกเว้น BOOLEAN "จริง" หาก Crashlytics กำหนดว่าข้อยกเว้นเป็นสาเหตุของข้อผิดพลาดหรือข้อขัดข้อง
ข้อยกเว้นของเฟรม บันทึกซ้ำ เฟรมที่เกี่ยวข้องกับข้อยกเว้น
ข้อยกเว้น.frames.line INT64 หมายเลขบรรทัดของไฟล์ของเฟรม
ไฟล์ข้อยกเว้น.frames.file STRING ชื่อไฟล์เฟรม
ข้อยกเว้น.frames.symbol STRING สัญลักษณ์ไฮเดรตหรือสัญลักษณ์ดิบ หากเติมน้ำไม่ได้
ข้อยกเว้น.frames.offset INT64 ออฟเซ็ตแบบไบต์ในรูปไบนารีที่มีโค้ด โดยไม่ต้องตั้งค่าสำหรับข้อยกเว้น Java
ข้อยกเว้น.frames.address INT64 ที่อยู่ในรูปภาพไบนารีที่มีโค้ด ไม่ได้ตั้งค่าสำหรับเฟรม Java
ข้อยกเว้น.frames.library STRING ชื่อที่แสดงของไลบรารีที่มีเฟรม
ข้อยกเว้น.frames.owner STRING นักพัฒนาซอฟต์แวร์, ผู้ให้บริการ, RUNTIME, แพลตฟอร์ม หรือระบบ
ข้อยกเว้น.frames.blamed BOOLEAN การวิเคราะห์ของ Crashlytics ระบุว่าเฟรมนี้เป็นสาเหตุของข้อขัดข้องหรือข้อผิดพลาดหรือไม่
error บันทึกซ้ำ แอป Apple เท่านั้น: ข้อผิดพลาดที่ไม่ร้ายแรง
error.queue_name STRING คิวที่ชุดข้อความทำงานอยู่
รหัสข้อผิดพลาด INT64 รหัสข้อผิดพลาดที่เชื่อมโยงกับ NSError ที่บันทึกไว้ที่กำหนดเองของแอป
error.title STRING ชื่อชุดข้อความ
คำบรรยาย STRING ชื่อรองของชุดข้อความ
error.blamed BOOLEAN การวิเคราะห์ของ Crashlytics ระบุว่าเฟรมนี้เป็นสาเหตุของข้อผิดพลาดหรือไม่
error.frames บันทึกซ้ำ เฟรมของสแต็กเทรซ
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 นักพัฒนาซอฟต์แวร์, ผู้ให้บริการ, RUNTIME, แพลตฟอร์ม หรือระบบ
error.frames.blamed BOOLEAN การวิเคราะห์ของ Crashlytics ระบุว่าเฟรมนี้เป็นสาเหตุของข้อผิดพลาดหรือไม่
ชุดข้อความ บันทึกซ้ำ มีชุดข้อความเมื่อกิจกรรม
ชุดข้อความที่ถูกทำลาย BOOLEAN ชุดข้อความขัดข้องหรือไม่
ชุดข้อความ.ชุดข้อความ_ชื่อ STRING ชื่อชุดข้อความ
ชุดข้อความ.queue_name STRING แอป Apple เท่านั้น: คิวที่ชุดข้อความทำงานอยู่
เทรด.signal_name STRING ชื่อของสัญญาณที่ทําให้แอปขัดข้อง โดยจะแสดงในชุดข้อความเนทีฟที่ขัดข้องเท่านั้น
เทรด.signal_code STRING โค้ดของสัญญาณที่ทําให้แอปขัดข้อง แสดงเฉพาะในชุดข้อความเนทีฟที่ขัดข้องเท่านั้น
ที่อยู่ชุดข้อความ.crash_ INT64 ที่อยู่ของสัญญาณที่ทำให้แอปพลิเคชันขัดข้อง ซึ่งจะแสดงบนเทรดเนทีฟที่ขัดข้องเท่านั้น
เทรด.code INT64 แอป Apple เท่านั้น: รหัสข้อผิดพลาดของ NSError ที่กำหนดเองที่บันทึกไว้ของแอปพลิเคชัน
ชื่อชุดข้อความ STRING ชื่อชุดข้อความ
ชุดข้อความ.ชื่อรอง STRING ชื่อรองของชุดข้อความ
เส้นด้าย BOOLEAN การวิเคราะห์ของ Crashlytics ระบุว่าเฟรมนี้เป็นสาเหตุของข้อขัดข้องหรือข้อผิดพลาดหรือไม่
เทรด.frame บันทึกซ้ำ เฟรมของชุดข้อความ
เทรด.frames.line INT64 หมายเลขบรรทัดของไฟล์ของเฟรม
เทรด.เฟรม.ไฟล์ STRING ชื่อไฟล์เฟรม
เทรด.เฟรม.สัญลักษณ์ STRING สัญลักษณ์น้ำหรือสัญลักษณ์ดิบในกรณีที่ไม่น่าดื่ม
เทรด.frames.offset INT64 ไบต์ออฟเซ็ตในภาพไบนารีที่มีโค้ด
ที่อยู่ชุดข้อความ.frames. INT64 ที่อยู่ในรูปภาพไบนารีซึ่งมีโค้ด
Threads.frames.library STRING ชื่อที่แสดงของไลบรารีที่มีเฟรม
thread.frames.owner STRING นักพัฒนาซอฟต์แวร์, ผู้ให้บริการ, RUNTIME, แพลตฟอร์ม หรือระบบ
เทรด.frames.blamed BOOLEAN การวิเคราะห์ของ Crashlytics ระบุว่าเฟรมนี้เป็นสาเหตุของข้อผิดพลาดหรือไม่
unity_metadata.unity_version STRING เวอร์ชันของ Unity ที่ทำงานในอุปกรณ์นี้
unity_metadata.debug_build BOOLEAN หากนี่เป็นบิลด์การแก้ไขข้อบกพร่อง
ประเภท_ข้อมูลเมตา.โปรเซสเซอร์_ประเภท STRING ประเภทโปรเซสเซอร์
unity_metadata.processor_count [หน่วยประมวลผล] INT64 จำนวนโปรเซสเซอร์ (แกน)
unity_metadata.processor_frequency_mhz INT64 ความถี่ของโปรเซสเซอร์ในหน่วย MHz
ข้อมูลเมตาหน่วยของหน่วยความจำ INT64 ขนาดของหน่วยความจำของระบบในหน่วย MB
ข้อมูลเมตา หน่วยกราฟิก หน่วยความจำขนาด เมกะไบต์ INT64 หน่วยความจำกราฟิกในหน่วย MB
unity_metadata.graphics_device_id INT64 ตัวระบุของอุปกรณ์กราฟิก
unity_metadata.graphics_device_vendor_id INT64 ตัวระบุของผู้ให้บริการประมวลผลกราฟิก
unity_metadata.graphics_ชื่ออุปกรณ์ STRING ชื่อของอุปกรณ์กราฟิก
unity_metadata.graphics_device_vendor STRING ผู้ให้บริการอุปกรณ์กราฟิก
unity_metadata.graphics_device_version STRING เวอร์ชันของอุปกรณ์กราฟิก
unity_metadata.graphics_type_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 ขนาดสูงสุดสำหรับการแสดงพื้นผิว
ข้อมูลเมตารวม_หน้าจอ_ขนาด_พิกเซล STRING ขนาดของหน้าจอเป็นพิกเซล โดยอยู่ในรูปแบบกว้าง x สูง
unity_metadata.screen_dimension_dpi STRING DPI ของหน้าจอเป็นตัวเลขทศนิยม
หน่วย_ข้อมูลเมตา.หน้าจอ_รีเฟรช_อัตรา_hz INT64 อัตราการรีเฟรชของหน้าจอในหน่วยเฮิร์ตซ์

การแสดงภาพข้อมูล Crashlytics ที่ส่งออกด้วย Data Studio

Google Data Studio เปลี่ยนชุดข้อมูล Crashlytics ใน BigQuery เป็นรายงานที่อ่านง่าย แชร์สะดวก และปรับแต่งได้อย่างเต็มที่

หากต้องการดูข้อมูลเพิ่มเติมเกี่ยวกับการใช้ Data Studio ให้ลองทำตามคู่มือเริ่มใช้งานฉบับย่อของ Data Studio ยินดีต้อนรับสู่ Data Studio

การใช้เทมเพลตรายงาน Crashlytics

Data Studio มีรายงานตัวอย่างสำหรับ Crashlytics ที่มีชุดมิติข้อมูลและเมตริกที่ครอบคลุมจากสคีมา Crashlytics BigQuery ที่ส่งออก หากเปิดใช้การส่งออกแบบสตรีม BigQuery ของ Crashlytics คุณจะดูข้อมูลดังกล่าวได้ในหน้าแนวโน้มแบบเรียลไทม์ของเทมเพลต Data Studio คุณสามารถใช้ตัวอย่างเป็นเทมเพลตเพื่อสร้างรายงานและการแสดงข้อมูลผ่านภาพใหม่ได้อย่างรวดเร็วโดยอิงตามข้อมูลดิบของข้อขัดข้องของแอปของคุณเอง ดังนี้

  1. เปิดเทมเพลตแดชบอร์ด Data Studio ของ Crashlytics
  2. คลิกใช้เทมเพลตที่มุมขวาบน
  3. ในเมนูแบบเลื่อนลงแหล่งข้อมูลใหม่ ให้เลือกสร้างแหล่งข้อมูลใหม่
  4. คลิกเลือกในการ์ด BigQuery
  5. เลือกตารางที่มีข้อมูล Crashlytics ที่ส่งออกโดยเลือก โปรเจ็กต์ของฉัน > [ชื่อโปรเจ็กต์ของคุณ] > firebase_crashlytics > [ชื่อตารางของคุณ] ตารางกลุ่มพร้อมให้คุณเลือกเสมอ หากเปิดใช้การส่งออกแบบสตรีม BigQuery ของ Crashlytics ไว้ คุณจะเลือกตารางแบบเรียลไทม์แทนก็ได้
  6. ในส่วนการกำหนดค่า ให้ตั้งค่าระดับเทมเพลต Crashlytics เป็นค่าเริ่มต้น
  7. คลิกเชื่อมต่อเพื่อสร้างแหล่งข้อมูลใหม่
  8. คลิกเพิ่มลงในรายงานเพื่อกลับไปยังเทมเพลต Crashlytics
  9. สุดท้าย ให้คลิกสร้างรายงานเพื่อสร้างสําเนาเทมเพลตแดชบอร์ดของ Crashlytics Data Studio