ส่งออกข้อมูล Performance Monitoring ไปยัง BigQuery

คุณสามารถส่งออกข้อมูล Performance Monitoring จากแอป Apple และ Android ไปยัง BigQuery เพื่อการวิเคราะห์เพิ่มเติมได้ BigQuery ช่วยให้คุณวิเคราะห์ข้อมูลโดยใช้ BigQuery SQL, ส่งออกไปยังผู้ให้บริการระบบคลาวด์รายอื่น และแม้แต่ใช้ข้อมูลสำหรับโมเดล ML ที่กําหนดเอง

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

  1. ไปที่หน้าการผสานรวมในคอนโซล Firebase แล้วคลิกลิงก์ในการ์ด BigQuery

  2. ทำตามวิธีการบนหน้าจอเพื่อเปิดใช้BigQuery

    เมื่อเปิดใช้การส่งออก BigQuery สำหรับ Performance Monitoring สิ่งที่จะเกิดขึ้นมีดังนี้

    • Firebase จะส่งออกสําเนาข้อมูลที่มีอยู่ไปยัง BigQuery การเผยแพร่ข้อมูลเริ่มต้นเพื่อส่งออกอาจใช้เวลาถึง 48 ชั่วโมงจึงจะเสร็จสมบูรณ์

    • หลังจากที่สร้างชุดข้อมูลแล้ว คุณจะเปลี่ยนแปลงตำแหน่งไม่ได้ แต่จะคัดลอกชุดข้อมูลไปยังตำแหน่งอื่นหรือย้าย (สร้างใหม่) ชุดข้อมูลไปยังตำแหน่งอื่นด้วยตนเองได้ ดูข้อมูลเพิ่มเติมที่หัวข้อเปลี่ยนตำแหน่งชุดข้อมูล

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

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

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

ระบบจะส่งออกข้อมูลใดไปยัง BigQuery

สําหรับแต่ละแอปในโปรเจ็กต์ การส่งออกจะสร้างตารางที่มีเหตุการณ์ประสิทธิภาพที่บันทึกไว้ทั้งหมด แต่ละแถวในตารางคือเหตุการณ์ประสิทธิภาพรายการเดียวซึ่งอาจเป็นรายการใดรายการหนึ่งต่อไปนี้

  • การติดตามระยะเวลา — การติดตามที่รวบรวมเมตริก "ระยะเวลา" โดยค่าเริ่มต้น ซึ่งรวมถึงการเริ่มต้นแอป แอปที่ทำงานอยู่เบื้องหน้า และแอปที่ทำงานอยู่เบื้องหลัง ตลอดจนการติดตามโค้ดที่กําหนดเองซึ่งนักพัฒนาแอปติดตั้งใช้งาน

    • event_type คือ DURATION_TRACE
    • event_name เหมือนกับชื่อการติดตาม
  • เมตริกการติดตาม - เมตริกที่กําหนดเองซึ่งเชื่อมโยงกับการติดตามโค้ดที่กําหนดเองซึ่งนักพัฒนาซอฟต์แวร์ติดตั้งเครื่องมือไว้

    • event_type คือ TRACE_METRIC
    • event_name คือชื่อเมตริก
    • parent_trace_name คือชื่อการติดตามที่มีเมตริกนี้
  • การติดตามหน้าจอ — การติดตามที่ครอบคลุมอายุการใช้งานของหน้าจอ (การติดตามการแสดงผลหน้าจอ)

    • event_type คือ SCREEN_TRACE
    • event_name คือคำนำหน้า _st_ บวกกับชื่อหน้าจอจริง
  • คําขอเครือข่าย — การติดตามตลอดอายุของคําขอเครือข่าย (การติดตามคําขอเครือข่าย HTTP)

    • event_type คือ NETWORK_REQUEST
    • event_name คือรูปแบบที่จัดหมวดหมู่ของ URL คำขอเครือข่าย

เหตุการณ์ประสิทธิภาพแต่ละรายการมีแอตทริบิวต์ของเหตุการณ์ (เช่น ประเทศและผู้ให้บริการของอุปกรณ์ไคลเอ็นต์) รวมถึงข้อมูลเฉพาะของเหตุการณ์ ดังนี้

  • การติดตามระยะเวลา เมตริกการติดตาม และการติดตามหน้าจอมี trace_info
  • เมตริกการติดตามมี trace_info.metric_info
  • การติดตามหน้าจอมี trace_info.screen_info
  • ร่องรอยเครือข่ายมี network_info

สคีมาข้อมูลโดยละเอียด

ชื่อช่อง ประเภท คำอธิบาย
event_timestamp การประทับเวลา การประทับเวลานับจากจุดเริ่มต้นเมื่อเหตุการณ์เริ่มขึ้นในอุปกรณ์ไคลเอ็นต์ (การเริ่มการติดตาม การเริ่มเครือข่าย ฯลฯ)
เวอร์ชันที่แสดงของแอป สตริง แสดงเวอร์ชันของแอปพลิเคชัน (เช่น "4.1.7")
  • สำหรับ Android — VersionName
  • สำหรับ iOS — CFBundleShortVersionString
app_build_version สตริง เวอร์ชันบิลด์ของแอปพลิเคชัน (เช่น "1523456")
  • สำหรับ Android — VersionCode
  • สำหรับ iOS — CFBundleVersion
