صادر کردن داده‌های «پایش عملکرد» به BigQuery

می‌توانید داده‌های Performance Monitoring را از برنامه‌های Apple و Android به BigQuery صادر کنید تا تحلیل بیشتری انجام دهید. BigQuery به شما امکان می‌دهد داده‌ها را بااستفاده از BigQuery SQL تجزیه‌وتحلیل کنید، آن‌ها را به ارائه‌دهنده ابری دیگری صادر کنید، و حتی از داده‌ها برای مدل‌های یادگیری ماشین سفارشی‌تان استفاده کنید.

فعال کردن صادر کردن BigQuery

  1. به صفحه ادغام‌ها در کنسول Firebase بروید، سپس روی پیوند در کارت BigQuery کلیک کنید.

  2. برای فعال کردن BigQuery، دستورالعمل‌های روی صفحه را دنبال کنید.

    وقتی صادر کردن BigQuery را برای Performance Monitoring فعال می‌کنید، موارد زیر اتفاق می‌افتد:

    • Firebase نسخه‌ای از داده‌های موجود شما را به BigQuery صادر می‌کند. انتشار اولیه داده‌ها برای صادر کردن ممکن است تا ۴۸ ساعت طول بکشد.

    • پس‌از ایجاد مجموعه داده، مکان قابل‌تغییر نیست، اما می‌توانید مجموعه داده را در مکان دیگری کپی کنید یا مجموعه داده را به‌صورت دستی در مکان دیگری منتقل (بازآفرینی) کنید. برای کسب اطلاعات بیشتر، به تغییر مکان مجموعه داده مراجعه کنید.

    • Firebase همگام‌سازی‌های منظمی را برای داده‌هایتان از پروژه Firebase به 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_ به‌علاوه نام واقعی صفحه است
  • درخواست شبکه — ردپاهایی که طول عمر درخواست شبکه را پوشش می‌دهند (ردپاهای درخواست شبکه HTTP)

    • event_type NETWORK_REQUEST است
    • event_name الگوی دسته‌بندی‌شده نشانی وب درخواست شبکه است

هر رویداد عملکرد شامل ویژگی‌های رویداد (مانند کشور و شرکت مخابراتی دستگاه کارخواه) و همچنین اطلاعات خاص رویداد است:

  • ردیابی‌های مدت، سنجه‌های ردیابی، و ردیابی‌های صفحه حاوی trace_info است
  • سنجه‌های ردیابی حاوی trace_info.metric_info است
  • ردیابی‌های صفحه‌نمایش حاوی trace_info.screen_info است
  • ردیابی‌های شبکه حاوی network_info است

طرح‌واره داده‌های دقیق

نام فیلد تایپ کنید شرح
event_timestamp مُهر زمان مُهر زمان از Epoch وقتی رویداد در دستگاه کارخواه شروع شد (شروع ردیابی، شروع شبکه، و غیره)
app_display_version رشته نسخه نمایشی برنامه (برای مثال، «4.1.7»)
  • برای Android — VersionName
  • برای iOS — CFBundleShortVersionString
app_build_version رشته نسخه ساخت برنامه (برای مثال، «۱۵۲۳۴۵۶»)
  • برای Android — VersionCode
  • برای iOS — CFBundleVersion
os_version رشته نسخه سیستم‌عامل دستگاه کارخواه
  • برای Android — سطح میانای برنامه‌سازی کاربردی Android (برای مثال «۲۶»)
  • برای iOS — نسخه iOS (برای مثال «11.4»)
