Экспорт данных Firebase Crashlytics в BigQuery

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

Что можно сделать с экспортированными данными?

Экспорт в BigQuery содержит необработанные данные о сбоях, включая тип устройства, операционную систему, исключения (приложения Android) или ошибки (приложения Apple), а также журналы Crashlytics и другие данные. Точный перечень экспортируемых данных Crashlytics и схема таблиц будут рассмотрены далее на этой странице.

Вот несколько примеров того, что вы можете сделать с экспортированными данными Crashlytics :

  • Выполнять запросы
    Вы можете выполнять запросы к данным Crashlytics для создания отчетов, которые агрегируют данные о сбоях в более понятные сводки. Поскольку такие отчеты недоступны на панели Crashlytics в консоли Firebase , они могут дополнить ваш анализ и понимание данных о сбоях. Далее на этой странице вы найдете подборку примеров запросов .

  • Используйте шаблон Looker Studio
    Crashlytics предоставляет готовый шаблон Looker Studio для визуализации экспортированных данных.

  • Создать представления
    С помощью пользовательского интерфейса BigQuery можно создать представление , которое представляет собой виртуальную таблицу, определяемую SQL-запросом. Подробные инструкции о различных типах представлений и способах их создания см. в документации BigQuery .

  • Объедините данные, специфичные Crashlytics , с данными о сессиях Firebase.
    Вы также можете экспортировать данные о сессиях Firebase при настройке экспорта данных Crashlytics . Используйте эти данные о сессиях для улучшения понимания того, какие пользователи и какие сессии работают без сбоев.

Преимущества экспорта потоковых данных в BigQuery

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

При включении потокового экспорта в BigQuery у вас также появятся таблицы реального времени (в дополнение к пакетным таблицам). Оба типа таблиц будут иметь одинаковую схему набора данных , но вот некоторые важные различия между пакетными таблицами и таблицами реального времени:

Таблица партий Таблица в реальном времени
  • Данные экспортируются один раз в день.
  • События сохраняются с сохранением на длительный срок перед пакетной записью в BigQuery .
  • Данные можно заполнить задним числом за период до 30 дней*.
  • Данные экспортируются в режиме реального времени.
  • Обратная засыпка не предусмотрена.

Пакетная таблица идеально подходит для долгосрочного анализа и выявления тенденций во времени, поскольку мы надежно храним события до их записи, и данные могут быть добавлены в таблицу за период до 30 дней*. Когда мы записываем данные в вашу таблицу реального времени, мы немедленно записываем их в BigQuery , поэтому она идеально подходит для интерактивных панелей мониторинга и пользовательских оповещений. Эти две таблицы можно объединить с помощью запроса на объединение данных, чтобы получить преимущества обеих.

По умолчанию для таблиц реального времени установлен срок истечения действия разделов в 30 дней. Чтобы узнать, как изменить это значение, см. раздел «Установка срока истечения действия разделов» в документации BigQuery .

* Подробности о поддержке заполнения резервных копий см. в разделе «Обновление до новой экспортной инфраструктуры» .



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

  1. В консоли Firebase перейдите на страницу «Интеграции» .

  2. В карточке BigQuery нажмите «Ссылка» .

  3. Чтобы включить экспорт в BigQuery , следуйте инструкциям на экране, включая следующие параметры:

Что произойдет, если включить экспорт?

  • Firebase экспортирует данные из приложений, связанных с BigQuery .

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

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

    • В любой момент вы можете управлять тем, какие приложения экспортируют данные .

  • Firebase экспортирует данные в выбранное вами местоположение набора данных во время настройки.

    • Это расположение применяется как к набору данных Crashlytics , так и к набору данных сеансов Firebase (если данные сеансов разрешены для экспорта).

    • Это расположение применимо только к данным, экспортированным в BigQuery , и не влияет на расположение данных, хранящихся для использования на панели управления Crashlytics консоли Firebase или в Android Studio.

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

  • Firebase настраивает ежедневную синхронизацию ваших пакетных данных с BigQuery .

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

    • Ежедневная синхронизация происходит один раз в день, независимо от запланированных экспортов, которые вы могли настроить в BigQuery . Обратите внимание, что время и продолжительность синхронизации могут меняться, поэтому мы не рекомендуем планировать последующие операции или задания, основываясь на конкретном времени экспорта.

  • Firebase экспортирует копию ваших существующих данных в BigQuery .

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

    • Вы можете вручную запланировать заполнение данных в пакетной таблице за последние 30 дней или за самую последнюю дату, когда вы включили экспорт в BigQuery (в зависимости от того, какая дата является самой последней).

    Обратите внимание, что если вы включили экспорт данных Crashlytics до середины октября 2024 года, вы также можете заполнить данные за 30 дней до дня включения экспорта.

  • Следующие действия выполняются, если вы включите потоковый экспорт в BigQuery .

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

    • После включения потоковой передачи данных может потребоваться до 1 часа, прежде чем начнется потоковая передача данных.



