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

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

הפעלת הייצוא של 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 חותמת זמן חותמת זמן מאז תחילת התקופה שבה האירוע התחיל במכשיר הלקוח (תחילת המעקב, תחילת הרשת וכו')
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 מחרוזת שם האירוע
  • ‫DURATION_TRACE – שם המעקב
  • ‫TRACE_METRIC – שם המדד המותאם אישית
  • למשל, SCREEN_TRACE — _st_ ואחריו שם המעקב
  • ‫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 – משך הזמן מתחילת המעקב ועד לסופו
  • בשביל TRACE_METRIC – משך הזמן ("duration") מתחילת המעקב הראשי ועד לסופו
יחידה: מיקרו-שנייה
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 גודל המטען הייעודי (payload) של התגובה ברשת
יחידה: בייט
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;

חישוב שיעור המציאה במטמון (cache hit) לטעינת סוגים מסוימים של קבצים מהדיסק

בניתוח הזה אנחנו מניחים שהגדרתם מעקב אחר קוד בהתאמה אישית לטעינה מהדיסק, עם מאפיין מותאם אישית בשם 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

  • מריצים את פקודת ה-CLI‏ bq extract

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

תמחור

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