Вы можете экспортировать данные 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»)
|
os_версия | нить | Версия ОС клиентского устройства
|
имя_устройства | нить | Имя клиентского устройства (например, «Google Pixel») |
страна | нить | Двухбуквенный код страны, в которой произошло событие (например, «US» или «ZZ» для неизвестной страны) |
перевозчик | нить | Носитель клиентского устройства |
радио_тип | нить | Тип активного радио, когда произошло событие (например, «WIFI») |
пользовательские_атрибуты | МАССИВ<ЗАПИСЬ> | Все пользовательские атрибуты, прикрепленные к этому событию |
пользовательские_атрибуты.ключ | нить | Ключ пользовательского атрибута |
пользовательские_атрибуты.значение | нить | Значение пользовательского атрибута |
тип_события | нить | Тип события; возможные значения:
|
имя_события | нить | Название мероприятия
|
имя_родительского_трассы | нить | Имя родительской трассы, которая несет метрику трассы Присутствует только для TRACE_METRIC |
трассировка_информации | ЗАПИСЫВАТЬ | Присутствует только для DURATION_TRACE , SCREEN_TRACE и TRACE_METRIC |
trace_info.duration_us | int64 |
|
трассировка_информации.экранная_информация | ЗАПИСЫВАТЬ | Присутствует только для 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_METRIC |
trace_info.metric_info.metric_value | int64 | Значение метрики трассировки |
сетевая_информация | ЗАПИСЫВАТЬ | Присутствует только для NETWORK_REQUEST |
сетевая_информация.код_ответа | int64 | Код ответа HTTP для сетевого ответа (например, 200, 404) |
сетевая_информация.response_mime_type | нить | Тип MIME сетевого ответа (например, «text/html») |
метод_http_запроса_сетевой_информации | нить | HTTP-метод сетевого запроса (например, «GET» или «POST») |
network_info.request_payload_bytes | int64 | Размер полезной нагрузки сетевого запроса Единица: байт |
сетевая_информация.ответ_полезная_загрузка_байтов | int64 | Размер полезной нагрузки сетевого ответа Единица: байт |
network_info.request_completed_time_us | int64 | Микросекунды после event_timestamp , когда отправка сетевого запроса завершенаЕдиница: микросекунда |
время_инициирования_ответа_в_сети_us | int64 | Микросекунды после event_timestamp , когда инициируется сетевой ответЕдиница: микросекунда |
сетевая_информация.время_завершения_ответа_на_мыс | 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 .