Примеры запросов

Пример 1: Расчет показателей безотказной работы с использованием данных сессий Firebase.

В последней версии вы провели масштабное обновление приложения, чтобы устранить сбои в критически важном для пользователя процессе. Вы получили отличные отзывы от пользователей, но хотели бы получить количественные доказательства того, что ваше приложение стало более стабильным, чем раньше.

Показатели без сбоев могут помочь получить эту информацию. Эти показатели являются важными измерениями, которые помогают понять общее состояние вашего приложения. Используя данные сессий Firebase и события Crashlytics , вы можете рассчитать эти показатели с помощью простого запроса.

Вот примеры запросов для Android-приложения. Для iOS-приложения используйте идентификатор пакета и IOS (вместо имени пакета и ANDROID ).

Пользователи, у которых не возникало сбоев при использовании определенной версии:

SELECT
  TIMESTAMP_TRUNC(crashlytics.event_timestamp,DAY) AS event_date,
  (1 - (COUNT (DISTINCT installation_uuid) / COUNT (DISTINCT instance_id))) AS CFU
FROM
  `PROJECT_ID.firebase_sessions.PACKAGE_NAME_ANDROID` AS sessions
LEFT JOIN
  `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID` AS crashlytics
ON
  TIMESTAMP_TRUNC(sessions.event_timestamp,DAY) = TIMESTAMP_TRUNC(crashlytics.event_timestamp,DAY)
WHERE
  crashlytics.error_type="FATAL"
  AND crashlytics.application.display_version="APP_VERSION"
  AND sessions.application.display_version = "APP_VERSION"
GROUP BY
  event_date
ORDER BY
  event_date

Количество сессий без сбоев за последнюю неделю (за последние 168 часов):

SELECT
  TIMESTAMP_TRUNC(crashlytics.event_timestamp,DAY) AS event_date,
  (1 - (COUNT (DISTINCT crashlytics.firebase_session_id) / COUNT (DISTINCT sessions.session_id))) AS CFS
FROM
  `PROJECT_ID.firebase_sessions.PACKAGE_NAME_ANDROID` AS sessions
LEFT JOIN
  `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID` AS crashlytics
ON
  TIMESTAMP_TRUNC(sessions.event_timestamp,DAY) = TIMESTAMP_TRUNC(crashlytics.event_timestamp,DAY)
WHERE
  crashlytics.error_type="FATAL" AND _PARTITIONTIME >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 168 HOUR)
  AND _PARTITIONTIME < CURRENT_TIMESTAMP()
GROUP BY
  event_date
ORDER BY
  event_date

Пример 2: Аварии по дням

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

Вот пример запроса для приложения Android. Для приложения iOS используйте идентификатор пакета и IOS (вместо имени пакета и ANDROID ).

SELECT
  COUNT(DISTINCT event_id) AS number_of_crashes,
  FORMAT_TIMESTAMP("%F", event_timestamp) AS date_of_crashes
FROM
 `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID`
GROUP BY
  date_of_crashes
ORDER BY
  date_of_crashes DESC
LIMIT 30;

Пример 3: Найдите наиболее распространенные аварии.

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

Вот пример запроса для приложения Android. Для приложения iOS используйте идентификатор пакета и IOS (вместо имени пакета и ANDROID ).

SELECT
  DISTINCT issue_id,
  COUNT(DISTINCT event_id) AS number_of_crashes,
  COUNT(DISTINCT installation_uuid) AS number_of_impacted_user,
  blame_frame.file,
  blame_frame.line
FROM
  `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID`
WHERE
  event_timestamp >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(),INTERVAL 168 HOUR)
  AND event_timestamp < CURRENT_TIMESTAMP()
GROUP BY
  issue_id,
  blame_frame.file,
  blame_frame.line
ORDER BY
  number_of_crashes DESC
LIMIT 10;

Пример 4: 10 устройств, чаще всего вызывающих сбои в работе.

