Apple और Android ऐप्लिकेशन से Performance Monitoring डेटा को BigQuery में एक्सपोर्ट किया जा सकता है, ताकि आगे उसका विश्लेषण किया जा सके. BigQuery की मदद से, BigQuery SQL का इस्तेमाल करके डेटा का विश्लेषण किया जा सकता है. साथ ही, इसे किसी अन्य क्लाउड सेवा देने वाली कंपनी को एक्सपोर्ट किया जा सकता है. इसके अलावा, अपने कस्टम एमएल मॉडल के लिए भी इस डेटा का इस्तेमाल किया जा सकता है.
BigQuery एक्सपोर्ट करने की सुविधा चालू करना
Firebase कंसोल में, इंटिग्रेशन पेज पर जाएं. इसके बाद, BigQuery कार्ड में जाकर, लिंक करें पर क्लिक करें.
BigQuery को चालू करने के लिए, स्क्रीन पर दिए गए निर्देशों का पालन करें.
Performance Monitoring के लिए BigQuery एक्सपोर्ट करने की सुविधा चालू करने पर, ये बदलाव होते हैं:
Firebase, आपके मौजूदा डेटा की कॉपी को एक्सपोर्ट करता है.BigQuery एक्सपोर्ट के लिए डेटा को शुरू में प्रोसेस होने में 48 घंटे लग सकते हैं.
- BigQuery एक्सपोर्ट करने की सुविधा चालू करने के बाद, पिछले 30 दिनों या सबसे हाल की तारीख तक के लिए, डेटा बैकफ़िल को मैन्युअल तरीके से शेड्यूल किया जा सकता है.
डेटासेट बनाने के बाद, उसकी जगह को बदला नहीं जा सकता. हालांकि, डेटासेट को किसी दूसरी जगह पर कॉपी किया जा सकता है. इसके अलावा, मैन्युअल तरीके से डेटासेट को किसी दूसरी जगह पर ले जाया जा सकता है, यानी कि इसे फिर से बनाया जा सकता है. ज़्यादा जानने के लिए, डेटासेट की जगह की जानकारी बदलना लेख पढ़ें.
Firebase, आपके Firebase प्रोजेक्ट से BigQuery में डेटा को नियमित तौर पर सिंक करता है. हर दिन के एक्सपोर्ट ऑपरेशन, शेड्यूल किए जाने के बाद आम तौर पर 24 घंटों में पूरे हो जाते हैं.
आपके प्रोजेक्ट के सभी ऐप्लिकेशन डिफ़ॉल्ट रूप से, BigQuery से लिंक होते हैं. बाद में प्रोजेक्ट में जोड़े जाने वाले ऐप्लिकेशन भी अपने-आप BigQuery से लिंक कर दिए जाते हैं. आपके पास BigQuery में डेटा भेजने वाले ऐप्लिकेशन चुनने का विकल्प होता है.
BigQuery एक्सपोर्ट करने की सुविधा बंद करने के लिए, Firebase कंसोल में जाकर अपने प्रोजेक्ट को अनलिंक करें.
BigQuery में कौनसा डेटा एक्सपोर्ट किया जाता है?
प्रोजेक्ट में मौजूद हर ऐप्लिकेशन के लिए, एक्सपोर्ट एक ऐसी टेबल बनाता है जिसमें कैप्चर किए गए सभी परफ़ॉर्मेंस इवेंट शामिल होते हैं. टेबल की हर लाइन, एक परफ़ॉर्मेंस इवेंट होती है. यह इनमें से कोई एक हो सकता है:
अवधि के बारे में जानकारी देने वाले ट्रेस — ये ऐसे ट्रेस होते हैं जो डिफ़ॉल्ट रूप से "अवधि" मेट्रिक इकट्ठा करते हैं. इनमें ऐप्लिकेशन शुरू होने, ऐप्लिकेशन फ़ोरग्राउंड में होने, और ऐप्लिकेशन बैकग्राउंड में होने की अवधि शामिल होती है. साथ ही, इनमें डेवलपर के इंस्ट्रुमेंट किए गए कस्टम कोड ट्रेस भी शामिल होते हैं
event_typeDURATION_TRACEहैevent_name, ट्रेस के नाम जैसा ही है
ट्रेस मेट्रिक — कस्टम मेट्रिक, जो डेवलपर के इंस्ट्रुमेंट किए गए कस्टम कोड ट्रेस से जुड़ी होती हैं
event_typeTRACE_METRICहैevent_name, मेट्रिक का नाम हैparent_trace_nameवह ट्रेस नेम है जिसमें यह मेट्रिक शामिल है
स्क्रीन ट्रेस — स्क्रीन के लाइफ़टाइम में होने वाले ट्रेस (स्क्रीन रेंडरिंग ट्रेस)
event_typeSCREEN_TRACEहैevent_name, प्रीफ़िक्स_st_और स्क्रीन का असली नाम होता है
नेटवर्क अनुरोध — नेटवर्क अनुरोध के पूरे लाइफ़टाइम को कवर करने वाले ट्रेस (एचटीटीपी नेटवर्क अनुरोध के ट्रेस)
event_typeNETWORK_REQUESTहैevent_name, नेटवर्क अनुरोध यूआरएल का कैटगरी के हिसाब से पैटर्न है
हर परफ़ॉर्मेंस इवेंट में, इवेंट के एट्रिब्यूट (जैसे कि क्लाइंट डिवाइस का देश और कैरियर) के साथ-साथ इवेंट से जुड़ी जानकारी भी होती है:
- अवधि के ट्रेस, ट्रेस मेट्रिक, और स्क्रीन ट्रेस में
trace_infoशामिल होते हैं - ट्रेस मेट्रिक में
trace_info.metric_infoशामिल है - स्क्रीन ट्रेस में
trace_info.screen_infoशामिल हैं - नेटवर्क ट्रेस में
network_infoशामिल हैं
ज़्यादा जानकारी वाले डेटा का स्कीमा
| फ़ील्ड का नाम | टाइप | ब्यौरा |
|---|---|---|
| event_timestamp | timestamp | क्लाइंट डिवाइस पर इवेंट शुरू होने का टाइमस्टैंप (ट्रेस शुरू होना, नेटवर्क शुरू होना वगैरह) |
| app_display_version | स्ट्रिंग | ऐप्लिकेशन का वर्शन दिखाएं. उदाहरण के लिए, "4.1.7"
|
| app_build_version | स्ट्रिंग | ऐप्लिकेशन का बिल्ड वर्शन (उदाहरण के लिए, "1523456")
|
| os_version | स्ट्रिंग | क्लाइंट डिवाइस का ओएस वर्शन
|
| device_name | स्ट्रिंग | क्लाइंट डिवाइस का नाम (उदाहरण के लिए, "Google Pixel") |
| देश | स्ट्रिंग | उस देश का दो अक्षर वाला कोड जहां से इवेंट हुआ (उदाहरण के लिए, "US" या "ZZ" का मतलब है कि देश की जानकारी नहीं है) |
| शिपिंग की सेवा देने वाली कंपनी | स्ट्रिंग | क्लाइंट डिवाइस की सेवा देने वाली कंपनी |
| radio_type | स्ट्रिंग | इवेंट के समय रेडियो किस तरह से काम कर रहा था (उदाहरण के लिए, "WIFI") |
| custom_attributes | ARRAY<RECORD> | इस इवेंट से जुड़े सभी कस्टम एट्रिब्यूट |
| custom_attributes.key | स्ट्रिंग | कस्टम एट्रिब्यूट की कुंजी |
| custom_attributes.value | स्ट्रिंग | कस्टम एट्रिब्यूट की वैल्यू |
| event_type | स्ट्रिंग | इवेंट का टाइप; संभावित वैल्यू:
|
| event_name | स्ट्रिंग | इवेंट का नाम
|
| parent_trace_name | स्ट्रिंग | उस पैरंट ट्रेस का नाम जिसमें ट्रेस मेट्रिक शामिल है सिर्फ़ TRACE_METRIC के लिए मौजूद है |
| trace_info | रिकॉर्ड | सिर्फ़ DURATION_TRACE, SCREEN_TRACE, और TRACE_METRIC के लिए मौजूद है |
| trace_info.duration_us | int64 |
|
| 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 | नेटवर्क रिस्पॉन्स के लिए एचटीटीपी रिस्पॉन्स कोड (उदाहरण के लिए, 200, 404) |
| network_info.response_mime_type | स्ट्रिंग | नेटवर्क रिस्पॉन्स का एमआईएमई टाइप (उदाहरण के लिए, "text/html") |
| network_info.request_http_method | स्ट्रिंग | नेटवर्क अनुरोध का एचटीटीपी तरीका (उदाहरण के लिए, "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 को साफ़ तौर पर सेट करना चाहिए. ऐसा न करने पर, तारीख वाला फ़ंक्शन डिफ़ॉल्ट रूप से यूटीसी का इस्तेमाल करेगा.
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 पर सेट किया जाता है.
उदाहरण के लिए, डिस्क से 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एपीआई या क्लाइंट लाइब्रेरी के ज़रिए, डेटा निकालने का टास्क सबमिट करना.
कीमत
Performance Monitoring से डेटा एक्सपोर्ट करने के लिए कोई शुल्क नहीं लिया जाता. साथ ही, BigQuery को बिना किसी शुल्क के इस्तेमाल करने की सीमाएं भी काफ़ी ज़्यादा हैं. ज़्यादा जानकारी के लिए, BigQuery की कीमत या BigQuery सैंडबॉक्स देखें.