device_name رشته نام دستگاه کارخواه (برای مثال، «Google Pixel»)
کشور رشته کد کشور دوحرفی کشوری که رویداد در آن اتفاق افتاده است (برای مثال، «US» یا «ZZ» برای کشور ناشناخته)
شرکت مخابراتی رشته شرکت مخابراتی دستگاه کارخواه
radio_type رشته نوع رادیو فعال هنگام وقوع رویداد (برای مثال، «WIFI»)
custom_attributes ARRAY<RECORD> همه مشخصه‌های سفارشی پیوست‌شده به این رویداد
custom_attributes.key رشته کلید مشخصه سفارشی
custom_attributes.value رشته مقدار مشخصه سفارشی
event_type رشته نوع رویداد؛ مقادیر ممکن:
  • DURATION_TRACE — ردیابی‌هایی که به‌طور پیش‌فرض سنجه «مدت» را جمع‌آوری می‌کنند، که شامل شروع برنامه، برنامه در پیش‌زمینه، و برنامه در پس‌زمینه، و همچنین هرگونه ردیابی کد سفارشی ابزارسازی‌شده توسط توسعه‌دهنده می‌شود
  • SCREEN_TRACE — ردیابی‌هایی که طول عمر یک صفحه را پوشش می‌دهند (ردیابی‌های پردازش صفحه)
  • TRACE_METRIC — سنجه‌های سفارشی که با ردیابی‌های کد سفارشی ابزارسازی‌شده توسط توسعه‌دهنده مرتبط هستند
  • NETWORK_REQUEST — ردپاهایی که طول عمر درخواست شبکه را پوشش می‌دهند (ردپاهای درخواست شبکه HTTP)
event_name رشته نام رویداد
  • برای DURATION_TRACE — نام ردپا
  • برای TRACE_METRIC — نام سنجه سفارشی
  • برای SCREEN_TRACE — _st_ و به‌دنبال آن نام ردیابی
  • برای NETWORK_REQUEST — الگوی نشانی وب درخواست شبکه
parent_trace_name رشته نام ردگیری اصلی که سنجه ردگیری را حمل می‌کند
فقط برای 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 نسبت قاب‌های آهسته برای این ردگیری صفحه، بین ۰ و ۱ (برای مثال، مقدار ۰٫۰۵ یعنی پرداز ۵٪ از قاب‌های این نمونه صفحه بیشتر از ۱۶ میلی‌ثانیه طول کشیده است)
trace_info.screen_info.frozen_frame_ratio float64 نسبت قاب‌های ثابت برای این ردگیری صفحه، بین ۰ و ۱ (برای مثال، مقدار ۰٫۰۵ یعنی پرداز ۵٪ از قاب‌ها برای این نمونه صفحه بیشتر از ۷۰۰ میلی‌ثانیه طول کشیده است)
trace_info.metric_info RECORD فقط برای TRACE_METRIC ارائه می‌شود
trace_info.metric_info.metric_value int64 مقدار سنجه ردیابی
network_info RECORD فقط برای NETWORK_REQUEST ارائه می‌شود
network_info.response_code int64 کد پاسخ HTTP برای پاسخ شبکه (برای مثال، ۲۰۰، ۴۰۴)
network_info.response_mime_type رشته نوع MIME پاسخ شبکه (برای مثال، «text/html»)
network_info.request_http_method رشته روش HTTP درخواست شبکه (برای مثال، «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 را به‌عنوان منطقه زمانی تنظیم کنند، درغیراین‌صورت تابع تاریخ به‌طور پیش‌فرض از UTC استفاده خواهد کرد.

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;

بررسی نسبت قاب‌های ثابت در شرایط مختلف

برای مثال، می‌توانید نسبت فریم‌های ثابت را در کنار مدت زمانی که کاربران در هر صفحه از برنامه‌تان هنگام استفاده از انواع مختلف رادیو (Wi-Fi،‏ 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 و یک سنجه سفارشی (یک TRACE_METRIC) به نام cache-hit ابزارگذاری کرده‌اید که درصورت برخورد حافظه پنهان روی 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

  • اجرای فرمان CLI bq extract

  • ارسال کار استخراج ازطریق API یا کتابخانه‌های کارخواه.

قیمت‌گذاری

صادر کردن داده از Performance Monitoring هزینه‌ای ندارد و BigQuery محدودیت‌های استفاده بدون هزینه سخاوتمندانه‌ای ارائه می‌دهد. برای اطلاعات دقیق، به قیمت‌گذاری BigQuery یا جعبه شنی BigQuery مراجعه کنید.