Осень — это сезон новых телефонов! Ваша компания знает, что это также означает сезон новых проблем, специфичных для конкретных устройств, особенно для Android. Чтобы предотвратить надвигающиеся проблемы совместимости, вы составляете запрос, который определяет 10 устройств, которые чаще всего зависали за последнюю неделю (168 часов).

Вот пример запроса для приложения Android. Для приложения iOS используйте идентификатор пакета и IOS (вместо имени пакета и ANDROID ).

SELECT
  device.model,
COUNT(DISTINCT event_id) AS number_of_crashes
FROM
  `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID`
WHERE
  event_timestamp >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 168 HOUR)
  AND event_timestamp < CURRENT_TIMESTAMP()
GROUP BY
  device.model
ORDER BY
  number_of_crashes DESC
LIMIT 10;

Пример 5: Фильтрация по пользовательскому ключу

Вы — разработчик игр, и вам нужно узнать, на каком уровне вашей игры чаще всего происходят сбои.

Для отслеживания этой статистики вы устанавливаете пользовательский ключ Crashlytics ( iOS+ | Android | Flutter | Unity ) под названием current_level и обновляете его каждый раз, когда пользователь достигает нового уровня.

Быстрый

Crashlytics.sharedInstance().setIntValue(3, forKey: "current_level");

Objective-C

CrashlyticsKit setIntValue:3 forKey:@"current_level";

Java

Crashlytics.setInt("current_level", 3);

Используя этот ключ при экспорте в BigQuery , вы можете написать запрос для получения информации о распределении значений current_level , связанных с каждым событием сбоя.

Вот пример запроса для приложения Android. Для приложения iOS используйте идентификатор пакета и IOS (вместо имени пакета и ANDROID ).

SELECT
COUNT(DISTINCT event_id) AS num_of_crashes,
  value
FROM
  `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID`
UNNEST(custom_keys)
WHERE
  key = "current_level"
GROUP BY
  key,
  value
ORDER BY
  num_of_crashes DESC

Пример 6: Извлечение идентификатора пользователя

У вас есть Android-приложение в стадии раннего доступа. Большинству пользователей оно нравится, но трое столкнулись с необычно большим количеством сбоев. Чтобы разобраться в проблеме, вы пишете запрос, который извлекает все события сбоев для этих пользователей, используя их идентификаторы.

Вот пример запроса для приложения Android. Для приложения iOS используйте идентификатор пакета и IOS (вместо имени пакета и ANDROID ).

SELECT *
FROM
  `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID`
WHERE
  user.id IN ("USER_ID_1", "USER_ID_2", "USER_ID_3")
ORDER BY
  user.id
 

Пример 7: Найдите всех пользователей, столкнувшихся с определенной проблемой, приводящей к сбою.

Ваша команда случайно выпустила критическую ошибку для группы бета-тестеров. Используя запрос из примера «Поиск наиболее распространенных сбоев» выше, ваша команда смогла определить конкретный идентификатор проблемы, вызвавшей сбой. Теперь ваша команда хочет выполнить запрос для получения списка пользователей приложения, пострадавших от этого сбоя.

Вот пример запроса для приложения Android. Для приложения iOS используйте идентификатор пакета и IOS (вместо имени пакета и ANDROID ).

SELECT user.id as user_id
FROM
  `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID`
WHERE
  issue_id = "ISSUE_ID"
  AND application.display_version = "APP_VERSION"
  AND user.id != ""
ORDER BY
  user.id;

Пример 8: Количество пользователей, пострадавших от сбоя, в разбивке по странам.

Ваша команда обнаружила критическую ошибку во время развертывания новой версии. Вы смогли использовать запрос из примера «Поиск наиболее распространенных сбоев» выше, чтобы определить конкретный идентификатор проблемы, вызвавшей сбой. Теперь ваша команда хотела бы узнать, распространился ли этот сбой на пользователей в разных странах мира.

