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

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

הפעלת הייצוא של 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 מחרוזת גרסת ה-OS של מכשיר הלקוח
  • ל-Android – רמת API של Android (לדוגמה, '26')
  • ב-iOS – גרסת iOS (לדוגמה, '11.4')
שם_מכשיר מחרוזת שם מכשיר הלקוח (לדוגמה, Google Pixel)
country מחרוזת קוד מדינה בן שתי אותיות של המדינה שממנה התקיים האירוע (לדוגמה, 'US' או 'ZZ' למדינה לא ידועה)
חברת תובלה מחרוזת ספק המכשיר של הלקוח
סוג_רדיו מחרוזת סוג הרדיו הפעיל כשהאירוע התרחש (לדוגמה, 'Wi-Fi')
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 — משך הזמן ('duration') מההתחלה ועד הסוף של המעקב
  • עבור TRACE_METRIC – משך הזמן ("duration") מההתחלה ועד הסוף של המעקב ברמת ההורה
יחידה: מיקרו-שנייה
trace_info.screen_info רשומה מוצג רק ל-SCREEN_TRACE
trace_info.screen_info.slow_frame_ratio float64 היחס של פריימים איטיים בניתוח המסך הזה, בין 0 ל-1 (לדוגמה, ערך של 0.05 מציין ש-5% מהפריימים של מופע המסך הזה נדרשו יותר מ-16 אלפיות השנייה לעיבוד)
train_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;

שיעור ההיטים במטמון של 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 בצד השרת או לדחוף אותם לפתרון אחר של צד שלישי. ייצוא הנתונים לא כרוך בתשלום כרגע.

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

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

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

  • שליחת משימת חילוץ דרך ה-API או ספריות הלקוח.

תמחור

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