Вы можете экспортировать данные 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 | метка времени | Отметка времени с начала эпохи, когда событие началось на клиентском устройстве (начало трассировки, начало сети и т. д.). |
| app_display_version | нить | Отображаемая версия приложения (например, "4.1.7")
|
| app_build_version | нить | Версия сборки приложения (например, "1523456")
|
| os_version | нить | версия ОС клиентского устройства
|
| имя_устройства | нить | Название клиентского устройства (например, «Google Pixel») |
| страна | нить | Двухбуквенный код страны, в которой произошло событие (например, «US» или «ZZ» для неизвестной страны). |
| перевозчик | нить | Носитель клиентского устройства |
| радиотип | нить | Тип активного радиоканала в момент события (например, "Wi-Fi") |
| пользовательские атрибуты | МАССИВ<ЗАПИСЬ> | Все пользовательские атрибуты, прикрепленные к этому событию. |
| custom_attributes.key | нить | Ключ пользовательского атрибута |
| custom_attributes.value | нить | Значение пользовательского атрибута |
| event_type | нить | Тип события; возможные значения:
|
| event_name | нить | Название мероприятия
|
| parent_trace_name | нить | Название родительского объекта трассировки, содержащего метрику трассировки. Присутствует только для TRACE_METRIC |
| трассировка_информация | ЗАПИСЫВАТЬ | Присутствует только для 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_info | ЗАПИСЫВАТЬ | Присутствует только для 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 .