คุณสามารถส่งออก Performance Monitoring ข้อมูลจากแอป Apple และ Android ไปยัง BigQuery เพื่อวิเคราะห์เพิ่มเติมได้ BigQuery ช่วยให้คุณวิเคราะห์ข้อมูลโดยใช้ BigQuery SQL, ส่งออกข้อมูลไปยังผู้ให้บริการคลาวด์รายอื่น และแม้กระทั่งใช้ ข้อมูลสำหรับโมเดล ML ที่กำหนดเองได้
เปิดใช้การส่งออก BigQuery
ไปที่ การผสานรวม หน้าในคอนโซล Firebase แล้วคลิก ลิงก์ ในการ์ด BigQuery
ทำตามวิธีการบนหน้าจอเพื่อเปิดใช้ BigQuery
เมื่อคุณเปิดใช้การส่งออก BigQuery สำหรับ Performance Monitoring ระบบจะดำเนินการดังนี้
Firebase จะส่งออกสำเนาข้อมูลที่มีอยู่ไปยัง BigQuery. การเผยแพร่ข้อมูลเริ่มต้นสำหรับการส่งออกอาจใช้เวลาถึง 48 ชั่วโมงจึงจะเสร็จสมบูรณ์
- คุณสามารถ กำหนดเวลาการเติมข้อมูลย้อนหลังด้วยตนเอง ได้สูงสุด 30 วันที่ผ่านมา หรือวันที่ล่าสุดที่คุณเปิดใช้ BigQuery การส่งออก (แล้วแต่ว่าวันใดจะล่าสุดกว่า)
หลังจากสร้างชุดข้อมูลแล้ว คุณจะเปลี่ยนแปลงตำแหน่งไม่ได้ แต่จะคัดลอกชุดข้อมูลไปยังตำแหน่งอื่นหรือย้าย (สร้างใหม่) ชุดข้อมูลไปยังตำแหน่งอื่นด้วยตนเองได้ ดูข้อมูลเพิ่มเติมได้ที่เปลี่ยนตำแหน่งชุดข้อมูล
Firebase จะตั้งค่าการซิงค์ข้อมูลจากโปรเจ็กต์ Firebase ไปยัง BigQuery เป็นประจำ โดยปกติการดำเนินการส่งออกรายวันเหล่านี้จะเสร็จสิ้นภายใน 24 ชั่วโมงหลังจากกำหนดเวลา
แอปทั้งหมดในโปรเจ็กต์ลิงก์อยู่กับ BigQuery โดยค่าเริ่มต้น และ แอปที่เพิ่มในโปรเจ็กต์ภายหลังจะลิงก์กับ BigQueryโดยอัตโนมัติ คุณสามารถ จัดการแอปที่ส่งข้อมูลได้
หากต้องการปิดใช้งานการส่งออก BigQuery ให้ ยกเลิกการลิงก์โปรเจ็กต์ ในคอนโซล Firebase
ข้อมูลใดบ้างที่จะส่งออกไปยัง BigQuery
สำหรับการส่งออกแต่ละแอปในโปรเจ็กต์ ระบบจะสร้างตารางที่มีเหตุการณ์ด้านประสิทธิภาพทั้งหมดที่บันทึกไว้ แต่ละแถวในตารางคือเหตุการณ์ด้านประสิทธิภาพเดียว ซึ่งอาจเป็นเหตุการณ์ใดเหตุการณ์หนึ่งต่อไปนี้
การติดตามระยะเวลา \- การติดตามที่รวบรวมเมตริก "ระยะเวลา" โดยค่าเริ่มต้น ซึ่งรวมถึงการเริ่มต้นแอป แอปที่ทำงานอยู่เบื้องหน้า และแอปที่ทำงานอยู่เบื้องหลัง รวมถึงการติดตามโค้ดที่กำหนดเองซึ่งนักพัฒนาแอปได้เพิ่มเครื่องมือไว้
event_typeคือDURATION_TRACEevent_nameจะเหมือนกับชื่อการติดตาม
เมตริกการติดตาม \- เมตริกที่กำหนดเองซึ่งเชื่อมโยงกับการติดตามโค้ดที่กำหนดเองซึ่งนักพัฒนาแอปได้เพิ่มเครื่องมือไว้
event_typeคือTRACE_METRICevent_nameคือชื่อเมตริกparent_trace_nameคือชื่อการติดตามที่มีเมตริกนี้
การติดตามหน้าจอ \- การติดตามที่ครอบคลุมช่วงเวลาที่หน้าจอมีอยู่ (การติดตามการแสดงผลของหน้าจอ)
event_typeคือSCREEN_TRACEevent_nameคือคำนำหน้า_st_บวกกับชื่อหน้าจอจริง
คำขอเครือข่าย \- การติดตามที่ครอบคลุมช่วงเวลาที่คำขอเครือข่ายมีอยู่ (การติดตามคำขอเครือข่าย HTTP)
event_typeคือNETWORK_REQUESTevent_nameคือรูปแบบ URL ของคำขอเครือข่ายที่จัดหมวดหมู่แล้ว
เหตุการณ์ด้านประสิทธิภาพแต่ละเหตุการณ์จะมีแอตทริบิวต์ของเหตุการณ์ (เช่น ประเทศและผู้ให้บริการของอุปกรณ์ไคลเอ็นต์) รวมถึงข้อมูลเฉพาะของเหตุการณ์ ดังนี้
- การติดตามระยะเวลา เมตริกการติดตาม และการติดตามหน้าจอจะมี
trace_info - เมตริกการติดตามจะมี
trace_info.metric_info - การติดตามหน้าจอจะมี
trace_info.screen_info - การติดตามเครือข่ายจะมี
network_info
สคีมาข้อมูลโดยละเอียด
| ชื่อช่อง | ประเภท | คำอธิบาย |
|---|---|---|
| event_timestamp | timestamp | การประทับเวลาตั้งแต่ Epoch เมื่อเหตุการณ์เริ่มขึ้นในอุปกรณ์ไคลเอ็นต์ (การเริ่มต้นการติดตาม การเริ่มต้นเครือข่าย ฯลฯ) |
| app_display_version | string | เวอร์ชันที่แสดงของแอปพลิเคชัน (เช่น "4.1.7")
|
| app_build_version | string | เวอร์ชันบิลด์ของแอปพลิเคชัน (เช่น "1523456")
|
| os_version | string | เวอร์ชันระบบปฏิบัติการของอุปกรณ์ไคลเอ็นต์
|
| device_name | string | ชื่ออุปกรณ์ไคลเอ็นต์ (เช่น "Google Pixel") |
| country | string | รหัสประเทศแบบ 2 ตัวอักษรของประเทศที่เกิดเหตุการณ์ ขึ้น (เช่น "US" หรือ "ZZ" สำหรับประเทศที่ไม่รู้จัก) |
| carrier | string | ผู้ให้บริการของอุปกรณ์ไคลเอ็นต์ |
| radio_type | string | ประเภทวิทยุที่ใช้งานอยู่เมื่อเกิดเหตุการณ์ขึ้น (เช่น "WIFI") |
| custom_attributes | ARRAY<RECORD> | แอตทริบิวต์ที่กำหนดเองทั้งหมดที่แนบกับเหตุการณ์นี้ |
| custom_attributes.key | string | คีย์ของแอตทริบิวต์ที่กำหนดเอง |
| custom_attributes.value | string | ค่าของแอตทริบิวต์ที่กำหนดเอง |
| event_type | string | ประเภทของเหตุการณ์ ซึ่งค่าที่เป็นไปได้มีดังนี้
|
| event_name | string | ชื่อเหตุการณ์
|
| parent_trace_name | string | ชื่อการติดตามระดับบนสุดที่มีเมตริกการติดตาม มีเฉพาะสำหรับ TRACE_METRIC |
| trace_info | RECORD | มีเฉพาะสำหรับ DURATION_TRACE,
SCREEN_TRACE, และ TRACE_METRIC |
| trace_info.duration_us | int64 |
|
| trace_info.screen_info | RECORD | มีเฉพาะสำหรับ SCREEN_TRACE |
| trace_info.screen_info.slow_frame_ratio | float64 | อัตราส่วนของเฟรมที่ช้าสำหรับการติดตามหน้าจอนี้ ซึ่งมีค่าระหว่าง 0 ถึง 1 (เช่น ค่า 0.05 หมายความว่า 5% ของเฟรมสำหรับอินสแตนซ์หน้าจอนี้ใช้เวลาในการแสดงผลนานกว่า 16 มิลลิวินาที) |
| trace_info.screen_info.frozen_frame_ratio | float64 | อัตราส่วนของเฟรมที่ค้างสำหรับการติดตามหน้าจอนี้ ซึ่งมีค่าระหว่าง 0 ถึง 1 (เช่น ค่า 0.05 หมายความว่า 5% ของเฟรมสำหรับอินสแตนซ์หน้าจอนี้ใช้เวลาในการแสดงผลนานกว่า 700 มิลลิวินาที) |
| trace_info.metric_info | RECORD | มีเฉพาะสำหรับ TRACE_METRIC |
| trace_info.metric_info.metric_value | int64 | ค่าของเมตริกการติดตาม |
| network_info | RECORD | มีเฉพาะสำหรับ NETWORK_REQUEST |
| network_info.response_code | int64 | โค้ดการตอบสนอง HTTP สำหรับการตอบสนองของเครือข่าย (เช่น 200, 404) |
| network_info.response_mime_type | string | ประเภท MIME ของการตอบสนองของเครือข่าย (เช่น "text/html") |
| network_info.request_http_method | string | เมธอด HTTP ของคำขอเครือข่าย (เช่น "GET" หรือ "POST") |
| network_info.request_payload_bytes | int64 | ขนาดเพย์โหลดของคำขอเครือข่าย หน่วย: ไบต์ |
| network_info.response_payload_bytes | int64 | ขนาดเพย์โหลดของการตอบสนองของเครือข่าย หน่วย: ไบต์ |
| network_info.request_completed_time_us | int64 | ไมโครวินาทีหลังจาก event_timestamp เมื่อการส่งคำขอเครือข่าย
เสร็จสมบูรณ์หน่วย: ไมโครวินาที |
| network_info.response_initiated_time_us | int64 | ไมโครวินาทีหลังจาก event_timestamp เมื่อการตอบสนองของเครือข่าย
เริ่มต้นขึ้นหน่วย: ไมโครวินาที |
| network_info.response_completed_time_us | int64 | ไมโครวินาทีหลังจาก event_timestamp เมื่อการตอบสนองของเครือข่าย
เสร็จสมบูรณ์หน่วย: ไมโครวินาที |
สิ่งที่คุณทำได้กับข้อมูลที่ส่งออก
ส่วนต่อไปนี้แสดงตัวอย่างคําค้นหาที่คุณเรียกใช้ใน BigQuery กับข้อมูลที่ส่งออกPerformance Monitoringได้
จับคู่ข้อมูลที่เห็นในคอนโซล
แดชบอร์ด Firebase จะรวบรวมข้อมูลรายวันในเขตเวลา America/Los_Angeles
หากต้องการให้ตรงกับสิ่งที่เห็นในคอนโซล ฟังก์ชันวันที่ควรตั้งค่า
America/Los_Angeles เป็นเขตเวลาอย่างชัดเจน ไม่เช่นนั้นฟังก์ชันวันที่จะ
ใช้ UTC เป็นค่าเริ่มต้น
SELECT DATE(event_timestamp, 'America/Los_Angeles') AS daily_date, APPROX_QUANTILES(trace_info.duration_us, 100)[OFFSET(90)] / 1000000 AS p90_seconds, FROM `TABLE_NAME` WHERE DATE(event_timestamp, 'America/Los_Angeles') >= DATE_SUB( PARSE_DATE('%Y%m%d', 'YYYY-MM-DD'), INTERVAL 7 DAY) AND DATE(event_timestamp, 'America/Los_Angeles') <= PARSE_DATE('%Y%m%d', 'YYYY-MM-DD') AND event_name = '_app_start' GROUP BY 1 ORDER BY 1 DESC;
ดูการแบ่งย่อยของเวลาในการตอบสนองเฉลี่ยของการเริ่มต้นแอปตามประเทศ
SELECT AVG(trace_info.duration_us), country FROM `TABLE_NAME` WHERE _PARTITIONTIME > TIMESTAMP("YYYY-MM-DD") AND event_type = "DURATION_TRACE" AND event_name = "_app_start" GROUP BY 2;
ตรวจสอบอัตราส่วนของเฟรมที่ค้างเทียบกับเงื่อนไขต่างๆ
ตัวอย่างเช่น คุณสามารถตรวจสอบอัตราส่วนของเฟรมที่ค้างควบคู่ไปกับระยะเวลาที่ผู้ใช้ใช้ในแต่ละหน้าจอของแอปเมื่อใช้วิทยุประเภทต่างๆ (WiFi, 4G ฯลฯ)
SELECT AVG(trace_info.duration_us / 1000000) AS seconds_on_screen, AVG(trace_info.screen_info.frozen_frame_ratio) AS frozen_frame_ratio, event_name, radio_type FROM `TABLE_NAME` WHERE _PARTITIONTIME > TIMESTAMP("YYYY-MM-DD") AND event_type = "SCREEN_TRACE" GROUP BY event_name, radio_type ORDER BY event_name, radio_type;
คำนวณอัตราการพบแคชสำหรับการโหลดไฟล์บางประเภทจากดิสก์
การวิเคราะห์นี้จะถือว่าคุณได้เพิ่มเครื่องมือการติดตามโค้ดที่กำหนดเองสำหรับการโหลดจากดิสก์ด้วยแอตทริบิวต์ที่กำหนดเองชื่อ file-extension และเมตริกที่กำหนดเอง (TRACE_METRIC) ชื่อ cache-hit ซึ่งตั้งค่าเป็น 1 หากพบแคช และ 0 หากไม่พบแคช
ตัวอย่างเช่น คุณสามารถคำนวณอัตราการพบแคชสำหรับการโหลดไฟล์ PNG จากดิสก์ได้ดังนี้
SELECT AVG(trace_info.metric_info.metric_value) AS cache_hit_rate FROM `TABLE_NAME` WHERE _PARTITIONTIME > TIMESTAMP("YYYY-MM-DD") AND event_type = "TRACE_METRIC" AND event_name = "cache-hit" AND parent_trace_name = "loadFromDisk" AND STRUCT("file-extension", "png") IN UNNEST(custom_attributes);
ตรวจสอบเวลาที่ผู้ใช้ส่งคำขอเครือข่าย
ตัวอย่างเช่น คุณสามารถตรวจสอบได้ว่าผู้ใช้จากสหรัฐอเมริกาส่งคำขอเครือข่ายจากแอปของคุณในเวลาใดของวัน
SELECT count(1) AS hourly_count, EXTRACT(HOUR FROM event_timestamp) AS hour_of_day FROM `TABLE_NAME` WHERE _PARTITIONTIME > TIMESTAMP("YYYY-MM-DD") AND event_type = "NETWORK_REQUEST" AND country = "US" GROUP BY 2 ORDER BY 2;
นำข้อมูล Performance Monitoring ไปใช้ได้ทุกที่
บางครั้งคุณอาจต้องการเข้าถึงข้อมูล Performance Monitoring ฝั่งเซิร์ฟเวอร์หรือส่งข้อมูลไปยัง โซลูชันของบุคคลที่สาม ปัจจุบันการส่งออกข้อมูลไม่มีค่าใช้จ่าย
คุณสามารถส่งออกข้อมูลได้โดยทำดังนี้
ใช้ UI บนเว็บBigQuery
เรียกใช้คำสั่ง CLI
bq extract
ราคา
การส่งออกข้อมูลจาก Performance Monitoring ไม่มีค่าใช้จ่าย และ BigQuery มีขีดจำกัดการใช้งานแบบไม่เสียค่าใช้จ่ายที่เพียงพอ ดูข้อมูลโดยละเอียดได้ที่ BigQueryราคา หรือBigQuery Sandbox