Вы можете экспортировать данные из 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 у вас также появятся таблицы реального времени (в дополнение к пакетным таблицам). Оба типа таблиц будут иметь одинаковую схему набора данных , но вот некоторые важные различия между пакетными таблицами и таблицами реального времени:
| Таблица партий | Таблица в реальном времени |
|---|---|
|
|
Пакетная таблица идеально подходит для долгосрочного анализа и выявления тенденций во времени, поскольку мы надежно храним события до их записи, и данные могут быть добавлены в таблицу за период до 30 дней*. Когда мы записываем данные в вашу таблицу реального времени, мы немедленно записываем их в BigQuery , поэтому она идеально подходит для интерактивных панелей мониторинга и пользовательских оповещений. Эти две таблицы можно объединить с помощью запроса на объединение данных, чтобы получить преимущества обеих.
По умолчанию для таблиц реального времени установлен срок истечения действия разделов в 30 дней. Чтобы узнать, как изменить это значение, см. раздел «Установка срока истечения действия разделов» в документации BigQuery .
* Подробности о поддержке заполнения резервных копий см. в разделе «Обновление до новой экспортной инфраструктуры» .
Включить экспорт в BigQuery
В консоли Firebase перейдите на страницу «Интеграции» .
В карточке BigQuery нажмите «Ссылка» .
Чтобы включить экспорт в BigQuery , следуйте инструкциям на экране, включая следующие параметры:
Для улучшения понимания того, как работают пользователи и сессии без сбоев, включите экспорт данных сессий Firebase .
Чтобы получить доступ к данным Crashlytics и данным сессий Firebase в BigQuery практически в режиме реального времени, включите потоковый экспорт .
Эту опцию также можно включить во время первоначальной настройки экспорта в BigQuery .
В консоли Firebase перейдите на страницу «Интеграции» .
В карточке BigQuery нажмите «Управление» .
Установите флажок «Включить сессии» .
Это действие позволяет экспортировать данные сессии для всех связанных приложений. Если у вас включен потоковый экспорт, экспорт данных сессии также начнется в режиме реального времени.
Эту опцию также можно включить во время первоначальной настройки экспорта в BigQuery .
В консоли Firebase перейдите на страницу «Интеграции» .
В карточке BigQuery нажмите «Управление» .
Установите флажок «Включить потоковую передачу» .
Это действие включает потоковую передачу данных для всех связанных приложений. Если у вас включен экспорт сессий Firebase, это также включит потоковый экспорт данных сессий.
Что произойдет, если включить экспорт?
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 часа, прежде чем начнется потоковая передача данных.
Убедитесь, что вы отправили в Crashlytics как минимум два события из своего приложения и подождали пару минут после отправки.
Убедитесь, что ваш проект Firebase использует тарифный план Blaze с оплатой по мере использования.
Это можно проверить, посмотрев в левом нижнем углу консоли Firebase .Если после отправки двух событий и ожидания в течение нескольких минут в вашей таблице данных в режиме реального времени по-прежнему отсутствуют данные:
Перейдите к карточке BigQuery в консоли Firebase .
Отключите, а затем снова включите экспорт потокового видео.
Убедитесь, что учетная запись службы
service- PROJECT_NUMBER @gcp-sa-crashlytics.iam.gserviceaccount.comнаходится в вашем проекте Firebase и имеет роль Firebase Crashlytics Service Agent .
Это можно проверить на странице IAM в консоли Google Cloud (убедитесь, что установлен флажок «Включить предоставленные Google права доступа к ролям »).Отправьте в Crashlytics как минимум два события и подождите пару минут.
Если данные в вашей таблице в режиме реального времени по-прежнему не отображаются, обратитесь в службу поддержки Firebase .
Примеры запросов
Пример 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: Количество пользователей, пострадавших от сбоя, в разбивке по странам.
Ваша команда обнаружила критическую ошибку во время развертывания новой версии. Вы смогли использовать запрос из примера «Поиск наиболее распространенных сбоев» выше, чтобы определить конкретный идентификатор проблемы, вызвавшей сбой. Теперь ваша команда хотела бы узнать, распространился ли этот сбой на пользователей в разных странах мира.
Для написания этого запроса вашей команде потребуется выполнить следующие действия:
Включите экспорт данных Google Analytics в BigQuery . См. раздел «Экспорт данных проекта в BigQuery» .
Обновите свое приложение, чтобы оно передавало идентификатор пользователя как в 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");Напишите запрос, который использует поле идентификатора пользователя для объединения событий в наборе данных 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 . Вы можете использовать этот пример в качестве шаблона для быстрого создания новых отчетов и визуализаций на основе необработанных данных о сбоях вашего приложения:
Откройте шаблон панели управления Crashlytics Looker Studio .
Нажмите «Использовать шаблон» в правом верхнем углу.
В раскрывающемся списке «Новый источник данных» выберите «Создать новый источник данных» .
Нажмите кнопку «Выбрать» на карточке BigQuery .
Выберите таблицу, содержащую экспортированные данные Crashlytics , перейдя в раздел Мои проекты > PROJECT_ID > firebase_crashlytics > TABLE_NAME .
Ваша таблица для пакетной обработки всегда доступна для выбора. Если включен экспорт потоковых данных Crashlytics в BigQuery , вы можете выбрать вместо нее свою таблицу для обработки в реальном времени.
В разделе «Конфигурация» установите уровень шаблона Crashlytics на «По умолчанию» .
Нажмите «Подключить» , чтобы создать новый источник данных.
Нажмите «Добавить в отчет» , чтобы вернуться к шаблону Crashlytics .
Наконец, нажмите «Создать отчет» , чтобы создать свою копию шаблона панели мониторинга Crashlytics Looker Studio .
Разберитесь в схеме BigQuery
Firebase создает новые наборы данных в BigQuery для экспортированных данных:
Набор данных сессий Firebase (если экспорт данных сессий разрешен)
Набор данных 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?», чтобы определить, нужно ли вам предпринимать какие-либо действия.