Вы можете экспортировать данные Performance Monitoring из приложений Apple и Android в BigQuery для дальнейшего анализа. BigQuery позволяет анализировать данные с помощью BigQuery SQL, экспортировать их в другой облачный сервис и даже использовать их для собственных моделей машинного обучения.
Включить экспорт BigQuery
Перейдите на страницу «Интеграции» в консоли Firebase , затем нажмите «Ссылка» на карточке BigQuery .
Следуйте инструкциям на экране, чтобы включить BigQuery .
При включении экспорта BigQuery для Performance Monitoring происходит следующее:
Firebase экспортирует копию ваших данных в BigQuery . Первоначальное распространение данных для экспорта может занять до 48 часов.
- Вы можете вручную запланировать заполнение данных за последние 30 дней или на самую последнюю дату, когда вы включили экспорт BigQuery (в зависимости от того, что наступило позже).
После создания набора данных его местоположение изменить нельзя, но вы можете скопировать его в другое место или вручную переместить (создать заново). Подробнее см. в разделе Изменение местоположения набора данных .
Firebase настраивает регулярную синхронизацию данных из вашего проекта Firebase с BigQuery . Эти ежедневные операции экспорта обычно завершаются в течение 24 часов после запланированного времени.
По умолчанию все приложения в вашем проекте связаны с 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»)
|
версия_сборки_приложения | нить | Версия сборки приложения (например, «1523456»)
|
версия_ос | нить | Версия ОС клиентского устройства
|
имя_устройства | нить | Название клиентского устройства (например, «Google Pixel») |
страна | нить | Двухбуквенный код страны, в которой произошло событие (например, «US» или «ZZ» для неизвестной страны) |
перевозчик | нить | Носитель клиентского устройства |
тип_радио | нить | Тип активного радио на момент события (например, «WIFI»). |
пользовательские_атрибуты | МАССИВ<ЗАПИСЬ> | Все пользовательские атрибуты, прикрепленные к этому событию |
пользовательские_атрибуты.ключ | нить | Ключ пользовательского атрибута |
пользовательские_атрибуты.значение | нить | Значение настраиваемого атрибута |
тип_события | нить | Тип события; возможные значения:
|
имя_события | нить | Название мероприятия
|
parent_trace_name | нить | Имя родительского следа, который несет метрику следа Присутствует только для TRACE_METRIC |
trace_info | ЗАПИСЫВАТЬ | Присутствует только для DURATION_TRACE , SCREEN_TRACE и TRACE_METRIC |
trace_info.duration_us | int64 |
|
trace_info.screen_info | ЗАПИСЫВАТЬ | Присутствует только для 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 | ЗАПИСЫВАТЬ | Присутствует только для TRACE_METRIC |
trace_info.metric_info.metric_value | int64 | Значение метрики трассировки |
сетевая_информация | ЗАПИСЫВАТЬ | Присутствует только для NETWORK_REQUEST |
network_info.response_code | int64 | Код ответа HTTP для сетевого ответа (например, 200, 404) |
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 .