ส่งออกข้อมูล 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 is prefix _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_METRIC
trace_info RECORD มีเฉพาะใน DURATION_TRACE SCREEN_TRACE และ TRACE_METRIC
trace_info.duration_us int64
  • สำหรับ DURATION_TRACE และ SCREEN_TRACE — ระยะเวลา ("ระยะเวลา") ตั้งแต่ต้นจนจบ ของร่องรอย
  • สำหรับ TRACE_METRIC — ระยะเวลา ("ระยะเวลา") ตั้งแต่ต้นจนจบการติดตามระดับบนสุด
หน่วย: ไมโครวินาที
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;

อัตราการเข้าถึงแคชของ Compute สำหรับการโหลดไฟล์บางประเภทจากดิสก์

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