ส่งออกข้อมูล 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 ส่วนนี้จะมีตารางกลุ่มที่ประกอบด้วยข้อมูลจากการซิงค์รายวันสำหรับแอปที่ลิงก์แต่ละแอป
  • หากเปิดใช้การส่งออกแบบสตรีมของ Crashlytics BigQuery แอปที่ลิงก์ทั้งหมดจะมีตารางแบบเรียลไทม์ซึ่งมีการอัปเดตข้อมูลอย่างต่อเนื่องด้วย

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

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

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

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

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

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

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

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

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

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

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

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

เปิดใช้สตรีมมิง Crashlytics BigQuery

หากต้องการเปิดใช้สตรีมมิง ให้ไปที่ส่วน 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: การดึงข้อมูล User ID

นักพัฒนาแอปมีแอปในเวอร์ชันทดลองใช้ก่อนเปิดตัว ผู้ใช้ส่วนใหญ่ชอบแอปนี้ แต่มี 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. อัปเดตแอปให้ส่งรหัสผู้ใช้ไปยังทั้ง 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. เขียนการค้นหาที่ใช้ช่องรหัสผู้ใช้เพื่อรวมเหตุการณ์ในชุดข้อมูล BigQuery ของ Google Analytics กับข้อขัดข้องในชุดข้อมูล Crashlytics BigQuery

    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 ปัญหาอันดับต้นๆ ในวันนี้

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

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 รวมถึงวันนี้

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

