परफ़ॉर्मेंस मॉनिटर करने से जुड़े डेटा को BigQuery में एक्सपोर्ट करें

Apple और Android ऐप्लिकेशन से, Performance Monitoring डेटा BigQuery में एक्सपोर्ट किया जा सकता है. इससे, डेटा का बेहतर तरीके से विश्लेषण किया जा सकता है. BigQuery SQL का इस्तेमाल करके, डेटा का विश्लेषण किया जा सकता है. साथ ही, इसे किसी दूसरे क्लाउड सेवा देने वाली कंपनी को एक्सपोर्ट किया जा सकता है. इसके अलावा, अपने हिसाब से बनाए गए एमएल मॉडल के लिए भी डेटा का इस्तेमाल किया जा सकता है.BigQuery

BigQuery एक्सपोर्ट करने की सुविधा चालू करना

  1. इंटिग्रेशन पेज पर जाएं. इसके बाद, Firebase console में, BigQuery कार्ड में लिंक करें पर क्लिक करें.

  2. BigQuery में डेटा एक्सपोर्ट करने की सुविधा चालू करने के लिए, स्क्रीन पर दिए गए निर्देशों का पालन करें.BigQuery

    Performance Monitoring के लिए, 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_ के साथ स्क्रीन के असली नाम के बराबर होती है
  • नेटवर्क अनुरोध — ये ट्रेस, नेटवर्क अनुरोध (एचटीटीपी नेटवर्क अनुरोध ट्रेस) के लाइफ़टाइम तक चलते हैं

    • event_type की वैल्यू NETWORK_REQUEST होती है
    • event_name की वैल्यू, नेटवर्क अनुरोध के यूआरएल के कैटगरी के हिसाब से पैटर्न के बराबर होती है

परफ़ॉर्मेंस से जुड़े हर इवेंट में, इवेंट के एट्रिब्यूट (जैसे, क्लाइंट डिवाइस का देश और शिपिंग की सेवा देने वाली कंपनी) के साथ-साथ, इवेंट की खास जानकारी भी शामिल होती है:

  • ड्यूरेशन ट्रेस, ट्रेस मेट्रिक, और स्क्रीन ट्रेस में 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 के लिए — Android का एपीआई लेवल (उदाहरण के लिए, "26")
  • iOS के लिए — iOS वर्शन (उदाहरण के लिए, "11.4")
device_name string क्लाइंट डिवाइस का नाम (उदाहरण के लिए, "Google Pixel")
country string उस देश का दो अक्षरों वाला कोड जहां से इवेंट हुआ है (उदाहरण के लिए, "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 — ये ट्रेस, नेटवर्क अनुरोध (एचटीटीपी नेटवर्क अनुरोध ट्रेस) के लाइफ़टाइम तक चलते हैं
event_name string इवेंट का नाम
  • DURATION_TRACE के लिए — ट्रेस का नाम
  • TRACE_METRIC के लिए — कस्टम मेट्रिक का नाम
  • SCREEN_TRACE के लिए — _st_ के बाद ट्रेस का नाम
  • NETWORK_REQUEST के लिए — नेटवर्क अनुरोध के यूआरएल का पैटर्न
parent_trace_name string पैरंट ट्रेस का नाम, जिसमें ट्रेस मेट्रिक शामिल होती है
यह सिर्फ़ 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 नेटवर्क रिस्पॉन्स के लिए एचटीटीपी रिस्पॉन्स कोड (उदाहरण के लिए, 200, 404)
network_info.response_mime_type string नेटवर्क रिस्पॉन्स का एमआईएमई टाइप (उदाहरण के लिए, "text/html")
network_info.request_http_method string नेटवर्क अनुरोध का एचटीटीपी तरीका (उदाहरण के लिए, "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 के बाद के माइक्रोसेकंड, जब नेटवर्क रिस्पॉन्स पूरा होता है
यूनिट: माइक्रोसेकंड

एक्सपोर्ट किए गए डेटा का इस्तेमाल कैसे किया जा सकता है?

इन सेक्शन में, क्वेरी के उदाहरण दिए गए हैं. इन्हें, एक्सपोर्ट किए गए Performance Monitoring डेटा के ख़िलाफ़ BigQuery में चलाया जा सकता है.

कंसोल पर दिखने वाले डेटा से मेल खाना

Firebase डैशबोर्ड, America/Los_Angeles टाइमज़ोन में हर दिन का डेटा इकट्ठा करता है. कंसोल पर दिखने वाले डेटा से मेल खाने के लिए, तारीख वाले फ़ंक्शन में America/Los_Angeles को टाइमज़ोन के तौर पर साफ़ तौर पर सेट किया जाना चाहिए. ऐसा न करने पर, तारीख वाला फ़ंक्शन डिफ़ॉल्ट रूप से यूटीसी का इस्तेमाल करेगा.

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;

अलग-अलग स्थितियों के हिसाब से, फ़्रीज़ हुए फ़्रेम का अनुपात देखना

उदाहरण के लिए, अलग-अलग रेडियो टाइप (वाई-फ़ाई, 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 नाम का कस्टम एट्रिब्यूट और cache-hit नाम की कस्टम मेट्रिक (TRACE_METRIC) शामिल है. अगर कैश हिट होता है, तो इसकी वैल्यू 1 होती है. वहीं, अगर कैश मिस होता है, तो इसकी वैल्यू 0 होती है.

उदाहरण के लिए, डिस्क से पीएनजी फ़ाइलें लोड करने के लिए, कैश हिट रेट का हिसाब लगाया जा सकता है:

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 डेटा को सर्वर-साइड से ऐक्सेस करना होता है या उसे तीसरे पक्ष के किसी अन्य समाधान में पुश करना होता है. फ़िलहाल, डेटा एक्सपोर्ट करने पर कोई शुल्क नहीं लिया जाता.

डेटा को इन तरीकों से एक्सपोर्ट किया जा सकता है:

कीमत

Performance Monitoring से डेटा एक्सपोर्ट करने पर कोई शुल्क नहीं लिया जाता. साथ ही, BigQuery में बिना किसी शुल्क के इस्तेमाल की सीमाएं भी काफ़ी ज़्यादा हैं. ज़्यादा जानकारी के लिए, BigQueryकीमत या BigQueryसैंडबॉक्स देखें.