Для написания этого запроса вашей команде потребуется выполнить следующие действия:

  1. Включите экспорт данных Google Analytics в BigQuery . См. раздел «Экспорт данных проекта в BigQuery» .

  2. Обновите свое приложение, чтобы оно передавало идентификатор пользователя как в SDK Google Analytics , так и в SDK Crashlytics .

    Быстрый

    Crashlytics.sharedInstance().setUserIdentifier("123456789");
    Analytics.setUserID("123456789");
    

    Objective-C

    CrashlyticsKit setUserIdentifier:@"123456789";
    FIRAnalytics setUserID:@"12345678 9";
    

    Java

    Crashlytics.setUserIdentifier("123456789");
    mFirebaseAnalytics.setUserId("123456789");
    
  3. Напишите запрос, который использует поле идентификатора пользователя для объединения событий в наборе данных Google Analytics с авариями в наборе данных Crashlytics .

    Вот пример запроса для приложения Android. Для приложения iOS используйте идентификатор пакета и IOS (вместо имени пакета и ANDROID ).

    SELECT DISTINCT c.issue_id, a.geo.country, COUNT(DISTINCT c.user.id) as num_users_impacted
    FROM `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID` c
    INNER JOIN  `PROJECT_ID.analytics_TABLE_NAME.events_*` a on c.user.id = a.user_id
    WHERE
      c.issue_id = "ISSUE_ID"
      AND a._TABLE_SUFFIX BETWEEN '20190101'
      AND '20200101'
    GROUP BY
      c.issue_id,
      a.geo.country,
      c.user.id

Пример 9: 5 главных проблем сегодняшнего дня

Вот пример запроса для приложения Android. Для приложения iOS используйте идентификатор пакета и IOS (вместо имени пакета и ANDROID ).

SELECT
  issue_id,
  COUNT(DISTINCT event_id) AS events
FROM
  `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID_REALTIME`
WHERE
  DATE(event_timestamp) = CURRENT_DATE()
GROUP BY
  issue_id
ORDER BY
  events DESC
LIMIT
  5;

Пример 10: 5 главных проблем с ДАТЫ, включая сегодняшний день.

Также можно объединить таблицы пакетной обработки и обработки в реальном времени с помощью запроса на объединение данных, чтобы добавить информацию в реальном времени к надежным пакетным данным. Поскольку event_id является первичным ключом, можно использовать DISTINCT event_id для удаления дубликатов общих событий из двух таблиц.

Вот пример запроса для приложения Android. Для приложения iOS используйте идентификатор пакета и IOS (вместо имени пакета и ANDROID ).

SELECT
  issue_id,
  COUNT(DISTINCT event_id) AS events
FROM (
  SELECT
    issue_id,
    event_id,
    event_timestamp
  FROM
    `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID_REALTIME`
  UNION ALL
  SELECT
    issue_id,
    event_id,
    event_timestamp
  FROM
    `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID`)
WHERE
  event_timestamp >= PARSE_TIMESTAMP("%Y_%m_%d", "YYYY_MM_DD")
GROUP BY
  issue_id
ORDER BY
  events DESC
LIMIT
  5;



Визуализируйте экспортированные данные Crashlytics с помощью Looker Studio

Looker Studio превращает ваши наборы данных Crashlytics в BigQuery в отчеты, которые легче читать, легче делиться ими и которые полностью настраиваются.

Чтобы узнать больше об использовании Looker Studio , ознакомьтесь с их приветственным руководством .

Используйте шаблон отчета Crashlytics

Looker Studio есть пример отчета для Crashlytics , который включает в себя полный набор измерений и метрик из экспортированной схемы Crashlytics BigQuery . Если вы включили потоковый экспорт Crashlytics в BigQuery , вы можете просмотреть эти данные на странице «Тенденции в реальном времени» в шаблоне Looker Studio . Вы можете использовать этот пример в качестве шаблона для быстрого создания новых отчетов и визуализаций на основе необработанных данных о сбоях вашего приложения:

  1. Откройте шаблон панели управления Crashlytics Looker Studio .

  2. Нажмите «Использовать шаблон» в правом верхнем углу.

  3. В раскрывающемся списке «Новый источник данных» выберите «Создать новый источник данных» .

  4. Нажмите кнопку «Выбрать» на карточке BigQuery .

  5. Выберите таблицу, содержащую экспортированные данные Crashlytics , перейдя в раздел Мои проекты > PROJECT_ID > firebase_crashlytics > TABLE_NAME .

    Ваша таблица для пакетной обработки всегда доступна для выбора. Если включен экспорт потоковых данных Crashlytics в BigQuery , вы можете выбрать вместо нее свою таблицу для обработки в реальном времени.

  6. В разделе «Конфигурация» установите уровень шаблона Crashlytics на «По умолчанию» .

  7. Нажмите «Подключить» , чтобы создать новый источник данных.

  8. Нажмите «Добавить в отчет» , чтобы вернуться к шаблону Crashlytics .

  9. Наконец, нажмите «Создать отчет» , чтобы создать свою копию шаблона панели мониторинга Crashlytics Looker Studio .



Разберитесь в схеме BigQuery

