داده های نظارت بر عملکرد را به BigQuery صادر کنید

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

فعال کردن خروجی BigQuery

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

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

    وقتی BigQuery export for Performance Monitoring را فعال می‌کنید، موارد زیر رخ می‌دهد:

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

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

    • فایربیس همگام‌سازی‌های منظمی از داده‌های شما از پروژه فایربیس به 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 الگوی دسته‌بندی‌شده‌ی URL درخواست شبکه است.

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

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

طرحواره داده تفصیلی

نام فیلد نوع توضیحات
event_timestamp مهر زمانی مهر زمانی از زمان شروع رویداد در دستگاه کلاینت (شروع ردیابی، شروع شبکه و غیره)
نسخه_نمایش_برنامه رشته نمایش نسخه برنامه (برای مثال، "4.1.7")
  • برای اندروید — VersionName
  • برای iOS - CFBundleShortVersionString
نسخه_ساخت_برنامه رشته نسخه ساخت برنامه (برای مثال، "1523456")
  • برای اندروید — VersionCode
  • برای iOS — CFBundleVersion
نسخه سیستم عامل رشته نسخه سیستم عامل دستگاه کلاینت
  • برای اندروید — سطح API اندروید (برای مثال "26")
  • برای iOS — نسخه iOS (برای مثال "11.4")
نام دستگاه رشته نام دستگاه کلاینت (برای مثال، "Google Pixel")
کشور رشته کد دو حرفی کشوری که رویداد در آن رخ داده است (برای مثال، "US" یا "ZZ" برای کشور نامشخص)
حامل رشته حامل دستگاه کلاینت
رادیو_تایپ رشته نوع رادیوی فعال هنگام وقوع رویداد (برای مثال، "WIFI")
ویژگی‌های_سفارشی آرایه <رکورد> تمام ویژگی‌های سفارشی متصل به این رویداد
کلید_ویژگی‌های_سفارشی رشته کلید ویژگی سفارشی
مقدار custom_attributes رشته مقدار ویژگی سفارشی
نوع_رویداد رشته نوع رویداد؛ مقادیر ممکن:
  • DURATION_TRACE — ردپاهایی که به‌طور پیش‌فرض معیار «مدت زمان» را جمع‌آوری می‌کنند، که شامل شروع برنامه، برنامه در پیش‌زمینه و برنامه در پس‌زمینه و همچنین هرگونه ردپا از کد سفارشی ابزارگذاری‌شده توسط توسعه‌دهنده می‌شود.
  • SCREEN_TRACE — ردپاهایی که در طول عمر یک صفحه نمایش داده می‌شوند (ردپاهای رندر صفحه نمایش)
  • TRACE_METRIC - معیارهای سفارشی که با ردیابی کدهای سفارشیِ ابزاربندی‌شده توسط توسعه‌دهنده مرتبط هستند
  • NETWORK_REQUEST — ردپاهایی که طول عمر یک درخواست شبکه را در بر می‌گیرد (ردپاهای درخواست شبکه HTTP)
نام_رویداد رشته نام رویداد
  • برای DURATION_TRACE — نام ردیابی
  • برای TRACE_METRIC — نام متریک سفارشی
  • برای SCREEN_TRACE_st_ و به دنبال آن نام اثر
  • برای NETWORK_REQUEST — الگوی URL درخواست شبکه
نام_ردیابی_والد رشته نام مسیر والد که معیار مسیر را حمل می‌کند
فقط برای TRACE_METRIC ارائه می‌شود
ردیابی_اطلاعات رکورد فقط برای 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 شناور64 نسبت فریم‌های کند برای این ردیابی صفحه، بین ۰ و ۱ (برای مثال، مقدار ۰.۰۵ به این معنی است که ۵٪ از فریم‌ها برای این نمونه صفحه نمایش بیش از ۱۶ میلی‌ثانیه برای رندر شدن زمان برده‌اند)
trace_info.screen_info.frozen_frame_ratio شناور64 نسبت فریم‌های ثابت برای این ردیابی صفحه، بین ۰ و ۱ (برای مثال، مقدار ۰.۰۵ به این معنی است که ۵٪ از فریم‌ها برای این نمونه صفحه نمایش بیش از ۷۰۰ میلی‌ثانیه برای رندر شدن زمان برده‌اند)
trace_info.metric_info رکورد فقط برای TRACE_METRIC ارائه می‌شود
trace_info.metric_info.metric_value int64 مقدار معیار ردیابی
اطلاعات شبکه رکورد فقط برای NETWORK_REQUEST ارائه می‌شود
کد پاسخ_اطلاعات_شبکه int64 کد پاسخ HTTP برای پاسخ شبکه (برای مثال، 200، 404)
نوع_پاسخ_mime_پاسخ_اطلاعات_شبکه رشته نوع MIME پاسخ شبکه (برای مثال، "text/html")
متد_http_درخواست_اطلاعات_شبکه رشته روش 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 خروجی خود اجرا کنید.

داده‌های مشاهده شده در کنسول را مطابقت دهید

داشبورد فایربیس داده‌های روزانه را در منطقه زمانی 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;

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

برای مثال، می‌توانید نسبت فریم‌های ثابت را در کنار میزان زمانی که کاربران در هر صفحه از برنامه شما هنگام استفاده از انواع مختلف امواج رادیویی (وای‌فای، 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 برای آن تنظیم شده است.

برای مثال، می‌توانید نرخ موفقیت حافظه پنهان (cache hit rate) را برای بارگذاری فایل‌های 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 در محیط CLI

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

قیمت‌گذاری

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