Экспорт данных мониторинга производительности в 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 .