Вы можете экспортировать данные 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.