Экспорт данных мониторинга эффективности в BigQuery

Вы можете экспортировать данные Performance Monitoring из приложений для Apple и Android в BigQuery для дальнейшего анализа. BigQuery позволяет анализировать данные с помощью BigQuery SQL, экспортировать их другому поставщику облачных сервисов и даже использовать для собственных моделей ML.

Включить экспорт в BigQuery

  1. В консоли Firebase перейдите на страницу Интеграции и на карточке BigQuery нажмите Связать.

  2. Следуйте инструкциям на экране, чтобы включить BigQuery.

    Если вы включите экспорт данных BigQuery для Performance Monitoring, произойдет следующее:

Чтобы отключить экспорт в 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 временная метка Временная метка с начала эпохи, когда событие началось на клиентском устройстве (начало трассировки, начало работы сети и т. д.).
app_display_version string Версия приложения, которая показывается пользователям (например, "4.1.7").
  • Для Android – VersionName.
  • Для iOS – CFBundleShortVersionString.
app_build_version string Версия сборки приложения, например "1523456".
  • Для Android – VersionCode.
  • Для iOS – CFBundleVersion.
os_version string Версия ОС клиентского устройства.
  • Для Android – уровень API Android (например, "26").
  • Для iOS – версия iOS (например, "11.4").
device_name string Название клиентского устройства, например Google Pixel.
country string Двухбуквенный код страны, в которой произошло событие (например, "US" или "ZZ" для неизвестной страны).
транспортная компания string Оператор связи клиентского устройства.
radio_type string Тип активного радиомодуля в момент события (например, Wi-Fi).
custom_attributes ARRAY<RECORD> Все настраиваемые атрибуты, связанные с этим событием.
custom_attributes.key string Ключ настраиваемого атрибута.
custom_attributes.value string Значение настраиваемого атрибута.
event_type string Тип события. Возможные значения:
  • DURATION_TRACE – трассировки, которые по умолчанию собирают показатель "продолжительность", включая запуск приложения, работу приложения в активном и фоновом режимах, а также любые трассировки специального кода, настроенные разработчиком.
  • SCREEN_TRACE – трассировки, охватывающие время существования экрана (трассировки отрисовки экрана).
  • TRACE_METRIC – специальные показатели, связанные с трассировками специального кода, добавленного разработчиком.
  • NETWORK_REQUEST – трассировки, охватывающие время существования сетевого запроса (трассировки сетевых HTTP-запросов).
event_name string Название события.
  • Для DURATION_TRACE – название трассировки.
  • Для TRACE_METRIC – название специального показателя.
  • Для SCREEN_TRACE – _st_, а затем название трассировки.
  • Для NETWORK_REQUEST – шаблон URL сетевого запроса
parent_trace_name string Название родительского трассировочного показателя, который содержит трассировочный показатель.
Присутствует только для 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 Доля медленных кадров для этой трассировки экрана, от 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 Код HTTP-ответа для ответа сети (например, 200, 404).
network_info.response_mime_type string MIME-тип ответа сети (например, "text/html").
network_info.request_http_method string 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 на стороне сервера или их передача в стороннее решение. В настоящее время плата за экспорт данных не взимается.

Вы можете экспортировать данные:

Цены

Экспорт данных из Performance Monitoring выполняется бесплатно, а в BigQuery действуют высокие лимиты на бесплатное использование. Подробную информацию можно найти в статьях Цены на BigQuery и Песочница BigQuery.