ในตัวอย่างนี้ เรารวมตารางแบบกลุ่มเข้ากับตารางแบบเรียลไทม์เพื่อเพิ่มข้อมูลแบบเรียลไทม์ลงในข้อมูลแบบกลุ่มที่เชื่อถือได้ เนื่องจาก 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 [ Bundle_identifier ] STRING รหัสชุด เช่น com.google.gmail
event_id STRING รหัสที่ไม่ซ้ำกันสำหรับกิจกรรม
ร้ายแรง BOOLEAN แอปขัดข้องหรือไม่
ประเภทข้อผิดพลาด [error_type] STRING ประเภทข้อผิดพลาดของเหตุการณ์ (FATAL, NON_FATAL, ANR)
รหัสปัญหา [ issue_id] STRING ปัญหาที่เชื่อมโยงกับเหตุการณ์
รหัสตัวแปร [Variant_id] STRING ตัวแปรของปัญหาที่เชื่อมโยงกับเหตุการณ์นี้
โปรดทราบว่าบางเหตุการณ์ไม่มีตัวแปรของปัญหาที่เชื่อมโยงอยู่
event_timestamp การประทับเวลา เวลาที่เกิดเหตุการณ์
อุปกรณ์ RECORD อุปกรณ์ที่เกิดเหตุการณ์
device.manufacturer STRING ผู้ผลิตอุปกรณ์
รุ่นของอุปกรณ์ STRING รุ่นอุปกรณ์
สถาปัตยกรรมอุปกรณ์ STRING X86_32, X86_64, ARMV7, ARM64, ARMV7S หรือ ARMV7K
หน่วยความจำ RECORD สถานะหน่วยความจำของอุปกรณ์
หน่วยความจำที่ใช้แล้ว INT64 จำนวนไบต์ของหน่วยความจำที่ใช้
Memory.free INT64 จำนวนไบต์ของหน่วยความจำที่เหลืออยู่
พื้นที่เก็บข้อมูล RECORD พื้นที่เก็บข้อมูลถาวรของอุปกรณ์
พื้นที่เก็บข้อมูลที่ใช้ INT64 จำนวนไบต์ของพื้นที่เก็บข้อมูลที่ใช้
พื้นที่เก็บข้อมูลฟรี INT64 จำนวนไบต์ของพื้นที่เก็บข้อมูลที่เหลือ
ระบบปฏิบัติการ RECORD รายละเอียดของระบบปฏิบัติการในอุปกรณ์
Operations_system.display_version STRING เวอร์ชันของระบบปฏิบัติการในอุปกรณ์
operating_system.name STRING ชื่อระบบปฏิบัติการในอุปกรณ์
Operations_system.modification_state STRING อุปกรณ์ได้รับการแก้ไขหรือไม่ เช่น เจลเบรค/ผ่านการรูท (มีดัดแปลง หรือ UNMODIFIED)
Operat_system.type STRING ประเภทของระบบปฏิบัติการที่ทำงานในอุปกรณ์ (เช่น iOS, MACOS) ใช้ได้กับแอปในแพลตฟอร์ม Apple เท่านั้น
Operations_system.device_type STRING ประเภทของอุปกรณ์ (เช่น อุปกรณ์เคลื่อนที่ แท็บเล็ต ทีวี เป็นต้น) หรือที่เรียกว่า "หมวดหมู่อุปกรณ์"
แอปพลิเคชัน RECORD แอปที่สร้างเหตุการณ์
application.build_version STRING เวอร์ชันบิลด์ของแอป
application.display_version STRING
ผู้ใช้ RECORD ไม่บังคับ: ข้อมูลที่รวบรวมจากผู้ใช้แอป
user.name STRING ไม่บังคับ: ชื่อผู้ใช้
user.email STRING ไม่บังคับ: อีเมลของผู้ใช้
user.id STRING ไม่บังคับ: รหัสเฉพาะแอปที่เชื่อมโยงกับผู้ใช้
คีย์ที่กำหนดเอง บันทึกซ้ำ คู่คีย์-ค่าที่นักพัฒนาแอปกำหนด
คีย์ที่กำหนดเอง [custom_keys.key] STRING คีย์ที่นักพัฒนาแอปกำหนด
คีย์ที่กำหนดเอง [custom_keys.value] STRING ค่าที่นักพัฒนาแอปกำหนด
uuid การติดตั้ง STRING รหัสที่ระบุการติดตั้งแอปและอุปกรณ์ที่ไม่ซ้ำกัน
Crashlytics_sdk_เวอร์ชัน STRING เวอร์ชัน Crashlytics SDK ที่สร้างเหตุการณ์
การวางแนวของแอป STRING PORTRAIT, LANDSCAPE, FACE_UP หรือ FACE_DOWN
การวางแนวของอุปกรณ์ STRING PORTRAIT, LANDSCAPE, FACE_UP หรือ FACE_DOWN
สถานะกระบวนการ STRING ข้อมูลเบื้องต้นหรือเรื่องราวเบื้องหลัง
บันทึก บันทึกซ้ำ การประทับเวลาข้อความบันทึกที่สร้างโดยตัวบันทึก Crashlytics หากเปิดใช้
บันทึกการประทับเวลา การประทับเวลา เวลาที่สร้างบันทึก
log.message STRING ข้อความที่บันทึก
เบรดครัมบ์ บันทึกซ้ำ การแสดงเส้นทางของ Google Analytics ที่มีการประทับเวลา หากเปิดใช้
การแสดงเส้นทาง.การประทับเวลา การประทับเวลา การประทับเวลาที่เกี่ยวข้องกับเบรดครัมบ์
breadcrumbs.name STRING ชื่อที่เชื่อมโยงกับเบรดครัมบ์
breadcrumbs.params บันทึกซ้ำ พารามิเตอร์ที่เชื่อมโยงกับเบรดครัมบ์
breadcrumbs.params.key STRING คีย์พารามิเตอร์ที่เชื่อมโยงกับเบรดครัมบ์
breadcrumbs.params.value STRING ค่าพารามิเตอร์ที่เชื่อมโยงกับเบรดครัมบ์
กรอบโทษ RECORD เฟรมที่ระบุเป็นสาเหตุของข้อขัดข้องหรือข้อผิดพลาด
blame_frame.line INT64 หมายเลขบรรทัดของไฟล์ของเฟรม
blame_frame.file STRING ชื่อไฟล์เฟรม
blame_frame.symbol STRING สัญลักษณ์ความชุ่มชื้น หรือสัญลักษณ์ดิบ หากขาดน้ำ
blame_frame.offset INT64 การชดเชยไบต์ในอิมเมจไบนารีที่มีโค้ดดังกล่าว ไม่ได้ตั้งค่าสำหรับข้อยกเว้น Java
blame_frame.address INT64 ที่อยู่ในอิมเมจไบนารีซึ่งมีโค้ดอยู่ ซึ่งไม่ได้ตั้งค่าสำหรับ Java Frame
blame_frame.library STRING ชื่อที่แสดงของไลบรารีที่มีเฟรม
blame_frame.owner STRING DEVELOPER, VENDOR, RUNTIME, PLATFORM หรือ SYSTEM
blame_frame.blamed BOOLEAN การวิเคราะห์ของ Crashlytics ระบุว่าเฟรมนี้เป็นสาเหตุของข้อขัดข้องหรือข้อผิดพลาดหรือไม่
ข้อยกเว้น บันทึกซ้ำ Android เท่านั้น: ข้อยกเว้นที่เกิดขึ้นระหว่างกิจกรรมนี้ ข้อยกเว้นที่ซ้อนกันจะแสดงตามลำดับเวลาย้อนกลับ (อ่าน: บันทึกสุดท้ายคือข้อยกเว้นแรก)
ประเภทข้อยกเว้น STRING ประเภทข้อยกเว้น เช่น java.lang.IllegalStateException
ข้อยกเว้น_ข้อความ_ยกเว้น STRING ข้อความที่เชื่อมโยงกับข้อยกเว้น
excluded.nested BOOLEAN จริง ยกเว้นข้อยกเว้นสุดท้าย (เช่น ระเบียนแรก)
ชื่อข้อยกเว้น STRING ชื่อชุดข้อความ
คำบรรยายที่เป็นข้อยกเว้น STRING คำบรรยายของชุดข้อความ
ข้อยกเว้น.เบลนด์ BOOLEAN เป็นจริงหาก Crashlytics ระบุว่าข้อยกเว้นเป็นสาเหตุของข้อผิดพลาดหรือข้อขัดข้อง
ข้อยกเว้น.เฟรม บันทึกซ้ำ เฟรมที่เชื่อมโยงกับข้อยกเว้น
excluded.frames.line INT64 หมายเลขบรรทัดของไฟล์ของเฟรม
excluded.frames.file STRING ชื่อไฟล์เฟรม
excluded.frames.symbol STRING สัญลักษณ์ความชุ่มชื้น หรือสัญลักษณ์ดิบ หากขาดน้ำ
excluded.frames.offset INT64 การชดเชยไบต์ในอิมเมจไบนารีที่มีโค้ดดังกล่าว ไม่ได้ตั้งค่าสำหรับข้อยกเว้น Java
ข้อยกเว้น.frames.address INT64 ที่อยู่ในอิมเมจไบนารีซึ่งมีโค้ดอยู่ ซึ่งไม่ได้ตั้งค่าสำหรับ Java Frame
ข้อยกเว้น.frames.library STRING ชื่อที่แสดงของไลบรารีที่มีเฟรม
excluded.frames.owner STRING DEVELOPER, VENDOR, RUNTIME, PLATFORM หรือ SYSTEM
ข้อยกเว้น.frames.blamed BOOLEAN การวิเคราะห์ของ Crashlytics ระบุว่าเฟรมนี้เป็นสาเหตุของข้อขัดข้องหรือข้อผิดพลาดหรือไม่
error บันทึกซ้ำ แอป Apple เท่านั้น: ข้อผิดพลาดที่ไม่ร้ายแรง
error.queue_name STRING คิวที่ชุดข้อความทำงานอยู่
error.code INT64 รหัสข้อผิดพลาดที่เชื่อมโยงกับ NSError ที่กำหนดเองที่บันทึกไว้ของแอป
ชื่อข้อผิดพลาด 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 DEVELOPER, VENDOR, RUNTIME, PLATFORM หรือ SYSTEM
error.frames.blamed BOOLEAN การวิเคราะห์ของ Crashlytics ระบุว่าเฟรมนี้เป็นสาเหตุของข้อผิดพลาดหรือไม่
ชุดข้อความ บันทึกซ้ำ ชุดข้อความที่มีอยู่เมื่อเกิดเหตุการณ์
ที่เทรด.crash BOOLEAN ชุดข้อความขัดข้องหรือไม่
ชุดข้อความ.ชื่อ_ชุดข้อความ STRING ชื่อชุดข้อความ
ที่เทรด.queue_name STRING แอป Apple เท่านั้น: คิวที่เทรดทำงานอยู่
ชุดข้อความ.signal_name STRING ชื่อของสัญญาณที่ทำให้แอปขัดข้อง ซึ่งแสดงในเทรดเนทีฟที่ขัดข้องเท่านั้น
ชุดข้อความ.signal_code STRING โค้ดของสัญญาณที่ทำให้แอปขัดข้อง ซึ่งแสดงในชุดข้อความเนทีฟที่ขัดข้องเท่านั้น
ที่เทรด.crash_address INT64 ที่อยู่ของสัญญาณที่ทำให้แอปพลิเคชันขัดข้อง ซึ่งแสดงในชุดข้อความเนทีฟที่ขัดข้องเท่านั้น
ที่เทรด.code INT64 เฉพาะแอป Apple: รหัสข้อผิดพลาดของ NSError ที่กำหนดเองที่บันทึกไว้ของแอปพลิเคชัน
ชื่อชุดข้อความ STRING ชื่อชุดข้อความ
คำบรรยายชุดข้อความ STRING คำบรรยายของชุดข้อความ
ที่เทรด.blamed BOOLEAN การวิเคราะห์ของ Crashlytics ระบุว่าเฟรมนี้เป็นสาเหตุของข้อขัดข้องหรือข้อผิดพลาดหรือไม่
เทรด.เฟรม บันทึกซ้ำ เฟรมของชุดข้อความ
ที่เทรด.frames.line INT64 หมายเลขบรรทัดของไฟล์ของเฟรม
ที่เทรด.frames.file STRING ชื่อไฟล์เฟรม
ที่เทรด.frames.symbol STRING สัญลักษณ์น้ำในร่างกาย หรือสัญลักษณ์ดิบหากขาดน้ำ
ที่เทรด.frames.offset INT64 ไบต์ออฟเซ็ตในอิมเมจไบนารีที่มีโค้ด
ที่เทรด.frames.address INT64 ที่อยู่ในรูปภาพไบนารีซึ่งมีรหัส
ที่เทรด.frames.library STRING ชื่อที่แสดงของไลบรารีที่มีเฟรม
ที่เทรด.frames.owner STRING DEVELOPER, VENDOR, RUNTIME, PLATFORM หรือ SYSTEM
ที่เทรด.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 ตัวระบุของอุปกรณ์กราฟิก
unity_metadata.graphics_device_vendor_id INT64 ตัวระบุของผู้ให้บริการกราฟิก
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 ที่ส่งออกด้วย Data Studio

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

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

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

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

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