os_version สตริง เวอร์ชันระบบปฏิบัติการของอุปกรณ์ไคลเอ็นต์
  • สำหรับ Android — ระดับ API ของ Android (เช่น "26")
  • สำหรับ iOS — เวอร์ชัน iOS (เช่น "11.4")
device_name สตริง ชื่ออุปกรณ์ไคลเอ็นต์ (เช่น "Google Pixel")
country สตริง รหัสประเทศแบบ 2 ตัวอักษรของประเทศที่เกิดเหตุการณ์ (เช่น "US" หรือ "ZZ" สำหรับประเทศที่ไม่รู้จัก)
ผู้ให้บริการ สตริง ผู้ให้บริการของอุปกรณ์ไคลเอ็นต์
radio_type สตริง ประเภทวิทยุที่ใช้งานอยู่เมื่อเกิดเหตุการณ์ (เช่น "WIFI")
custom_attributes ARRAY <RECORD> แอตทริบิวต์ที่กําหนดเองทั้งหมดที่แนบมากับเหตุการณ์นี้
custom_attributes.key สตริง คีย์ของแอตทริบิวต์ที่กำหนดเอง
custom_attributes.value สตริง ค่าของแอตทริบิวต์ที่กำหนดเอง
ประเภทเหตุการณ์ สตริง ประเภทของเหตุการณ์ โดยค่าที่เป็นไปได้มีดังนี้
  • DURATION_TRACE — โดยค่าเริ่มต้น การติดตามที่รวบรวมเมตริก "ระยะเวลา" ซึ่งประกอบด้วยการเริ่มต้นแอป การติดตามในแอป และการติดตามในเบื้องหลัง ตลอดจนการติดตามโค้ดที่กำหนดเองที่มาจากนักพัฒนาซอฟต์แวร์
  • SCREEN_TRACE — ร่องรอยตลอดอายุการใช้งานของหน้าจอ (ร่องรอยการแสดงผลของหน้าจอ)
  • TRACE_METRIC — เมตริกที่กําหนดเองซึ่งเชื่อมโยงกับการติดตามโค้ดที่กําหนดเองที่นักพัฒนาซอฟต์แวร์ติดตั้งใช้งาน
  • NETWORK_REQUEST — การติดตามตลอดอายุของคำขอเครือข่าย (การติดตามคำขอเครือข่าย HTTP)
event_name สตริง ชื่อเหตุการณ์
  • สำหรับ DURATION_TRACE — ชื่อการติดตาม
  • สำหรับ TRACE_METRIC — ชื่อเมตริกที่กำหนดเอง
  • สำหรับ SCREEN_TRACE_st_ ตามด้วยชื่อการติดตาม
  • สําหรับ NETWORK_REQUEST — รูปแบบ URL คําขอเครือข่าย
parent_trace_name สตริง ชื่อของการติดตามระดับบนสุดที่มีเมตริกการติดตาม
แสดงเฉพาะสำหรับ TRACE_METRIC
trace_info RECORD นำเสนอสำหรับ DURATION_TRACE, SCREEN_TRACE และ TRACE_METRIC เท่านั้น
trace_info.duration_us int64
  • สำหรับ DURATION_TRACE และ SCREEN_TRACE — ระยะเวลา ("ระยะเวลา") ตั้งแต่ต้นจนจบการติดตาม
  • สำหรับ TRACE_METRIC — ระยะเวลา ("duration") จากจุดเริ่มต้นจนถึงจุดสิ้นสุดของร่องรอยหลัก
หน่วย: ไมโครวินาที
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 Float 64 อัตราส่วนของเฟรมที่ค้างสำหรับการติดตามหน้าจอนี้ ระหว่าง 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 สตริง ประเภท MIME ของการตอบกลับของเครือข่าย (เช่น "text/html")
network_info.request_http_method สตริง เมธอด 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;

ตรวจสอบอัตราส่วนของเฟรมที่ค้างกับเงื่อนไขต่างๆ

เช่น คุณสามารถตรวจสอบอัตราส่วนของเฟรมที่หยุดค้างไว้พร้อมกับระยะเวลาที่ผู้ใช้ใช้ในการดูแต่ละหน้าจอของแอปเมื่อใช้เครือข่ายประเภทต่างๆ (Wi-Fi, 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;

อัตรา Hit ของแคชการประมวลผลสําหรับการโหลดไฟล์บางประเภทจากดิสก์

การวิเคราะห์นี้จะสมมติว่าคุณใช้การติดตามโค้ดที่กำหนดเองสำหรับการโหลดจากดิสก์ด้วยแอตทริบิวต์ที่กำหนดเองชื่อ file-extension และเมตริกที่กำหนดเอง (a TRACE_METRIC) ชื่อ cache-hit ซึ่งตั้งค่าเป็น 1 หากระบบพบแคชและ 0 หากไม่พบแคช

เช่น คุณสามารถคํานวณอัตรา Hit ของแคชสําหรับการโหลดไฟล์ 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

  • การส่งงานดึงข้อมูลผ่าน API หรือไลบรารีของไคลเอ็นต์

ราคา

การส่งออกข้อมูลจาก Performance Monitoring ไม่มีค่าใช้จ่าย และ BigQuery มีขีดจำกัดการใช้งานแบบไม่มีค่าใช้จ่ายที่กว้างขวาง ดูข้อมูลโดยละเอียดได้ที่ราคา BigQuery หรือแซนด์บ็อกซ์ BigQuery