Join us in person and online for Firebase Summit on October 18, 2022. Learn how Firebase can help you accelerate app development, release your app with confidence, and scale with ease. Register now

Экспорт данных мониторинга производительности в BigQuery

Оптимизируйте свои подборки Сохраняйте и классифицируйте контент в соответствии со своими настройками.

Вы можете экспортировать данные мониторинга производительности из приложений Apple и Android в BigQuery для дальнейшего анализа. BigQuery позволяет анализировать данные с помощью BigQuery SQL, экспортировать их в другой облачный провайдер и даже использовать данные для своих пользовательских моделей машинного обучения.

Включить экспорт BigQuery

  1. Перейдите на страницу « Интеграции » в консоли Firebase, затем нажмите « Ссылка » на карточке BigQuery .

  2. Следуйте инструкциям на экране, чтобы включить BigQuery.

    Когда вы включаете экспорт BigQuery для мониторинга производительности, происходит следующее:

    • Firebase экспортирует копию ваших существующих данных в BigQuery. Первоначальное распространение данных для экспорта может занять до 48 часов.

    • После создания набора данных местоположение нельзя изменить, но вы можете скопировать набор данных в другое место или вручную переместить (воссоздать) набор данных в другое место. Дополнительные сведения см. в разделе Изменение местоположения набора данных .

    • Firebase настраивает регулярную синхронизацию ваших данных из вашего проекта Firebase с BigQuery. Эти ежедневные экспортные операции обычно заканчиваются через 24 часа после запланированного.

    • По умолчанию все приложения в вашем проекте связаны с BigQuery. Любые приложения, которые вы позже добавите в проект, автоматически привязываются к BigQuery. Вы можете управлять тем, какие приложения отправляют данные .

Чтобы отключить экспорт BigQuery, отсоедините проект в консоли Firebase.

Какие данные экспортируются в BigQuery?

Для каждого приложения в проекте при экспорте создается таблица, включающая все захваченные события производительности. Каждая строка в таблице представляет собой одно событие производительности, которое может быть одним из следующих:

  • Трассировка продолжительности — трассировки, которые по умолчанию собирают метрику «длительность», включая запуск приложения, приложение на переднем плане и приложение в фоновом режиме, а также любые пользовательские трассировки кода, созданные разработчиком.

    • event_type : DURATION_TRACE
    • event_name совпадает с именем трассировки
  • Метрика трассировки — пользовательские метрики, связанные с трассировкой пользовательского кода с помощью инструментов разработчика.

    • event_typeTRACE_METRIC
    • event_name — имя метрики
    • parent_trace_name — это имя трассировки, которая содержит эту метрику.
  • Трассировка экрана — трассировки, охватывающие время существования экрана (трассировки рендеринга экрана).

    • event_type : SCREEN_TRACE
    • event_name — это префикс _st_ плюс фактическое имя экрана
  • Сетевой запрос — трассировки за все время существования сетевого запроса (трассировки сетевых запросов HTTP).

    • event_typeNETWORK_REQUEST
    • event_name — это категоризированный шаблон URL-адреса сетевого запроса.

Каждое событие производительности содержит атрибуты события (например, страну и оператора связи клиентского устройства), а также информацию, относящуюся к событию:

  • Трассировки продолжительности, метрики трассировки и трассировки экрана содержат trace_info
  • Метрики трассировки содержат trace_info.metric_info
  • Трассировки экрана содержат trace_info.screen_info
  • Сетевые трассировки содержат network_info

Подробная схема данных

Имя поля Тип Описание
event_timestamp отметка времени Отметка времени с начала эпохи, когда событие началось на клиентском устройстве (запуск трассировки, запуск сети и т. д.)
app_display_version нить Показать версию приложения (например, "4.1.7")
  • Для Android — VersionName
  • Для iOS — CFBundleShortVersionString
app_build_version нить Версия сборки приложения (например, "1523456")
  • Для Android — VersionCode
  • Для iOS — CFBundleVersion
ОС_версия нить Версия ОС клиентского устройства
  • Для Android — уровень Android API (например, «26»)
  • Для iOS — версия iOS (например, «11.4»)
имя устройства нить Имя клиентского устройства (например, "Google Pixel")
страна нить Двухбуквенный код страны, в которой произошло событие (например, «US» или «ZZ» для неизвестной страны)
перевозчик нить Оператор клиентского устройства
радио_тип нить Тип активного радио, когда произошло событие (например, "WIFI")
custom_attributes МАССИВ<ЗАПИСЬ> Все настраиваемые атрибуты, связанные с этим событием
custom_attributes.key нить Ключ пользовательского атрибута
custom_attributes.value нить Значение пользовательского атрибута
тип события нить Тип события; возможные значения:
  • DURATION_TRACE — трассировки, которые по умолчанию собирают метрику «длительность», включая запуск приложения, приложение на переднем плане и приложение в фоновом режиме, а также любые пользовательские трассировки кода, созданные разработчиком.
  • SCREEN_TRACE — трассировки за все время жизни экрана (трассировки рендеринга экрана)
  • TRACE_METRIC — пользовательские метрики, связанные с пользовательскими трассировками кода, разработанными разработчиком.
  • NETWORK_REQUEST — трассировки за все время существования сетевого запроса (трассировки сетевых запросов HTTP).
название события нить Название события
  • Для DURATION_TRACE — название трассы
  • Для TRACE_METRIC — название пользовательской метрики
  • Для SCREEN_TRACE_st_ , за которым следует имя трассировки.
  • Для NETWORK_REQUEST — шаблон URL сетевого запроса.
parent_trace_name нить Имя родительской трассы, содержащей метрику трассировки
Присутствует только для TRACE_METRIC
trace_info ЗАПИСЫВАТЬ Присутствует только для DURATION_TRACE , SCREEN_TRACE и TRACE_METRIC
trace_info.duration_us int64
  • Для DURATION_TRACE и SCREEN_TRACE — продолжительность времени («длительность») от начала до конца трассировки.
  • Для TRACE_METRIC — время («длительность») от начала до конца родительской трассы.
Единица: микросекунда
trace_info.screen_info ЗАПИСЫВАТЬ Присутствует только для SCREEN_TRACE
trace_info.screen_info.slow_frame_ratio поплавок64 Соотношение медленных кадров для этой трассировки экрана, от 0 до 1 (например, значение 0,05 означает, что 5% кадров для этого экземпляра экрана потребовалось более 16 мс для рендеринга)
trace_info.screen_info.frozen_frame_ratio поплавок64 Соотношение замороженных кадров для этой трассировки экрана, от 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 для экспортированных данных мониторинга производительности.

Посмотреть среднюю задержку запуска приложения в разбивке по странам

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 плата не взимается, а BigQuery предлагает щедрые лимиты на бесплатное использование. Подробную информацию см. в разделе цен на BigQuery или в песочнице BigQuery .