Firebase создает новые наборы данных в BigQuery для экспортированных данных:

Набор данных Crashlytics

Данные Crashlytics экспортируются в набор данных BigQuery под названием firebase_crashlytics . Этот набор данных охватывает весь ваш проект, даже если он включает в себя несколько приложений.

Таблицы

По умолчанию Firebase создает отдельные таблицы внутри набора данных Crashlytics для каждого приложения в вашем проекте, связанного с BigQuery .

Таблицы именуются на основе идентификатора приложения (точки заменяются подчеркиваниями) и дополняются названием платформы приложения ( _IOS или _ANDROID ). Например, данные для приложения Android с именем пакета com.google.test будут находиться в таблице с именем com_google_test_ANDROID .

  • Если включен потоковый экспорт в BigQuery , то данные также будут передаваться в режиме реального времени в таблицу с добавлением _REALTIME (например, com_google_test_ANDROID_REALTIME ).

  • Каждая строка в таблице представляет собой событие, произошедшее в приложении, включая сбои, некритические ошибки и ошибки ANR.

  • В таблицах содержится стандартный набор данных Crashlytics в дополнение к любым пользовательским ключам Crashlytics , определенным вами в вашем приложении ( iOS+ | Android | Flutter | Unity ).

Ряды

Каждая строка в таблице представляет собой ошибку, обнаруженную приложением.

Колонки

Столбцы в таблице идентичны для аварий, нефатальных ошибок и ошибок ANR.

  • Если включен потоковый экспорт в BigQuery , то таблица в реальном времени будет содержать те же столбцы, что и таблица пакетной обработки.

  • У вас могут быть столбцы в строках, представляющие события, для которых отсутствуют трассировки стека.

Вот столбцы таблицы с экспортированными данными Crashlytics :

