ייצוא נתוני מעקב הביצועים ל-BigQuery

אפשר לייצא נתוני Performance Monitoring מאפליקציות של Apple ו-Android אל BigQuery לצורך ניתוח נוסף. ‫BigQuery מאפשר לכם לנתח את הנתונים באמצעות BigQuery SQL, לייצא אותם לספק ענן אחר ואפילו להשתמש בנתונים במודלים של ML בהתאמה אישית.

הפעלת הייצוא של BigQuery

  1. עוברים לדף Integrations (שילובים) במסוף Firebase ולוחצים על Link (קישור) בכרטיס 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 מחרוזת גרסת ה-Build של האפליקציה (לדוגמה, ‎1523456)
  • ב-Android — VersionCode
  • ב-iOS — CFBundleVersion
os_version מחרוזת גרסת מערכת ההפעלה של מכשיר הלקוח
  • ל-Android – רמת ה-API של Android (לדוגמה, '26')
  • ‫iOS – גרסת ה-iOS (לדוגמה, ‎11.4)
device_name מחרוזת השם של מכשיר הלקוח (לדוגמה, Google Pixel)
country מחרוזת קוד מדינה בן שתי אותיות שמייצג את המדינה שבה התרחש האירוע (לדוגמה, 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 מחרוזת שם האירוע
  • ‫For DURATION_TRACE — trace name
  • ‫For TRACE_METRIC — custom metric name
  • ‫For SCREEN_TRACE_st_ followed by the trace name
  • NETWORK_REQUEST – תבנית של כתובת URL של בקשה לרשת
parent_trace_name מחרוזת השם של מעקב האב שכולל את מדד המעקב
השדה הזה מופיע רק ב-TRACE_METRIC
trace_info רשומה מוצג רק ב-DURATION_TRACE, SCREEN_TRACE וב-TRACE_METRIC
trace_info.duration_us int64
  • DURATION_TRACE ו-SCREEN_TRACE — משך הזמן ("duration") מתחילת העקבות ועד סופם
  • ‫For TRACE_METRIC — length of time ("duration") from the beginning to the end of the parent trace
יחידה: מיקרו-שנייה
trace_info.screen_info רשומה ההצעה תקפה רק ל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 רשומה ההצעה תקפה רק לTRACE_METRIC
trace_info.metric_info.metric_value int64 הערך של מדד העקבות
network_info רשומה ההצעה תקפה רק ל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 גודל המטען הייעודי (payload) של בקשת הרשת
יחידה: בייט
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 בצד השרת או להעביר אותם לפתרון אחר של צד שלישי. בשלב הזה, אין חיוב על ייצוא נתונים.

אפשר לייצא את הנתונים בדרכים הבאות:

  • שימוש בממשק המשתמש של BigQuery באינטרנט

  • הרצת הפקודה bq extract ב-CLI

  • שליחת משימת חילוץ באמצעות ה-API או ספריות הלקוח.

תמחור

ייצוא נתונים מ-Performance Monitoring לא כרוך בתשלום, ו-Performance Monitoring מספק מגבלות שימוש נדיבות ללא עלות.BigQuery למידע מפורט, אפשר לעיין בBigQuery מחירון או בארגז החול של BigQuery.