ส่งออกข้อมูล 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 การประทับเวลา การประทับเวลาตั้งแต่ Epoch เมื่อเหตุการณ์เริ่มต้นในอุปกรณ์ไคลเอ็นต์ (การเริ่มต้นการติดตาม การเริ่มต้นเครือข่าย ฯลฯ)
app_display_version สตริง เวอร์ชันที่แสดงของแอปพลิเคชัน (เช่น "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 สตริง ค่าของแอตทริบิวต์ที่กำหนดเอง
event_type สตริง ประเภทของเหตุการณ์ โดยค่าที่เป็นไปได้มีดังนี้
  • 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 ระดับบนที่มีเมตริก Trace
แสดงเฉพาะ TRACE_METRIC เท่านั้น
trace_info RECORD แสดงเฉพาะ DURATION_TRACE, SCREEN_TRACE และ TRACE_METRIC
trace_info.duration_us int64
  • สำหรับ DURATION_TRACE และ SCREEN_TRACE - ระยะเวลา ("duration") ตั้งแต่ต้นจนจบของการติดตาม
  • สำหรับ 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 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 สตริง ประเภท 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;

คำนวณอัตราการพบแคชสำหรับการโหลดไฟล์บางประเภทจากดิสก์

การวิเคราะห์นี้จะถือว่าคุณได้ใช้เครื่องมือติดตามโค้ดที่กำหนดเองสำหรับการโหลดจากดิสก์ด้วยชื่อแอตทริบิวต์ที่กำหนดเอง 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

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

ราคา

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