Название поля Тип данных Описание
app_orientation НИТЬ Например, PORTRAIT , LANDSCAPE , FACE_UP , FACE_DOWN и т. д.
application ЗАПИСЫВАТЬ Приложение, которое инициировало это событие.
application.build_version НИТЬ Версия сборки приложения
application.display_version НИТЬ
blame_frame ЗАПИСЫВАТЬ Кадр, идентифицированный как основная причина сбоя или ошибки.
blame_frame.address INT64 Адрес в двоичном образе, содержащий код.
Не задано для Java-фреймов
blame_frame.blamed БУЛЕВОЕ Было ли установлено, что именно этот кадр стал причиной сбоя или ошибки, по данным Crashlytics
blame_frame.file НИТЬ Имя файла кадра
blame_frame.library НИТЬ Отображаемое имя библиотеки, в которую входит фрейм.
blame_frame.line INT64 Номер строки файла кадра
blame_frame.offset INT64 Смещение в байтах в двоичном образе, содержащем код.
Не задано для исключений Java.
blame_frame.owner НИТЬ Например, DEVELOPER , VENDOR , RUNTIME , PLATFORM или SYSTEM
blame_frame.symbol НИТЬ Символ увлажненного состояния или символ необработанного вещества, если оно не увлажаемое.
breadcrumbs ПОВТОРНАЯ ЗАПИСЬ Если функция отображения навигационной цепочки Google Analytics включена, она будет содержать временные метки.
breadcrumbs.name НИТЬ Название, связанное с хлебными крошками.
breadcrumbs.params ПОВТОРНАЯ ЗАПИСЬ Параметры, связанные с хлебными крошками
breadcrumbs.params.key НИТЬ Ключ параметра, связанный с навигационной цепочкой.
breadcrumbs.params.value НИТЬ Значение параметра, связанного с хлебными крошками.
breadcrumbs.timestamp ОТМЕТКА ВРЕМЕНИ Временная метка, связанная с хлебными крошками.
bundle_identifier НИТЬ Уникальный идентификатор приложения, зарегистрированный в проекте Firebase (например, com.google.gmail )
Для приложений на платформе Apple это идентификатор пакета приложения.
Для приложений Android это имя пакета приложения.
crashlytics_sdk_versions НИТЬ Версия SDK Crashlytics , которая сгенерировала событие.
custom_keys ПОВТОРНАЯ ЗАПИСЬ Определяемые разработчиком пары ключ-значение
custom_keys.key НИТЬ Ключ, определяемый разработчиком.
custom_keys.value НИТЬ Значение, заданное разработчиком.
device ЗАПИСЫВАТЬ Устройство, на котором произошло событие
device_orientation НИТЬ Например, PORTRAIT , LANDSCAPE , FACE_UP , FACE_DOWN и т. д.
device.architecture НИТЬ Например, X86_32 , X86_64 , ARMV7 , ARM64 , ARMV7S или ARMV7K
device.manufacturer НИТЬ Производитель устройства
device.model НИТЬ Модель устройства
error ПОВТОРНАЯ ЗАПИСЬ (Только для приложений Apple) некритические ошибки
error_type НИТЬ Тип ошибки события (например, FATAL , NON_FATAL , ANR и т. д.)
error.blamed БУЛЕВОЕ Уточнили ли Crashlytics , что именно этот кадр является причиной ошибки?
error.code INT64 Код ошибки, связанный с пользовательской записью NSError в журнале приложения.
error.frames ПОВТОРНАЯ ЗАПИСЬ Кадры трассировки стека
error.frames.address INT64 Адрес в двоичном образе, содержащий код.
error.frames.blamed БУЛЕВОЕ Уточнили ли Crashlytics , что именно этот кадр является причиной ошибки?
error.frames.file НИТЬ Имя файла кадра
error.frames.library НИТЬ Отображаемое имя библиотеки, в которую входит фрейм.
error.frames.line INT64 Номер строки файла кадра
error.frames.offset INT64 Смещение в байтах в двоичном образе, содержащем код.
error.frames.owner НИТЬ Например, DEVELOPER , VENDOR , RUNTIME , PLATFORM или SYSTEM
error.frames.symbol НИТЬ Символ увлажненного состояния или символ необработанного вещества, если оно не увлажаемое.
error.queue_name НИТЬ Очередь, в которой выполнялся поток.
error.subtitle НИТЬ Подзаголовок темы
error.title НИТЬ Название темы
event_id НИТЬ Уникальный идентификатор мероприятия
event_timestamp ОТМЕТКА ВРЕМЕНИ Когда произошло событие
exceptions ПОВТОРНАЯ ЗАПИСЬ (Только для Android) Исключения, возникшие во время этого события. Вложенные исключения представлены в обратном хронологическом порядке, то есть последняя запись — это первое выброшенное исключение.
exceptions.blamed БУЛЕВОЕ Значение true, если Crashlytics определяет, что именно исключение стало причиной ошибки или сбоя.
exceptions.exception_message НИТЬ Сообщение, связанное с исключением.
exceptions.frames ПОВТОРНАЯ ЗАПИСЬ Кадры, связанные с исключением
exceptions.frames.address INT64 Адрес в двоичном образе, содержащий код.
Не задано для Java-фреймов
exceptions.frames.blamed БУЛЕВОЕ Было ли установлено, что именно этот кадр стал причиной сбоя или ошибки, по данным Crashlytics
exceptions.frames.file НИТЬ Имя файла кадра
exceptions.frames.library НИТЬ Отображаемое имя библиотеки, в которую входит фрейм.
exceptions.frames.line INT64 Номер строки файла кадра
exceptions.frames.offset INT64 Смещение в байтах в двоичном образе, содержащем код.
Не задано для исключений Java.
exceptions.frames.owner НИТЬ Например, DEVELOPER , VENDOR , RUNTIME , PLATFORM или SYSTEM
exceptions.frames.symbol НИТЬ Символ увлажненного состояния или символ необработанного вещества, если оно не увлажаемое.
exceptions.nested БУЛЕВОЕ Это справедливо для всех исключений, кроме последнего выброшенного исключения (то есть первой записи).
exceptions.subtitle НИТЬ Подзаголовок темы
exceptions.title НИТЬ Название темы
exceptions.type НИТЬ Тип исключения (например, java.lang.IllegalStateException)
firebase_session_id НИТЬ Автоматически сгенерированный идентификатор сессии Firebase, сопоставленный с событием из Crashlytics
installation_uuid НИТЬ Идентификатор, который определяет уникальность установки приложения и устройства.
is_fatal БУЛЕВОЕ Произошёл ли сбой в работе приложения?
issue_id НИТЬ Проблема, связанная с этим событием.
logs ПОВТОРНАЯ ЗАПИСЬ Сообщения журнала с отметками времени, генерируемые регистратором Crashlytics (если он включен).
logs.message НИТЬ Зарегистрированное сообщение
logs.timestamp ОТМЕТКА ВРЕМЕНИ Когда бревно было изготовлено
memory ЗАПИСЫВАТЬ Состояние памяти устройства
memory.free INT64 Осталось байтов памяти
memory.used INT64 Использовано байтов памяти
operating_system ЗАПИСЫВАТЬ Подробная информация об операционной системе на устройстве.
operating_system.device_type НИТЬ Тип устройства (например, MOBILE , TABLET , TV и т. д.); также известен как «категория устройства».
operating_system.display_version НИТЬ Версия операционной системы на устройстве
operating_system.modification_state НИТЬ Была ли проведена модификация устройства (например, приложение, взломанное с помощью джейлбрейка, считается MODIFIED , а приложение, рутированное с помощью UNMODIFIED ).
operating_system.name НИТЬ Название операционной системы на устройстве
operating_system.type НИТЬ (Только для приложений Apple) Тип операционной системы, работающей на устройстве (например, IOS , MACOS и т. д.)
platform НИТЬ Платформа приложения, зарегистрированная в проекте Firebase (допустимые значения: IOS или ANDROID ).
process_state НИТЬ BACKGROUND или FOREGROUND
storage ЗАПИСЫВАТЬ Постоянное хранилище устройства
storage.free INT64 Осталось байтов памяти
storage.used INT64 Использовано байтов памяти
threads ПОВТОРНАЯ ЗАПИСЬ Темы, существовавшие на момент события.
threads.blamed БУЛЕВОЕ Было ли установлено, что именно этот кадр стал причиной сбоя или ошибки, по данным Crashlytics
threads.code INT64 (Только для приложений Apple) Код ошибки, регистрируемый в пользовательском журнале NSError приложения.
threads.crash_address INT64 Адрес сигнала, вызвавшего сбой приложения; присутствует только в потоках, завершившихся с ошибкой.
threads.crashed БУЛЕВОЕ Произошёл ли сбой в потоке?
threads.frames ПОВТОРНАЯ ЗАПИСЬ Рамки нити
threads.frames.address INT64 Адрес в двоичном образе, содержащий код.
threads.frames.blamed БУЛЕВОЕ Уточнили ли Crashlytics , что именно этот кадр является причиной ошибки?
threads.frames.file НИТЬ Имя файла кадра
threads.frames.library НИТЬ Отображаемое имя библиотеки, в которую входит фрейм.
threads.frames.line INT64 Номер строки файла кадра
threads.frames.offset INT64 Смещение в байтах в двоичном образе, содержащем код.
threads.frames.owner НИТЬ Например, DEVELOPER , VENDOR , RUNTIME , PLATFORM или SYSTEM
threads.frames.symbol НИТЬ Символ увлажненного состояния или символ необработанного вещества, если оно не поддается увлажнению.
threads.queue_name НИТЬ (Только для приложений Apple) Очередь, в которой выполнялся поток.
threads.signal_code НИТЬ Код сигнала, вызвавшего сбой приложения; присутствует только в потоках, завершившихся с ошибкой.
threads.signal_name НИТЬ Название сигнала, вызвавшего сбой приложения, присутствует только в потоках, завершившихся с ошибкой.
threads.subtitle НИТЬ Подзаголовок темы
threads.thread_name НИТЬ Название темы
threads.title НИТЬ Название темы
unity_metadata.debug_build БУЛЕВОЕ Если это отладочная сборка
unity_metadata.graphics_copy_texture_support НИТЬ Поддержка копирования графических текстур в соответствии с API Unity.
unity_metadata.graphics_device_id INT64 Идентификатор графического устройства
unity_metadata.graphics_device_name НИТЬ Название графического устройства
unity_metadata.graphics_device_type НИТЬ Тип графического устройства
unity_metadata.graphics_device_vendor_id INT64 Идентификатор производителя графического процессора.
unity_metadata.graphics_device_vendor НИТЬ Производитель графического устройства
unity_metadata.graphics_device_version НИТЬ Версия графического устройства
unity_metadata.graphics_max_texture_size INT64 Максимальный размер, выделенный для рендеринга текстуры.
unity_metadata.graphics_memory_size_mb INT64 Графическая память в МБ
unity_metadata.graphics_render_target_count INT64 Количество целей графического рендеринга
unity_metadata.graphics_shader_level INT64 Уровень шейдеров графики
unity_metadata.processor_count INT64 Количество процессоров (ядер)
unity_metadata.processor_frequency_mhz INT64 Частота процессора (процессоров) в МГц.
unity_metadata.processor_type НИТЬ Тип процессора
unity_metadata.screen_refresh_rate_hz INT64 Частота обновления экрана в Гц
unity_metadata.screen_resolution_dpi НИТЬ Разрешение экрана (DPI) в виде числа с плавающей запятой.
unity_metadata.screen_size_px НИТЬ Размер экрана в пикселях, форматированный как ширина x высота.
unity_metadata.system_memory_size_mb INT64 Размер системной памяти в Мб
unity_metadata.unity_version НИТЬ Версия Unity, установленная на этом устройстве.
user ЗАПИСЫВАТЬ (Необязательно) Информация, собираемая о пользователе приложения.
user.email НИТЬ (Необязательно) Адрес электронной почты пользователя
user.id НИТЬ (Необязательно) Идентификатор приложения, связанный с пользователем.
user.name НИТЬ (Необязательно) Имя пользователя
variant_id НИТЬ Вариант выпуска, связанный с этим событием.
Обратите внимание, что не для всех событий существует соответствующий вариант выпуска.

