Apple और Android ऐप्लिकेशन से Performance Monitoring डेटा को BigQuery में एक्सपोर्ट किया जा सकता है, ताकि उसका ज़्यादा विश्लेषण किया जा सके. BigQuery की मदद से, BigQuery SQL का इस्तेमाल करके डेटा का विश्लेषण किया जा सकता है. साथ ही, इसे क्लाउड सेवा देने वाली किसी दूसरी कंपनी के प्लैटफ़ॉर्म पर एक्सपोर्ट किया जा सकता है. इसके अलावा, इस डेटा का इस्तेमाल अपने कस्टम एमएल मॉडल के लिए भी किया जा सकता है.
BigQuery एक्सपोर्ट करने की सुविधा चालू करें
Firebase कंसोल में, इंटिग्रेशन पेज पर जाएं. इसके बाद, BigQuery कार्ड में, लिंक करें पर क्लिक करें.
BigQuery को चालू करने के लिए, स्क्रीन पर दिए गए निर्देशों का पालन करें.
Performance Monitoring के लिए BigQuery एक्सपोर्ट करने की सुविधा चालू करने पर, ये काम किए जा सकते हैं:
Firebase, BigQuery में आपके मौजूदा डेटा की कॉपी एक्सपोर्ट करता है. एक्सपोर्ट के लिए डेटा को पहली बार प्रोसेस होने में 48 घंटे लग सकते हैं.
- डेटा बैकफ़िल को मैन्युअल तरीके से शेड्यूल किया जा सकता है. इसके लिए, पिछले 30 दिनों या BigQuery एक्सपोर्ट को चालू करने की सबसे हाल की तारीख (इनमें से जो भी सबसे हाल की हो) तक का डेटा बैकफ़िल किया जा सकता है.
डेटासेट बनाने के बाद, उसकी जगह को बदला नहीं जा सकता. हालांकि, डेटासेट को किसी दूसरी जगह पर कॉपी किया जा सकता है या मैन्युअल तरीके से डेटासेट को किसी दूसरी जगह पर ले जाया जा सकता है, यानी कि इसे फिर से बनाया जा सकता है. ज़्यादा जानने के लिए, डेटासेट की जगह की जानकारी बदलना लेख पढ़ें.
Firebase, आपके Firebase प्रोजेक्ट से BigQuery में आपके डेटा को नियमित तौर पर सिंक करने की सुविधा सेट अप करता है. आम तौर पर, रोज़ाना होने वाले ये एक्सपोर्ट ऑपरेशन, शेड्यूल किए जाने के 24 घंटे बाद पूरे हो जाते हैं.
डिफ़ॉल्ट रूप से, आपके प्रोजेक्ट के सभी ऐप्लिकेशन BigQuery से लिंक होते हैं. बाद में प्रोजेक्ट में जोड़े जाने वाले ऐप्लिकेशन, 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_और स्क्रीन के असल नाम को मिलाकर बनता है
नेटवर्क का अनुरोध — नेटवर्क के अनुरोध की पूरी अवधि के दौरान होने वाले ट्रेस (एचटीटीपी नेटवर्क के अनुरोध के ट्रेस)
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 | स्ट्रिंग | ऐप्लिकेशन का वर्शन दिखाएं (उदाहरण के लिए, "4.1.7")
|
| app_build_version | स्ट्रिंग | ऐप्लिकेशन का बिल्ड वर्शन (उदाहरण के लिए, "1523456")
|
| os_version | स्ट्रिंग | क्लाइंट डिवाइस का ओएस वर्शन
|
| device_name | स्ट्रिंग | क्लाइंट डिवाइस का नाम (उदाहरण के लिए, "Google Pixel") |
| देश | स्ट्रिंग | उस देश का दो अक्षरों वाला कोड जहां इवेंट हुआ था. उदाहरण के लिए, "US" या किसी अज्ञात देश के लिए "ZZ" |
| शिपिंग की सेवा देने वाली कंपनी | स्ट्रिंग | क्लाइंट के डिवाइस की सेवा देने वाली कंपनी |
| radio_type | स्ट्रिंग | इवेंट के समय चालू रेडियो टाइप (उदाहरण के लिए, "वाई-फ़ाई") |
| 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 के बाद के माइक्रोसेकंडइकाई: माइक्रोसेकंड |
एक्सपोर्ट किए गए डेटा का इस्तेमाल कैसे किया जा सकता है?
यहां दिए गए सेक्शन में, उन क्वेरी के उदाहरण दिए गए हैं जिन्हें एक्सपोर्ट किए गए 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 पर सेट किया गया है.
उदाहरण के लिए, डिस्क से 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 सैंडबॉक्स पर जाएं.