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

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

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

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

  2. BigQuery को चालू करने के लिए, स्क्रीन पर दिए गए निर्देशों का पालन करें.

    Performance Monitoring के लिए BigQuery एक्सपोर्ट करने की सुविधा चालू करने पर, ये काम किए जा सकते हैं:

    • Firebase, 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 स्ट्रिंग ऐप्लिकेशन का वर्शन दिखाएं (उदाहरण के लिए, "4.1.7")
  • Android के लिए — VersionName
  • iOS के लिए — CFBundleShortVersionString
app_build_version स्ट्रिंग ऐप्लिकेशन का बिल्ड वर्शन (उदाहरण के लिए, "1523456")
  • Android के लिए — VersionCode
  • iOS के लिए — CFBundleVersion
os_version स्ट्रिंग क्लाइंट डिवाइस का ओएस वर्शन
  • Android के लिए — Android एपीआई लेवल (उदाहरण के लिए, "26")
  • iOS के लिए — iOS वर्शन (उदाहरण के लिए, "11.4")
device_name स्ट्रिंग क्लाइंट डिवाइस का नाम (उदाहरण के लिए, "Google Pixel")
देश स्ट्रिंग उस देश का दो अक्षरों वाला कोड जहां इवेंट हुआ था. उदाहरण के लिए, "US" या किसी अज्ञात देश के लिए "ZZ"
शिपिंग की सेवा देने वाली कंपनी स्ट्रिंग क्लाइंट के डिवाइस की सेवा देने वाली कंपनी
radio_type स्ट्रिंग इवेंट के समय चालू रेडियो टाइप (उदाहरण के लिए, "वाई-फ़ाई")
custom_attributes ARRAY<RECORD> इस इवेंट से जुड़े सभी कस्टम एट्रिब्यूट
custom_attributes.key स्ट्रिंग कस्टम एट्रिब्यूट की कुंजी
custom_attributes.value स्ट्रिंग कस्टम एट्रिब्यूट की वैल्यू
event_type स्ट्रिंग इवेंट का टाइप. इसकी ये वैल्यू हो सकती हैं:
  • DURATION_TRACE — ऐसे ट्रेस जो डिफ़ॉल्ट रूप से, "अवधि" की मेट्रिक इकट्ठा करते हैं. इनमें ऐप्लिकेशन के शुरू होने, ऐप्लिकेशन के फ़ोरग्राउंड में होने, और ऐप्लिकेशन के बैकग्राउंड में होने के साथ-साथ, डेवलपर के इंस्ट्रुमेंट किए गए कस्टम कोड ट्रेस भी शामिल हैं
  • SCREEN_TRACE — स्क्रीन के लाइफ़टाइम तक चलने वाले ट्रेस (स्क्रीन रेंडरिंग ट्रेस)
  • TRACE_METRIC — कस्टम मेट्रिक, जो डेवलपर के इंस्ट्रुमेंट किए गए कस्टम कोड ट्रेस से जुड़ी होती हैं
  • NETWORK_REQUEST — नेटवर्क अनुरोध के लाइफ़टाइम को कवर करने वाले ट्रेस (एचटीटीपी नेटवर्क अनुरोध ट्रेस)
event_name स्ट्रिंग इवेंट का नाम
  • DURATION_TRACE के लिए — ट्रेस का नाम
  • TRACE_METRIC के लिए — कस्टम मेट्रिक का नाम
  • SCREEN_TRACE के लिए — _st_ के बाद ट्रेस का नाम
  • NETWORK_REQUEST के लिए — नेटवर्क अनुरोध का यूआरएल पैटर्न
parent_trace_name स्ट्रिंग ट्रेस मेट्रिक वाले पैरंट ट्रेस का नाम
सिर्फ़ TRACE_METRIC के लिए मौजूद है
trace_info रिकॉर्ड सिर्फ़ DURATION_TRACE, SCREEN_TRACE, और TRACE_METRIC के लिए उपलब्ध है
trace_info.duration_us int64
  • DURATION_TRACE और SCREEN_TRACE के लिए — ट्रेस की शुरुआत से लेकर उसके खत्म होने तक का समय ("अवधि")
  • TRACE_METRIC के लिए — पैरंट ट्रेस के शुरू से लेकर आखिर तक की अवधि ("अवधि")
इकाई: माइक्रोसेकंड
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 सैंडबॉक्स पर जाएं.