คุณสามารถส่งออกข้อมูล Firebase Crashlytics ไปยัง BigQuery สำหรับ การวิเคราะห์เพิ่มเติม BigQuery ช่วยให้คุณวิเคราะห์ข้อมูลได้โดยใช้ BigQuery ส่งออก SQL ไปยังผู้ให้บริการคลาวด์รายอื่นและใช้สำหรับ การแสดงผลและแดชบอร์ดที่กำหนดเองด้วย Google Data Studio
เปิดใช้การส่งออกไปยัง BigQuery
- ในคอนโซล Firebase ให้ไปที่ หน้าการผสานรวม
- คลิกลิงก์ในการ์ด BigQuery
- ทำตามวิธีการบนหน้าจอเพื่อเปิดใช้การส่งออกไปยัง BigQuery
ต่อไปนี้เป็นสิ่งที่จะเกิดขึ้นเมื่อคุณเปิดใช้การส่งออกไปยัง BigQuery
โดยค่าเริ่มต้น แอปทั้งหมดในโปรเจ็กต์จะลิงก์กับ BigQuery และทุกๆ แอปที่คุณเพิ่มในโปรเจ็กต์ในภายหลังจะลิงก์โดยอัตโนมัติ BigQuery คุณสามารถจัดการแอปที่ส่งข้อมูลได้
Firebase จะตั้งค่าการซิงค์ข้อมูลของคุณจากโปรเจ็กต์ Firebase กับ BigQuery ทุกวัน
Firebase ส่งออกสำเนาข้อมูลที่มีอยู่ ไปยัง BigQuery ข้อมูลนี้จะแสดงตารางกลุ่มสำหรับแอปที่ลิงก์แต่ละแอป ที่มีข้อมูลจากการซิงค์รายวัน
หากคุณ เปิดใช้การส่งออกแบบสตรีม Crashlytics ไปยัง BigQuery แอปที่เชื่อมโยงทั้งหมดจะมีตารางแบบเรียลไทม์ที่อัปเดตอย่างต่อเนื่องด้วย
หากต้องการปิดใช้งานการส่งออกไปยัง BigQuery ให้ยกเลิกการลิงก์โปรเจ็กต์ในคอนโซล Firebase
ข้อมูลใดบ้างที่ส่งออกไปยัง BigQuery
ระบบจะส่งออกข้อมูล Firebase Crashlytics ไปยังชุดข้อมูล BigQuery ชื่อ
firebase_crashlytics
โดยค่าเริ่มต้น ระบบจะสร้างแต่ละตารางไว้ภายใน
ชุดข้อมูล Crashlytics สำหรับแต่ละแอปในโปรเจ็กต์ Firebase ตั้งชื่อ
ตารางตามตัวระบุของแอป พร้อมแปลงจุดเป็นขีดล่าง และ
ชื่อแพลตฟอร์มที่ต่อท้าย
เช่น ข้อมูลสําหรับแอป Android ที่มีชื่อแพ็กเกจ com.google.test
จะอยู่ในตารางชื่อ com_google_test_ANDROID
อัปเดตตารางกลุ่มนี้แล้ว
วันละ 1 ครั้ง หากคุณเปิดใช้การส่งออกแบบสตรีม Crashlytics ไปยัง BigQuery ระบบจะสตรีมข้อมูล Crashlytics แบบเรียลไทม์ไปยังตารางชื่อ com_google_test_ANDROID_REALTIME
ด้วย
แต่ละแถวในตารางแสดงถึงเหตุการณ์ที่เกิดขึ้นในแอป ซึ่งรวมถึงข้อขัดข้อง ข้อผิดพลาดที่ไม่ร้ายแรง และ ANR
การส่งออกแบบสตรีม Crashlytics รายการไปยัง BigQuery
คุณสามารถสตรีมข้อมูล Crashlytics แบบเรียลไทม์ได้ด้วยBigQuery Streaming ซึ่งใช้สำหรับวัตถุประสงค์ใดก็ตามที่ต้องใช้ข้อมูลแบบสด เช่น การนำเสนอ ในหน้าแดชบอร์ดการถ่ายทอดสด การดูการเปิดตัวแบบสด หรือการตรวจสอบ ปัญหาแอปพลิเคชันที่ทริกเกอร์การแจ้งเตือนและเวิร์กโฟลว์ที่กำหนดเอง
เมื่อคุณเปิดใช้การส่งออกแบบสตรีม Crashlytics ไปยัง BigQuery นอกเหนือจากตารางกลุ่มแล้ว คุณจะมีตารางแบบเรียลไทม์ด้วย ต่อไปนี้คือ ความแตกต่างที่ควรทราบระหว่างตารางต่อไปนี้
ตารางกลุ่ม | ตารางแบบเรียลไทม์ |
---|---|
|
|
ตารางกลุ่มเหมาะสําหรับการวิเคราะห์ระยะยาวและระบุแนวโน้มเมื่อเวลาผ่านไป เนื่องจากเราจัดเก็บเหตุการณ์ไว้อย่างถาวรก่อนที่จะเขียน และสามารถทดแทนข้อมูลเหตุการณ์ลงในตารางได้สูงสุด 30 วัน เมื่อเราเขียนข้อมูลลงในตารางแบบเรียลไทม์ เราจะ เขียนลงใน BigQuery ทันที จึงเหมาะสำหรับการถ่ายทอดสด หน้าแดชบอร์ดและการแจ้งเตือนที่กำหนดเอง ตารางทั้ง 2 ตารางนี้สามารถรวมเข้ากับการค้นหาแบบต่อตะเข็บเพื่อให้ได้รับประโยชน์จากทั้ง 2 รายการ
โดยค่าเริ่มต้น ตารางแบบเรียลไทม์จะมีเวลาหมดอายุของพาร์ติชันอยู่ที่ 30 วัน ถึง เรียนรู้วิธีแก้ไขสิ่งนี้ ตั้งค่าการหมดอายุของพาร์ติชัน ในเอกสารประกอบของ BigQuery
เปิดใช้การส่งออกสตรีมมิง Crashlytics ไปยัง BigQuery
- ในคอนโซล Firebase ให้ไปที่หน้าการผสานรวม
- คลิกจัดการในการ์ด BigQuery
- เลือกช่องทําเครื่องหมายรวมสตรีมมิง
การดำเนินการนี้จะเปิดใช้การสตรีมสำหรับแอปที่ลิงก์ทั้งหมด
คุณใช้ข้อมูลที่ส่งออกทำอะไรได้บ้าง
การส่งออกไปยัง BigQuery จะมีข้อมูลข้อขัดข้องดิบ ซึ่งรวมถึงประเภทอุปกรณ์ ระบบปฏิบัติการ ข้อยกเว้น (แอป Android) หรือข้อผิดพลาด (แอป Apple) และบันทึก Crashlytics รวมถึงข้อมูลอื่นๆ
ตรวจสอบข้อมูล Crashlytics ที่ส่งออกและสคีมาของตารางในหน้านี้ในภายหลัง
ใช้เทมเพลต Data Studio
หากต้องการเปิดใช้ข้อมูลแบบเรียลไทม์ในเทมเพลต Data Studio ให้ทําตามวิธีการในหัวข้อการแสดงภาพข้อมูล Crashlytics ที่ส่งออกด้วย Data Studio
สร้างมุมมอง
คุณเปลี่ยนคําค้นหาเป็นมุมมองได้โดยใช้ UI ของ BigQuery โปรดดูวิธีการโดยละเอียดที่หัวข้อสร้างมุมมองในเอกสารประกอบBigQuery
เรียกใช้การค้นหา
ตัวอย่างต่อไปนี้แสดงคำค้นหาที่คุณสามารถเรียกใช้บน Crashlytics เพื่อสร้างรายงานที่รวบรวมข้อมูลเหตุการณ์ข้อขัดข้องไว้ใน การสรุปที่เข้าใจได้ง่ายมากขึ้น เนื่องจากรายงานประเภทดังกล่าวจะไม่พร้อมใช้งาน ในแดชบอร์ดCrashlyticsของคอนโซล Firebase ส่วนเพิ่ม การวิเคราะห์และความเข้าใจเกี่ยวกับข้อมูลการขัดข้อง
ตัวอย่างที่ 1: ข้อขัดข้องตามวัน
หลังจากทำงานเพื่อแก้ไขข้อบกพร่องให้ได้มากที่สุด คุณสรุปว่าในที่สุดทีมของคุณแล้ว พร้อมเปิดตัวแอปแชร์รูปภาพตัวใหม่ของคุณแล้ว แต่ก่อนที่จะดำเนินการ คุณต้องตรวจสอบ จำนวนการขัดข้องต่อวันในเดือนที่ผ่านมา เพื่อให้มั่นใจว่าข้อบกพร่องที่เกิดจากข้อบกพร่อง ของแอปจะมีความเสถียรมากขึ้นเมื่อเวลาผ่านไป
ต่อไปนี้คือตัวอย่างการค้นหาสำหรับแอป Android สำหรับแอป iOS ให้ใช้รหัสกลุ่มและ IOS
(แทนชื่อแพ็กเกจและ 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;
ตัวอย่างที่ 2: ค้นหาข้อขัดข้องที่พบบ่อยที่สุด
หากต้องการจัดลำดับความสำคัญของแผนการผลิตอย่างเหมาะสม คุณต้องค้นหา 10 อันดับแรก เกิดข้อขัดข้องที่มักเกิดขึ้นในแอป คุณสร้าง Query ที่ระบุข้อมูลที่เกี่ยวข้อง จุดข้อมูลเท่านั้น
ต่อไปนี้คือตัวอย่างการค้นหาสำหรับแอป Android สำหรับแอป iOS ให้ใช้รหัสชุดของแอปนั้น
และ IOS
(แทนชื่อแพ็กเกจและ 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;
ตัวอย่างที่ 3: อุปกรณ์ขัดข้อง 10 อันดับแรก
ฤดูใบไม้ร่วงเป็นฤดูแห่งโทรศัพท์เครื่องใหม่ บริษัทของคุณทราบดีว่านี่ยังหมายถึงช่วงที่มีปัญหาใหม่เฉพาะอุปกรณ์ โดยเฉพาะสำหรับ Android เตรียมตัวให้พร้อม ความกังวลเกี่ยวกับความเข้ากันได้ที่เพิ่มขึ้น คุณได้รวบรวมคำค้นหาที่ระบุ อุปกรณ์ 10 เครื่องที่พบข้อขัดข้องมากที่สุดในสัปดาห์ที่ผ่านมา (168 ชั่วโมง)
ต่อไปนี้คือตัวอย่างการค้นหาสำหรับแอป Android สำหรับแอป iOS ให้ใช้รหัสชุดของแอปนั้น
และ IOS
(แทนชื่อแพ็กเกจและ 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;
ตัวอย่างที่ 4: กรองตามคีย์ที่กำหนดเอง
คุณเป็นนักพัฒนาเกมที่ต้องการทราบว่าด่านใดของเกมที่พบการขัดข้องมากที่สุด
เพื่อช่วยในการติดตามสถิตินั้น คุณกำหนดค่า
คีย์ Crashlytics ที่กำหนดเอง
ที่เรียกว่า current_level
และอัปเดตทุกครั้งที่ผู้ใช้ขึ้นถึงระดับใหม่
Swift
Crashlytics.sharedInstance().setIntValue(3, forKey: "current_level");
Objective-C
CrashlyticsKit setIntValue:3 forKey:@"current_level";
Java
Crashlytics.setInt("current_level", 3);
เมื่อใช้คีย์ดังกล่าวในการส่งออกไปยัง BigQuery แล้ว คุณจะเขียนการค้นหาเพื่อรายงานการแจกแจงค่า current_level
ที่เชื่อมโยงกับเหตุการณ์ข้อขัดข้องแต่ละรายการได้
ต่อไปนี้คือตัวอย่างการค้นหาสำหรับแอป Android สำหรับแอป iOS ให้ใช้รหัสชุดของแอปนั้น
และ IOS
(แทนชื่อแพ็กเกจและ 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
ตัวอย่างที่ 5: การสกัดรหัสผู้ใช้
คุณมีแอป Android ในการทดลองใช้ก่อนเปิดตัว ผู้ใช้ส่วนใหญ่ชื่นชอบแอป แต่ผู้ใช้ 3 คนพบการขัดข้องมากกว่าปกติ หากต้องการหาสาเหตุของปัญหา ให้เขียนการค้นหาที่ดึงเหตุการณ์ข้อขัดข้องทั้งหมดของผู้ใช้เหล่านั้นโดยใช้รหัสผู้ใช้
ต่อไปนี้คือตัวอย่างการค้นหาสำหรับแอป Android สำหรับแอป iOS ให้ใช้รหัสกลุ่มและ IOS
(แทนชื่อแพ็กเกจและ 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
ตัวอย่างที่ 6: ค้นหาผู้ใช้ทั้งหมดที่ประสบปัญหาการขัดข้องที่เฉพาะเจาะจง
ทีมของคุณได้เผยแพร่ข้อบกพร่องร้ายแรงไปยังกลุ่มผู้ทดสอบเบต้าโดยไม่ได้ตั้งใจ ทีมของคุณสามารถใช้การค้นหาจากตัวอย่าง"ค้นหาข้อขัดข้องที่พบบ่อยที่สุด" ด้านบนเพื่อระบุรหัสปัญหาข้อขัดข้องที่ต้องการ ตอนนี้ทีมของคุณต้องการจัดการ การค้นหาเพื่อดึงรายชื่อผู้ใช้แอปที่ได้รับผลกระทบจากข้อขัดข้องนี้
ต่อไปนี้คือตัวอย่างการค้นหาสำหรับแอป Android สำหรับแอป iOS ให้ใช้รหัสชุดของแอปนั้น
และ IOS
(แทนชื่อแพ็กเกจและ 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;
ตัวอย่างที่ 7: จํานวนผู้ใช้ที่ได้รับผลกระทบจากปัญหาข้อขัดข้อง โดยแยกตามประเทศ
ทีมของคุณตรวจพบข้อบกพร่องร้ายแรงในระหว่างการเปิดตัวรุ่นใหม่ คุณใช้การค้นหาจากตัวอย่าง"ค้นหาข้อขัดข้องที่พบบ่อยที่สุด" ด้านบนเพื่อระบุรหัสปัญหาข้อขัดข้องที่ต้องการได้ ขณะนี้ทีมของคุณต้องการดู หากข้อขัดข้องนี้แพร่กระจายไปยังผู้ใช้ในประเทศต่างๆ ทั่วโลก
ในการเขียนการค้นหานี้ ทีมของคุณจะต้องทําดังนี้
เปิดใช้การส่งออกข้อมูล Google Analytics ไปยัง BigQuery โปรดดูหัวข้อส่งออกข้อมูลโปรเจ็กต์ไปยัง BigQuery
อัปเดตแอปของคุณเพื่อส่งรหัสผู้ใช้ไปยัง SDK ของ Google Analytics ทั้ง 2 รายการ และ Crashlytics SDK
Swift
Crashlytics.sharedInstance().setUserIdentifier("123456789"); Analytics.setUserID("123456789");
Objective-C
CrashlyticsKit setUserIdentifier:@"123456789"; FIRAnalytics setUserID:@"12345678 9";
Java
Crashlytics.setUserIdentifier("123456789"); mFirebaseAnalytics.setUserId("123456789");
เขียนคำค้นหาที่ใช้ช่องรหัสผู้ใช้เพื่อเข้าร่วมเหตุการณ์ใน ชุดข้อมูล Google Analytics ที่มีข้อขัดข้องในชุดข้อมูล Crashlytics
ต่อไปนี้คือตัวอย่างการค้นหาสำหรับแอป Android สำหรับแอป iOS ให้ใช้รหัสชุดและ
IOS
(แทนชื่อแพ็กเกจและ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
ตัวอย่างที่ 8: 5 ประเด็นแรกนับตั้งแต่วันนี้
ต่อไปนี้คือตัวอย่างการค้นหาสำหรับแอป Android สำหรับแอป iOS ให้ใช้รหัสกลุ่มและ IOS
(แทนชื่อแพ็กเกจและ 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;
ตัวอย่าง 9: ปัญหา 5 อันดับแรกนับตั้งแต่วันที่ DATE รวมถึงวันนี้
นอกจากนี้ คุณยังรวมตารางกลุ่มและตารางแบบเรียลไทม์เข้ากับการค้นหาการต่อข้อมูลเพื่อเพิ่มข้อมูลแบบเรียลไทม์ลงในข้อมูลกลุ่มที่เชื่อถือได้ได้ด้วย เนื่องจาก event_id
เป็นประเทศหลัก
คุณสามารถใช้ DISTINCT event_id
เพื่อกรองข้อมูลเหตุการณ์ทั่วไปที่ซ้ำกันจากทั้ง 2 เหตุการณ์
ตาราง
ต่อไปนี้คือตัวอย่างการค้นหาสำหรับแอป Android สำหรับแอป iOS ให้ใช้รหัสกลุ่มและ IOS
(แทนชื่อแพ็กเกจและ 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;
ทำความเข้าใจสคีมา Crashlytics ใน BigQuery
เมื่อคุณตั้งค่าการส่งออกข้อมูล Crashlytics ไปยัง BigQuery แล้ว Firebase ส่งออกเหตุการณ์ล่าสุด (ข้อขัดข้อง ข้อผิดพลาดที่ไม่ร้ายแรง และ ANR) รวมถึงเหตุการณ์ ล่วงหน้าไม่เกิน 2 วันก่อนลิงก์ โดยมีตัวเลือกให้ โฆษณาทดแทน ถึง 30 วัน
จากจุดนั้นจนกว่าคุณจะปิดใช้งานการส่งออก Firebase จะส่งออก Crashlytics กิจกรรมทุกวัน อาจใช้เวลา 2-3 นาทีสำหรับข้อมูล เพื่อให้พร้อมใช้งานใน BigQuery หลังการส่งออกแต่ละครั้ง
ชุดข้อมูล
Crashlytics สร้างชุดข้อมูลใหม่ใน BigQuery สําหรับข้อมูล Crashlytics ชุดข้อมูลจะครอบคลุมทั้งโปรเจ็กต์ แม้ว่าจะมีแอปหลายแอปก็ตาม
ตาราง
Crashlytics จะสร้างตารางในชุดข้อมูลสําหรับแต่ละแอปในโปรเจ็กต์ เว้นแต่คุณจะเลือกไม่ส่งออกข้อมูลสําหรับแอปนั้น Firebase จะตั้งชื่อตารางตามตัวระบุของแอป โดยแปลงเครื่องหมายจุดเป็นขีดล่าง และใส่ชื่อแพลตฟอร์มต่อท้าย
เช่น ข้อมูลสําหรับแอป Android ที่มีชื่อแพ็กเกจ com.google.test
จะอยู่ในตารางชื่อ com_google_test_ANDROID
และข้อมูลแบบเรียลไทม์ (หากเปิดใช้) จะอยู่ในตารางชื่อ com_google_test_ANDROID_REALTIME
ตารางมีชุดข้อมูล Crashlytics มาตรฐานนอกเหนือจาก คีย์ Crashlytics ที่กำหนดเอง ซึ่งคุณกำหนดไว้ในแอป
แถว
แต่ละแถวในตารางแสดงข้อผิดพลาดที่แอปพบ
คอลัมน์
คอลัมน์ในตารางจะเหมือนกันสำหรับข้อขัดข้อง ข้อผิดพลาดที่ไม่ร้ายแรง และ ANR ถ้า เปิดใช้การส่งออกแบบสตรีม Crashlytics ไปยัง BigQuery แล้ว จากนั้น ตารางแบบเรียลไทม์จะมีคอลัมน์เดียวกับตารางกลุ่ม โปรดทราบว่าคุณอาจ มีคอลัมน์ในแถวที่แสดงเหตุการณ์ที่ไม่มีสแต็กเทรซ
คอลัมน์ภายในการส่งออกแสดงรายการอยู่ในตารางนี้
ชื่อช่อง | ประเภทข้อมูล | คำอธิบาย |
---|---|---|
platform |
STRING | แพลตฟอร์มของแอปตามที่ลงทะเบียนไว้ในโปรเจ็กต์ Firebase
(ค่าที่ถูกต้อง: IOS หรือ ANDROID )
|
bundle_identifier |
STRING | ตัวระบุที่ไม่ซ้ำกันสำหรับแอปตามที่ลงทะเบียนไว้ในโปรเจ็กต์ Firebase
(เช่น com.google.gmail สำหรับแอปแพลตฟอร์ม Apple นี่คือรหัสชุดของแอป สําหรับแอป Android นี่คือชื่อแพ็กเกจของแอป |
event_id |
STRING | รหัสที่ไม่ซ้ำกันสำหรับเหตุการณ์ |
is_fatal |
BOOLEAN | แอปขัดข้องหรือไม่ |
error_type |
STRING | ประเภทข้อผิดพลาดของเหตุการณ์ (เช่น FATAL
NON_FATAL , ANR ฯลฯ) |
issue_id |
STRING | ปัญหาที่เชื่อมโยงกับเหตุการณ์ |
variant_id |
STRING | ตัวแปรปัญหาที่เชื่อมโยงกับเหตุการณ์นี้ โปรดทราบว่าเหตุการณ์บางรายการอาจไม่มีตัวแปรปัญหาที่เชื่อมโยง |
event_timestamp |
การประทับเวลา | เวลาที่เกิดเหตุการณ์ |
device |
RECORD | อุปกรณ์ที่เกิดเหตุการณ์ |
device.manufacturer |
STRING | ผู้ผลิตอุปกรณ์ |
device.model |
STRING | รุ่นอุปกรณ์ |
device.architecture |
STRING | เช่น X86_32 , X86_64 , ARMV7
ARM64 , ARMV7S หรือ ARMV7K |
memory |
RECORD | สถานะหน่วยความจำของอุปกรณ์ |
memory.used |
INT64 | จำนวนไบต์ของหน่วยความจำที่ใช้ |
memory.free |
INT64 | จำนวนไบต์ของหน่วยความจำที่เหลือ |
storage |
RECORD | พื้นที่เก็บข้อมูลถาวรของอุปกรณ์ |
storage.used |
INT64 | จำนวนไบต์ของพื้นที่เก็บข้อมูลที่ใช้ |
storage.free |
INT64 | จำนวนไบต์ของพื้นที่เก็บข้อมูลที่เหลือ |
operating_system |
RECORD | รายละเอียดของระบบปฏิบัติการในอุปกรณ์ |
operating_system.display_version |
STRING | เวอร์ชันของระบบปฏิบัติการในอุปกรณ์ |
operating_system.name |
STRING | ชื่อระบบปฏิบัติการในอุปกรณ์ |
operating_system.modification_state |
STRING | อุปกรณ์ได้รับการแก้ไขหรือไม่
(ตัวอย่างเช่น แอปที่เจลเบรคแล้วคือ MODIFIED และแอปที่รูท
UNMODIFIED ) |
operating_system.type |
STRING | (แอปของ Apple เท่านั้น) ประเภทของระบบปฏิบัติการในอุปกรณ์ (เช่น
IOS , MACOS ฯลฯ) |
operating_system.device_type |
STRING | ประเภทอุปกรณ์ (เช่น MOBILE , TABLET ,
TV ฯลฯ) หรือที่เรียกว่า "หมวดหมู่อุปกรณ์" |
application |
RECORD | แอปที่สร้างเหตุการณ์ |
application.build_version |
STRING | เวอร์ชันบิลด์ของแอป |
application.display_version |
STRING | |
user |
RECORD | (ไม่บังคับ) ข้อมูลที่เก็บรวบรวมเกี่ยวกับผู้ใช้แอป |
user.name |
STRING | (ไม่บังคับ) ชื่อผู้ใช้ |
user.email |
STRING | (ไม่บังคับ) อีเมลของผู้ใช้ |
user.id |
STRING | (ไม่บังคับ) รหัสเฉพาะแอปที่เชื่อมโยงกับผู้ใช้ |
custom_keys |
RECORD ซ้ำ | คู่คีย์-ค่าที่นักพัฒนาแอปกำหนด |
custom_keys.key |
STRING | คีย์ที่นักพัฒนาแอปกำหนด |
custom_keys.value |
STRING | ค่าที่นักพัฒนาแอปกำหนด |
installation_uuid |
STRING | รหัสที่ระบุการติดตั้งแอปและอุปกรณ์ที่ไม่ซ้ำกัน |
crashlytics_sdk_versions |
STRING | SDK เวอร์ชัน Crashlytics ที่สร้างเหตุการณ์ |
app_orientation |
STRING | เช่น PORTRAIT , LANDSCAPE
FACE_UP , FACE_DOWN ฯลฯ |
device_orientation |
STRING | เช่น PORTRAIT , LANDSCAPE
FACE_UP , FACE_DOWN ฯลฯ |
process_state |
STRING | BACKGROUND หรือ FOREGROUND |
logs |
บันทึกซ้ำ | ข้อความบันทึกที่มีการประทับเวลาซึ่งสร้างโดยCrashlytics Logger หากเปิดใช้ |
logs.timestamp |
การประทับเวลา | เวลาที่สร้างบันทึก |
logs.message |
STRING | ข้อความที่บันทึก |
breadcrumbs |
RECORD ซ้ำ | Google Analyticsเบรดครัมบ์ที่มีการประทับเวลา หากเปิดใช้ |
breadcrumbs.timestamp |
การประทับเวลา | การประทับเวลาที่เชื่อมโยงกับเบรดครัมบ์ |
breadcrumbs.name |
STRING | ชื่อที่เชื่อมโยงกับเบรดครัมบ์ |
breadcrumbs.params |
บันทึกซ้ำ | พารามิเตอร์ที่เชื่อมโยงกับเบรดครัมบ์ |
breadcrumbs.params.key |
STRING | คีย์พารามิเตอร์ที่เชื่อมโยงกับเบรดครัมบ์ |
breadcrumbs.params.value |
STRING | ค่าพารามิเตอร์ที่เชื่อมโยงกับเบรดครัมบ์ |
blame_frame |
RECORD | เฟรมที่ระบุว่าเป็นสาเหตุของข้อขัดข้องหรือข้อผิดพลาด |
blame_frame.line |
INT64 | หมายเลขบรรทัดของไฟล์ของเฟรม |
blame_frame.file |
STRING | ชื่อไฟล์เฟรม |
blame_frame.symbol |
STRING | สัญลักษณ์น้ำหรือสัญลักษณ์ข้อมูลดิบหากไม่สามารถให้น้ำ |
blame_frame.offset |
INT64 | ไบต์ออฟเซ็ตในอิมเมจไบนารีที่มีโค้ด ยกเลิกการตั้งค่าสำหรับข้อยกเว้น Java |
blame_frame.address |
INT64 | ที่อยู่ในรูปภาพไบนารีซึ่งมีรหัส ยกเลิกการตั้งค่าเฟรม Java |
blame_frame.library |
STRING | ชื่อที่แสดงของคลังที่มีเฟรม |
blame_frame.owner |
STRING | เช่น DEVELOPER , VENDOR ,
RUNTIME , PLATFORM หรือ SYSTEM |
blame_frame.blamed |
BOOLEAN | Crashlytics ระบุว่าเฟรมนี้เป็นสาเหตุของข้อขัดข้องหรือไม่ หรือข้อผิดพลาด |
exceptions |
บันทึกซ้ำ | (Android เท่านั้น) ข้อยกเว้นที่เกิดขึ้นระหว่างเหตุการณ์นี้ ซ้อนอยู่ ข้อยกเว้นจะแสดงตามลำดับเวลาย้อนกลับ ซึ่งหมายความว่า ระเบียนสุดท้ายเป็นข้อยกเว้นครั้งแรก |
exceptions.type |
STRING | ประเภทข้อยกเว้น
(เช่น java.lang.IllegalStateException) |
exceptions.exception_message |
STRING | ข้อความที่เชื่อมโยงกับข้อยกเว้น |
exceptions.nested |
BOOLEAN | จริง ยกเว้นข้อยกเว้นสุดท้าย (หมายถึงระเบียนแรก) |
exceptions.title |
STRING | ชื่อชุดข้อความ |
exceptions.subtitle |
STRING | คำบรรยายของชุดข้อความ |
exceptions.blamed |
BOOLEAN | เป็นจริงหาก Crashlytics ระบุว่าข้อยกเว้นเป็นผู้รับผิดชอบต่อ ข้อผิดพลาดหรือข้อขัดข้อง |
exceptions.frames |
บันทึกซ้ำ | เฟรมที่เชื่อมโยงกับข้อยกเว้น |
exceptions.frames.line |
INT64 | หมายเลขบรรทัดของไฟล์ของเฟรม |
exceptions.frames.file |
STRING | ชื่อไฟล์เฟรม |
exceptions.frames.symbol |
STRING | สัญลักษณ์น้ำหรือสัญลักษณ์ข้อมูลดิบหากไม่สามารถให้น้ำ |
exceptions.frames.offset |
INT64 | ไบต์ออฟเซ็ตในอิมเมจไบนารีที่มีโค้ด ยกเลิกการตั้งค่าสำหรับข้อยกเว้น Java |
exceptions.frames.address |
INT64 | ที่อยู่ในรูปภาพไบนารีซึ่งมีรหัส ยกเลิกการตั้งค่าเฟรม Java |
exceptions.frames.library |
STRING | ชื่อที่แสดงของคลังที่มีเฟรม |
exceptions.frames.owner |
STRING | เช่น DEVELOPER , VENDOR ,
RUNTIME , PLATFORM หรือ SYSTEM |
exceptions.frames.blamed |
BOOLEAN | Crashlytics ระบุว่าเฟรมนี้เป็นสาเหตุของข้อขัดข้องหรือไม่ หรือข้อผิดพลาด |
error |
บันทึกซ้ำ | (แอปของ Apple เท่านั้น) ข้อผิดพลาดที่ไม่ร้ายแรง |
error.queue_name |
STRING | คิวที่ชุดข้อความทำงานอยู่ |
error.code |
INT64 | รหัสข้อผิดพลาดที่เชื่อมโยงกับ NSError ที่บันทึกไว้เองของแอป |
error.title |
STRING | ชื่อชุดข้อความ |
error.subtitle |
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 พิจารณาแล้วว่าเฟรมนี้เป็นสาเหตุของ ข้อผิดพลาด |
threads |
บันทึกซ้ำ | เทรดที่แสดงอยู่ ณ เวลาที่เกิดเหตุการณ์ |
threads.crashed |
BOOLEAN | ชุดข้อความขัดข้องหรือไม่ |
threads.thread_name |
STRING | ชื่อชุดข้อความ |
threads.queue_name |
STRING | (แอปของ Apple เท่านั้น) คิวที่ชุดข้อความทำงานอยู่ |
threads.signal_name |
STRING | ชื่อของสัญญาณที่ทำให้แอปขัดข้อง ซึ่งแสดงในข้อขัดข้องเท่านั้น ชุดข้อความแบบเนทีฟ |
threads.signal_code |
STRING | รหัสของสัญญาณที่ทำให้แอปขัดข้อง ซึ่งจะแสดงเฉพาะในเธรดเนทีฟที่ขัดข้อง |
threads.crash_address |
INT64 | ที่อยู่ของสัญญาณที่ทำให้แอปพลิเคชันขัดข้อง แสดงเฉพาะในเธรดเนทีฟที่ขัดข้อง |
threads.code |
INT64 | (แอป Apple เท่านั้น) รหัสข้อผิดพลาดของ NSError ที่บันทึกไว้เองของแอปพลิเคชัน |
threads.title |
STRING | ชื่อชุดข้อความ |
threads.subtitle |
STRING | คำบรรยายของชุดข้อความ |
threads.blamed |
BOOLEAN | Crashlytics ระบุว่าเฟรมนี้เป็นสาเหตุของข้อขัดข้องหรือไม่ หรือข้อผิดพลาด |
threads.frames |
บันทึกซ้ำ | เฟรมของชุดข้อความ |
threads.frames.line |
INT64 | หมายเลขบรรทัดของไฟล์ของเฟรม |
threads.frames.file |
STRING | ชื่อไฟล์เฟรม |
threads.frames.symbol |
STRING | สัญลักษณ์น้ำหรือสัญลักษณ์ข้อมูลดิบหากไม่สามารถให้น้ำ |
threads.frames.offset |
INT64 | การเลื่อนไบต์ในรูปภาพไบนารีที่มีโค้ด |
threads.frames.address |
INT64 | ที่อยู่ในรูปภาพไบนารีซึ่งมีรหัส |
threads.frames.library |
STRING | ชื่อที่แสดงของคลังที่มีเฟรม |
threads.frames.owner |
STRING | เช่น DEVELOPER , VENDOR ,
RUNTIME , PLATFORM หรือ SYSTEM |
threads.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 | ระดับ Shader ของกราฟิก |
unity_metadata.graphics_render_target_count |
INT64 | จำนวนเป้าหมายการแสดงผลแบบกราฟิก |
unity_metadata.graphics_copy_texture_support |
STRING | สนับสนุนการคัดลอกพื้นผิวกราฟิกตามที่ระบุไว้ใน API ของ Unity |
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ไปยัง BigQuery คุณจะดูข้อมูลดังกล่าวได้ในหน้าแนวโน้มแบบเรียลไทม์ของเทมเพลต Data Studio คุณสามารถใช้ตัวอย่างเป็นเทมเพลตเพื่อสร้างรายงานและการแสดงภาพใหม่โดยอิงตามข้อมูลข้อขัดข้องดิบของแอปของคุณเองได้อย่างรวดเร็ว ดังนี้
คลิกใช้เทมเพลตที่มุมขวาบน
ในเมนูแบบเลื่อนลงแหล่งข้อมูลใหม่ ให้เลือกสร้างแหล่งข้อมูลใหม่
คลิกเลือกในการ์ด BigQuery
เลือกตารางที่มีข้อมูล Crashlytics ที่ส่งออกโดยเลือกโปรเจ็กต์ของฉัน > PROJECT_ID > firebase_crashlytics > TABLE_NAME
ตารางกลุ่มของคุณจะพร้อมเลือกเสมอ ถ้า มีการเปิดใช้การส่งออกแบบสตรีม Crashlytics ไปยัง BigQuery จากนั้นคุณจะ เลือกตารางแบบเรียลไทม์แทนได้
ในส่วนการกําหนดค่า ให้ตั้งค่าCrashlytics ระดับเทมเพลตเป็นค่าเริ่มต้น
คลิกเชื่อมต่อเพื่อสร้างแหล่งข้อมูลใหม่
คลิกเพิ่มลงในรายงานเพื่อกลับไปยังเทมเพลต Crashlytics
สุดท้าย ให้คลิกสร้างรายงานเพื่อสร้างสําเนาCrashlytics เทมเพลตแดชบอร์ด Data Studio