คุณส่งออกข้อมูล Crashlytics ไปยัง BigQuery เพื่อการวิเคราะห์เพิ่มเติมได้ BigQuery ช่วยให้คุณวิเคราะห์ข้อมูลโดยใช้ BigQuery SQL, ส่งออกไปยังผู้ให้บริการคลาวด์รายอื่น และใช้สำหรับการแสดงข้อมูลเป็นภาพและแดชบอร์ดที่กำหนดเองด้วย Google Data Studio
เปิดใช้การส่งออก BigQuery
- ไปที่หน้าการผสานรวมในคอนโซล Firebase
- ในการ์ด BigQuery ให้คลิกลิงก์
- ทำตามวิธีการบนหน้าจอเพื่อเปิดใช้ 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 คุณจะมีตารางแบบเรียลไทม์นอกเหนือจากตารางกลุ่มแล้ว ความแตกต่างที่ควรทราบ ระหว่างตารางมีดังนี้
ตารางกลุ่ม | ตารางแบบเรียลไทม์ |
---|---|
|
|
ตารางแบบกลุ่มเหมาะสำหรับการวิเคราะห์ระยะยาวและระบุแนวโน้มเมื่อเวลาผ่านไป เนื่องจากเราจัดเก็บเหตุการณ์ไว้ได้อย่างคงทนก่อนที่จะเขียน และอาจนำไปทดแทนลงในตารางได้นานถึง 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 ด้านบนเพื่อระบุรหัสปัญหาข้อขัดข้องที่เฉพาะเจาะจงได้ ตอนนี้ทีมอยากทราบว่าข้อขัดข้องนี้แพร่กระจายไปยังผู้ใช้ในประเทศต่างๆ ทั่วโลกหรือไม่
ทีมจะต้องดำเนินการต่อไปนี้เพื่อเขียนคำค้นหานี้
เปิดใช้การส่งออก BigQuery สำหรับ Google Analytics โปรดดูหัวข้อส่งออกข้อมูลโปรเจ็กต์ไปยัง BigQuery
อัปเดตแอปให้ส่งรหัสผู้ใช้ไปยังทั้ง 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");
เขียนการค้นหาที่ใช้ช่องรหัสผู้ใช้เพื่อรวมเหตุการณ์ในชุดข้อมูล 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 คุณจะใช้ตัวอย่างเป็นเทมเพลตเพื่อสร้างรายงานและการแสดงข้อมูลผ่านภาพอย่างรวดเร็วโดยอิงตามข้อมูลดิบของข้อขัดข้องของแอปของคุณเองได้
- เปิดเทมเพลตแดชบอร์ด Data Studio ของ Crashlytics
- คลิกใช้เทมเพลตที่มุมขวาบน
- ในเมนูแบบเลื่อนลงแหล่งข้อมูลใหม่ ให้เลือกสร้างแหล่งข้อมูลใหม่
- คลิกเลือกในการ์ด BigQuery
- เลือกตารางที่มีข้อมูล Crashlytics ที่ส่งออกโดยเลือก โปรเจ็กต์ของฉัน > [your-project-name] > firebase_crashlytics > [your-table-name] ตารางกลุ่มจะพร้อมให้เลือกเสมอ หากเปิดใช้การส่งออกแบบสตรีมของ BigQuery ของ Crashlytics คุณจะเลือกตารางแบบเรียลไทม์แทนได้
- ในส่วนการกำหนดค่า ให้ตั้งค่าระดับเทมเพลต Crashlytics เป็นค่าเริ่มต้น
- คลิกเชื่อมต่อเพื่อสร้างแหล่งข้อมูลใหม่
- คลิกเพิ่มลงในรายงานเพื่อกลับไปยังเทมเพลต Crashlytics
- สุดท้าย คลิกสร้างรายงานเพื่อสร้างสําเนาของเทมเพลตแดชบอร์ด Crashlytics Data Studio