Apple और Android ऐप्लिकेशन से, Performance Monitoring डेटा BigQuery में एक्सपोर्ट किया जा सकता है. इससे, डेटा का बेहतर तरीके से विश्लेषण किया जा सकता है. BigQuery SQL का इस्तेमाल करके, डेटा का विश्लेषण किया जा सकता है. साथ ही, इसे किसी दूसरे क्लाउड सेवा देने वाली कंपनी को एक्सपोर्ट किया जा सकता है. इसके अलावा, अपने हिसाब से बनाए गए एमएल मॉडल के लिए भी डेटा का इस्तेमाल किया जा सकता है.BigQuery
BigQuery एक्सपोर्ट करने की सुविधा चालू करना
Firebase console में, इंटिग्रेशन पेज पर जाएं. इसके बाद, BigQuery कार्ड में लिंक करें पर क्लिक करें.
BigQuery में डेटा एक्सपोर्ट करने की सुविधा चालू करने के लिए, स्क्रीन पर दिए गए निर्देशों का पालन करें.BigQuery
Performance Monitoring के लिए, BigQuery में डेटा एक्सपोर्ट करने की सुविधा चालू करने पर, ये काम होते हैं:
Firebase, आपके मौजूदा डेटा की एक कॉपी BigQuery में एक्सपोर्ट करता है.BigQuery एक्सपोर्ट के लिए डेटा को शुरू में प्रोपगेट होने में 48 घंटे तक लग सकते हैं.
डेटासेट बनाने के बाद, उसकी जगह को बदला नहीं जा सकता. हालांकि, डेटासेट को किसी दूसरी जगह पर कॉपी किया जा सकता है. इसके अलावा, मैन्युअल तरीके से डेटासेट को किसी दूसरी जगह पर ले जाया जा सकता है, यानी कि इसे फिर से बनाया जा सकता है. ज़्यादा जानने के लिए, डेटासेट की जगह बदलना लेख पढ़ें.
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 | string | ऐप्लिकेशन का डिसप्ले वर्शन (उदाहरण के लिए, "4.1.7")
|
| app_build_version | string | ऐप्लिकेशन का बिल्ड वर्शन (उदाहरण के लिए, "1523456")
|
| os_version | string | क्लाइंट डिवाइस का ओएस वर्शन
|
| 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 | इवेंट का टाइप. इसकी ये वैल्यू हो सकती हैं:
|
| event_name | string | इवेंट का नाम
|
| parent_trace_name | string | पैरंट ट्रेस का नाम, जिसमें ट्रेस मेट्रिक शामिल होती है यह सिर्फ़ TRACE_METRIC के लिए मौजूद होता है |
| trace_info | RECORD | यह सिर्फ़ DURATION_TRACE,
SCREEN_TRACE, और TRACE_METRIC के लिए मौजूद होता है |
| trace_info.duration_us | int64 |
|
| 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 डेटा को सर्वर-साइड से ऐक्सेस करना होता है या इसे तीसरे पक्ष के किसी अन्य समाधान में पुश करना होता है. फ़िलहाल, डेटा एक्सपोर्ट करने के लिए कोई शुल्क नहीं लिया जाता.
आपके पास इन तरीकों से डेटा एक्सपोर्ट करने का विकल्प होता है:
वेब यूज़र इंटरफ़ेस (यूआई) का इस्तेमाल करनाBigQuery
सीएलआई कमांड चलाना
bq extractएपीआई या क्लाइंट लाइब्रेरी के ज़रिए, एक्सट्रैक्ट करने का कोई काम सबमिट करना.
कीमत
Performance Monitoring से डेटा एक्सपोर्ट करने के लिए कोई शुल्क नहीं लिया जाता. साथ ही, BigQuery में बिना किसी शुल्क के इस्तेमाल की सीमाएं काफ़ी ज़्यादा होती हैं. ज़्यादा जानकारी के लिए, BigQueryकीमत या BigQueryसैंडबॉक्स देखें.