ส่งออกข้อมูล 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 timestamp การประทับเวลาตั้งแต่ Epoch เมื่อเหตุการณ์เริ่มขึ้นในอุปกรณ์ไคลเอ็นต์ (การเริ่มต้นการติดตาม การเริ่มต้นเครือข่าย ฯลฯ)
app_display_version string เวอร์ชันที่แสดงของแอปพลิเคชัน (เช่น "4.1.7")
  • สำหรับ Android \- VersionName
  • สำหรับ iOS \- CFBundleShortVersionString
app_build_version string เวอร์ชันบิลด์ของแอปพลิเคชัน (เช่น "1523456")
  • สำหรับ Android \- VersionCode
  • สำหรับ iOS \- CFBundleVersion
os_version string เวอร์ชันระบบปฏิบัติการของอุปกรณ์ไคลเอ็นต์
  • สำหรับ Android \- ระดับ API ของ Android (เช่น "26")
  • สำหรับ iOS \- เวอร์ชัน iOS (เช่น "11.4")
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 ประเภทของเหตุการณ์ ซึ่งค่าที่เป็นไปได้มีดังนี้
  • DURATION_TRACE \- การติดตามที่รวบรวมเมตริก "ระยะเวลา" โดยค่าเริ่มต้น ซึ่งรวมถึงการเริ่มต้นแอป แอปที่ทำงานอยู่เบื้องหน้า และแอปที่ทำงานอยู่เบื้องหลัง รวมถึงการติดตามโค้ดที่กำหนดเองซึ่งนักพัฒนาแอปได้เพิ่มเครื่องมือไว้
  • SCREEN_TRACE \- การติดตามที่ครอบคลุมช่วงเวลาที่ หน้าจอมีอยู่ (การติดตามการแสดงผลของหน้าจอ)
  • TRACE_METRIC \- เมตริกที่กำหนดเองซึ่ง เชื่อมโยงกับการติดตามโค้ดที่กำหนดเองซึ่งนักพัฒนาแอปได้เพิ่มเครื่องมือไว้
  • NETWORK_REQUEST \- การติดตามที่ครอบคลุมช่วงเวลาที่คำขอเครือข่ายมีอยู่ (การติดตามคำขอเครือข่าย HTTP)
event_name string ชื่อเหตุการณ์
  • สำหรับ DURATION_TRACE \- ชื่อการติดตาม
  • สำหรับ TRACE_METRIC \- ชื่อเมตริกที่กำหนดเอง
  • สำหรับ SCREEN_TRACE \- _st_ ตามด้วยชื่อการติดตาม
  • สำหรับ NETWORK_REQUEST \- รูปแบบ URL ของคำขอเครือข่าย
parent_trace_name string ชื่อการติดตามระดับบนสุดที่มีเมตริกการติดตาม
มีเฉพาะสำหรับ 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 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

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

ราคา

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