Набор данных сессий Firebase

Данные о сессиях Firebase экспортируются в набор данных BigQuery под названием firebase_sessions . Этот набор данных охватывает весь ваш проект, даже если он включает в себя несколько приложений.

Таблицы

По умолчанию Firebase создает отдельные таблицы внутри набора данных Firebase sessions для каждого приложения в вашем проекте, связанного с BigQuery .

Таблицы именуются на основе идентификатора приложения (точки заменяются подчеркиваниями) и дополняются названием платформы приложения ( _IOS или _ANDROID ). Например, данные для приложения Android с именем пакета com.google.test будут находиться в таблице с именем com_google_test_ANDROID .

Ряды

Каждая строка в таблице представляет собой событие сессии, которое произошло.

Колонки

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

Вот столбцы таблицы с экспортированными данными о сессиях Firebase:

Название поля Тип данных Описание
instance_id НИТЬ Идентификатор установки Firebase (FID) с устройства. Идентифицирует уникальную установку приложения и устройства.
session_id НИТЬ Уникальный идентификатор этой сессии
first_session_id НИТЬ Первый идентификатор из серии сессий, в которых находится данная сессия с момента холодного запуска приложения. Это поле можно использовать для группировки всех сессий, произошедших после холодного запуска. Если данная сессия является первой, это поле будет совпадать с session_id .
session_index ЦЕЛОЕ Порядок, в котором эта сессия была создана после холодного запуска приложения. Для первой сессии после холодного запуска этот индекс будет равен 0 Индекс будет увеличиваться каждый раз, когда создается сессия без холодного запуска (например, после 30 минут бездействия).
event_type НИТЬ Тип события, произошедшего в ходе сессии (например, SESSION_START ).
event_timestamp ОТМЕТКА ВРЕМЕНИ Время наступления события
received_timestamp ОТМЕТКА ВРЕМЕНИ Время получения события сервером от устройства.
performance_data_collection_enabled БУЛЕВОЕ Была ли включена функция сбора данных Firebase Performance Monitoring SDK во время сеанса.
crashlytics_data_collection_enabled БУЛЕВОЕ Была ли включена функция сбора данных с помощью Firebase Crashlytics SDK во время сессии.
application ЗАПИСЫВАТЬ Описывает приложение
application.build_version НИТЬ Версия сборки приложения (например, 1523456 )
application.display_version НИТЬ Версия приложения для отображения (например, 4.1.7 )
device ЗАПИСЫВАТЬ Устройство, на котором произошло событие
device.model НИТЬ Модель устройства
device.manufacturer НИТЬ Производитель устройства. Для приложений на платформе Apple это будет NULL .
operating_system ЗАПИСЫВАТЬ Описывает операционную систему устройства.
operating_system.display_version НИТЬ Отображаемая версия операционной системы (например, 10.2.1 )
operating_system.name НИТЬ Название операционной системы
operating_system.type НИТЬ Тип операционной системы (например, IOS ). Это поле заполняется только для устройств Apple.
operating_system.device_type НИТЬ Тип устройства (например, MOBILE , TABLET , TV )



Обновите инфраструктуру экспорта для BigQuery до новой версии.

В середине октября 2024 года Crashlytics запустила новую инфраструктуру для пакетного экспорта данных Crashlytics в BigQuery .

  • Если вы включили пакетный экспорт после октября 2024 года , то ваш проект Firebase автоматически использует новую инфраструктуру экспорта. Никаких действий не требуется.

  • Если вы включили пакетный экспорт до или во время октября 2024 года , ознакомьтесь с информацией в разделе «Как перейти на новую инфраструктуру экспорта для BigQuery?», чтобы определить, нужно ли вам предпринимать какие-либо действия.