Вы можете экспортировать данные Performance Monitoring из приложений для Apple и Android в BigQuery для дальнейшего анализа. BigQuery позволяет анализировать данные с помощью BigQuery SQL, экспортировать их другому поставщику облачных сервисов и даже использовать для собственных моделей ML.
Включить экспорт в BigQuery
В консоли Firebase перейдите на страницу Интеграции и на карточке BigQuery нажмите Связать.
Следуйте инструкциям на экране, чтобы включить BigQuery.
Если вы включите экспорт данных из BigQuery в Performance Monitoring, произойдет следующее:
Firebase экспортирует копию существующих данных в BigQuery. Первоначальная передача данных для экспорта может занять до 48 часов.
- Вы можете вручную запланировать заполнение данными за последние 30 дней или за период с даты включения экспорта BigQuery (в зависимости от того, что было позже).
После создания набора данных местоположение изменить нельзя, но можно скопировать набор данных в другое место или вручную переместить (воссоздать) набор данных в другое местоположение. Подробнее о том, как изменить местоположение набора данных…
Firebase настраивает регулярную синхронизацию данных из проекта Firebase с BigQuery. Обычно ежедневный экспорт завершается в течение 24 часов после запланированного времени.
По умолчанию все приложения в проекте связаны с BigQuery. Все приложения, которые вы добавите в проект позже, будут автоматически связаны с BigQuery. Но вы можете указать, из каких приложений следует экспортировать данные.
Чтобы отключить экспорт в BigQuery, отмените связь с проектом в консоли Firebase.
Какие данные экспортируются в BigQuery?
Для каждого приложения в проекте создается таблица, в которую включаются все зарегистрированные события производительности. Каждая строка в таблице – это отдельное событие, которое может быть одним из следующих:
Трассировка продолжительности. Трассировки, которые по умолчанию собирают показатель продолжительности. К ним относятся запуск приложения, работа приложения в активном и фоновом режимах, а также любые трассировки специального кода, настроенные разработчиком.
event_type:DURATION_TRACEevent_nameсовпадает с названием трассировки.
Показатель трассировки – специальный показатель, связанный с трассировкой специального кода, добавленного разработчиком.
event_type:TRACE_METRICevent_name– название показателя;parent_trace_name– название трассировки, содержащей этот показатель.
Трассировка экрана – трассировки, охватывающие время существования экрана (трассировки отрисовки экрана).
event_type:SCREEN_TRACEevent_name– это префикс_st_и название экрана.
Сетевой запрос. Трассировки, охватывающие время существования сетевого запроса (трассировки сетевых запросов HTTP).
event_type:NETWORK_REQUESTevent_name– шаблон URL сетевого запроса, отнесенный к определенной категории.
Каждое событие производительности содержит атрибуты (например, страну и оператора связи клиентского устройства), а также информацию, относящуюся к событию:
- Трассировки длительности, показатели трассировки и трассировки экрана содержат
trace_info - Показатели трассировки содержат
trace_info.metric_info - Трассировки экрана содержат
trace_info.screen_info - Что содержится в трассировках сети
network_info
Подробная схема данных
| Название поля | Тип | Описание |
|---|---|---|
| event_timestamp | временная метка | Временная метка с начала эпохи, когда событие началось на клиентском устройстве (начало трассировки, начало работы сети и т. д.). |
| app_display_version | string | Версия приложения, которая показывается пользователям (например, "4.1.7").
|
| app_build_version | string | Версия сборки приложения (например, "1523456").
|
| os_version | string | Версия ОС клиентского устройства.
|
| 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 | Тип события. Возможные значения:
|
| 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 | Код 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 на стороне сервера или их передача в стороннее решение. В настоящее время плата за экспорт данных не взимается.
Вы можете экспортировать данные:
Как использовать веб-интерфейс BigQuery
Выполнение команды CLI
bq extractОтправка задания извлечения через API или клиентские библиотеки.
Цены
Экспорт данных из Performance Monitoring выполняется бесплатно, а в BigQuery действуют высокие лимиты на бесплатное использование. Подробную информацию можно найти в статьях Цены на BigQuery и Песочница BigQuery.