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

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

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

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

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

    При включении экспорта BigQuery для Performance Monitoring происходит следующее:

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

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

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

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

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

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

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

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

    • event_typeDURATION_TRACE
    • event_name совпадает с именем трассировки
  • Метрика трассировки — пользовательские метрики, связанные с пользовательскими трассировками кода, инструментированными разработчиком.

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

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

Вы можете экспортировать свои данные следующими способами:

Ценообразование

Экспорт данных из Performance Monitoring бесплатен, а BigQuery предоставляет щедрые бесплатные лимиты использования. Для получения подробной информации см. цены BigQuery или песочницу BigQuery .