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

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

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

  1. Перейдите на страницу «Интеграции» в консоли Firebase.
  2. На карточке BigQuery нажмите «Ссылка» .
  3. Следуйте инструкциям на экране, чтобы включить BigQuery.

Когда вы связываете свой проект с BigQuery:

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

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

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

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

Например, данные приложения с идентификатором com.google.test будут находиться в таблице с именем com_google_test_ANDROID . Эта пакетная таблица обновляется один раз в день. Если вы включите потоковый экспорт Crashlytics BigQuery, данные Firebase Crashlytics также будут передаваться в реальном времени в com_google_test_ANDROID_REALTIME .

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

Включить экспорт потоковой передачи Crashlytics BigQuery

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

Экспорт потоковой передачи Crashlytics BigQuery недоступен для тестовой среды BigQuery.

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

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

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

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

Включить потоковую передачу Crashlytics BigQuery

Чтобы включить потоковую передачу, перейдите в раздел Crashlytics на странице интеграции BigQuery и установите флажок Включить потоковую передачу .

Шаблон Студии данных

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

Взгляды

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

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

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

Работа с данными Firebase Crashlytics в BigQuery

В следующих примерах демонстрируются запросы, которые можно выполнять к данным Crashlytics. Эти запросы создают отчеты, которые недоступны на панели управления Crashlytics.

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

В следующих примерах показано, как создавать отчеты, объединяющие данные о событиях сбоя в более понятные сводки.

Пример 1: Сбои по дням

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

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

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

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

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
  `projectId.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;

Пример 3. 10 частых сбоев устройств

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

SELECT
  device.model,
COUNT(DISTINCT event_id) AS number_of_crashes
FROM
  `projectId.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;

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

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

Цель-C

CrashlyticsKit setIntValue:3 forKey:@"current_level";

Быстрый

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

Джава

Crashlytics.setInt("current_level", 3);

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

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

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

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

SELECT *
FROM
  `projectId.firebase_crashlytics.package_name_ANDROID`
WHERE
  user.id IN ("userid1", "userid2", "userid3")
ORDER BY
  user.id
 

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

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

SELECT user.id as user_id
FROM
  `projectId.firebase_crashlytics.package_name_ANDROID`
WHERE
  issue_id = "YOUR_ISSUE_ID"
  AND application.display_version = ""
  AND user.id != ""
ORDER BY
  user.id;

Пример 7. Количество пользователей, затронутых проблемой сбоя, с разбивкой по странам.

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

Чтобы написать этот запрос, команде потребуется:

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

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

    Цель-C
    CrashlyticsKit setUserIdentifier:@"123456789";
    FIRAnalytics setUserID:@"12345678 9";
    
    Быстрый
    Crashlytics.sharedInstance().setUserIdentifier("123456789");
    Analytics.setUserID("123456789");
    
    Джава
    Crashlytics.setUserIdentifier("123456789");
    mFirebaseAnalytics.setUserId("123456789");
    
  3. Напишите запрос, который использует поле идентификатора пользователя для объединения событий в наборе данных Google Analytics BigQuery со сбоями в наборе данных Crashlytics BigQuery:

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

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

Требуется включить экспорт потоковой передачи Crashlytics BigQuery.

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

Пример 9: 5 основных проблем с DATE, включая сегодняшний день

Требуется включить потоковый экспорт Crashlytics BigQuery.

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

SELECT
  issue_id,
  COUNT(DISTINCT event_id) AS events
FROM (
  SELECT
    issue_id,
    event_id,
    event_timestamp
  FROM
    `your_project.firebase_crashlytics.package_name_ANDROID_REALTIME`
  UNION ALL
  SELECT
    issue_id,
    event_id,
    event_timestamp
  FROM
    `your_project.firebase_crashlytics.package_name_ANDROID`)
WHERE
  event_timestamp >= "2020-01-13"
GROUP BY
  issue_id
ORDER BY
  events DESC
LIMIT
  5;

Понимание схемы Firebase Crashlytics в BigQuery

Когда вы связываете Crashlytics с BigQuery, Firebase экспортирует недавние события (сбои, нефатальные ошибки и ANR), включая события, произошедшие за два дня до связывания, с возможностью обратного заполнения за девяносто дней.

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

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

Firebase Crashlytics создает новый набор данных в BigQuery для данных Crashlytics. Набор данных охватывает весь ваш проект, даже если в нем имеется несколько приложений.

Таблицы

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

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

Таблицы содержат стандартный набор данных Crashlytics в дополнение к любым пользовательским ключам Crashlytics, определенным разработчиками.

Строки

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

Столбцы

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

Без следов стека

Столбцы представлены в строках, которые представляют события без трассировки стека.

Имя поля Тип данных Описание
Платформа НИТЬ Приложения Apple или Android
идентификатор_пакета НИТЬ Идентификатор пакета, например com.google.gmail.
event_id НИТЬ Уникальный идентификатор мероприятия.
is_fatal БУЛЕВОЕ значение Сбой приложения
тип_ошибки НИТЬ Тип ошибки события (FATAL, NON_FATAL, ANR)
идентификатор_выпуска НИТЬ Проблема, связанная с событием
вариант_ид НИТЬ Вариант проблемы, связанный с этим событием
Обратите внимание, что не со всеми событиями связан вариант проблемы.
event_timestamp ВРЕМЯ Когда произошло событие
устройство ЗАПИСЫВАТЬ Устройство, на котором произошло событие
устройство.производитель НИТЬ Производитель устройства
устройство.модель НИТЬ Модель устройства
устройство.архитектура НИТЬ X86_32, X86_64, ARMV7, ARM64, ARMV7S или ARMV7K
Память ЗАПИСЫВАТЬ Состояние памяти устройства
память.используется ИНТ64 Использовано байт памяти
память.свободно ИНТ64 Осталось байт памяти
хранилище ЗАПИСЫВАТЬ Постоянное хранилище устройства
хранилище.используется ИНТ64 Использовано байт памяти
хранилище.бесплатно ИНТ64 Осталось места в байтах
Операционная система ЗАПИСЫВАТЬ Подробности об ОС на устройстве
операционная_система.display_version НИТЬ Версия ОС на устройстве
операционная_система.имя НИТЬ Название ОС на устройстве
Operating_system.modification_state НИТЬ Было ли устройство модифицировано, например взломано/рутировано (МОДИФИЦИРОВАНО или НЕМОДИФИЦИРОВАНО)
операционная_система.тип НИТЬ Тип ОС, работающей на устройстве (например, IOS, MACOS); доступно только для приложений платформ Apple
операционная_система.тип_устройства НИТЬ Тип устройства (например, МОБИЛЬНЫЙ, ПЛАНШЕТ, ТВ и т. д.); также известная как «категория устройства»
приложение ЗАПИСЫВАТЬ Приложение, сгенерировавшее событие
application.build_version НИТЬ Версия сборки приложения
application.display_version НИТЬ
пользователь ЗАПИСЫВАТЬ Необязательно: информация, собранная о пользователе приложения.
имя пользователя НИТЬ Необязательно: имя пользователя
user.email НИТЬ Необязательно: адрес электронной почты пользователя.
ID пользователя НИТЬ Необязательно: идентификатор приложения, связанный с пользователем.
custom_keys ПОВТОРНАЯ ЗАПИСЬ Определенные разработчиком пары ключ-значение
custom_keys.key НИТЬ Ключ, определенный разработчиком
custom_keys.value НИТЬ Значение, определенное разработчиком
install_uuid НИТЬ Идентификатор, идентифицирующий уникальную установку приложения и устройства.
крашlytics_sdk_versions НИТЬ Версия Crashlytics SDK, сгенерировавшая событие.
app_orientation НИТЬ ПОРТРЕТ, ЛАНДШАФТ, ЛИЦОМ_ВВЕРХ или ЛИЦОМ_ВНИЗ.
ориентация_устройства НИТЬ ПОРТРЕТ, ЛАНДШАФТ, ЛИЦОМ_ВВЕРХ или ЛИЦОМ_ВНИЗ.
процесс_состояние НИТЬ ФОН или ПЕРЕДНИЙ ПЛАН
журналы ПОВТОРНАЯ ЗАПИСЬ Сообщения журнала с отметкой времени, созданные регистратором Crashlytics, если он включен.
журналы.метка времени ТАЙМ-МЕТКА Когда был сделан журнал
журналы.сообщение НИТЬ Зарегистрированное сообщение
панировочные сухари ПОВТОРНАЯ ЗАПИСЬ Хлебные крошки Google Analytics с отметкой времени, если они включены
хлебные крошки.метка времени ВРЕМЯ Временная метка, связанная с навигационной цепочкой
хлебные крошки.имя НИТЬ Имя, связанное с хлебными крошками
хлебные крошки.парамс ПОВТОРНАЯ ЗАПИСЬ Параметры, связанные с навигационной цепочкой
хлебные крошки.params.key НИТЬ Ключ параметра, связанный с навигационной цепочкой
хлебные крошки.params.value НИТЬ Значение параметра, связанное с навигационной цепочкой.
виноват_фрейм ЗАПИСЫВАТЬ Кадр, определенный как основная причина сбоя или ошибки.
обвинять_frame.line ИНТ64 Номер строки файла кадра
обвиняемый_frame.file НИТЬ Имя файла кадра
виноват_фрейм.символ НИТЬ Гидратированный символ или необработанный символ, если он не гидратируется.
обвинять_frame.offset ИНТ64 Смещение байтов в двоичном изображении, содержащем код, не настроенное для исключений Java.
виноват_фрейм.адрес ИНТ64 Адрес в двоичном изображении, содержащий код, не заданный для кадров Java.
обвинять_frame.library НИТЬ Отображаемое имя библиотеки, включающей фрейм.
виноват_фрейм.владелец НИТЬ РАЗРАБОТЧИК, ПОСТАВЩИК, СРЕДА ВЫПОЛНЕНИЯ, ПЛАТФОРМА или СИСТЕМА
обвиняемый_frame.blamed БУЛЕВОЕ значение Определил ли анализ Crashlytics, что этот кадр является причиной сбоя или ошибки.
исключения ПОВТОРНАЯ ЗАПИСЬ Только для Android: исключения, возникшие во время этого события. Вложенные исключения представлены в обратном хронологическом порядке (читай: последняя запись — это первое выброшенное исключение).
исключения.тип НИТЬ Тип исключения, например java.lang.IllegalStateException.
исключения.Exception_message НИТЬ Сообщение, связанное с исключением
исключения.вложенные БУЛЕВОЕ значение Истинно для всех, кроме последнего созданного исключения (т. е. первой записи).
исключения.название НИТЬ Название темы
исключения.подзаголовок НИТЬ Подзаголовок темы
исключения.виноват БУЛЕВОЕ значение Истинно, если Crashlytics определяет, что исключение является причиной ошибки или сбоя.
исключения.кадры ПОВТОРНАЯ ЗАПИСЬ Кадры, связанные с исключением
исключения.frames.line ИНТ64 Номер строки файла кадра
исключения.frames.file НИТЬ Имя файла кадра
исключения.frames.symbol НИТЬ Гидратированный символ или необработанный символ, если он не гидратируется.
исключения.frames.offset ИНТ64 Смещение байтов в двоичном изображении, содержащем код, не настроенное для исключений Java.
исключения.frames.address ИНТ64 Адрес в двоичном изображении, содержащий код, не заданный для кадров Java.
исключения.frames.library НИТЬ Отображаемое имя библиотеки, включающей фрейм.
исключения.frames.owner НИТЬ РАЗРАБОТЧИК, ПОСТАВЩИК, СРЕДА ВЫПОЛНЕНИЯ, ПЛАТФОРМА или СИСТЕМА
исключения.frames.blamed БУЛЕВОЕ значение Определил ли анализ Crashlytics, что этот кадр является причиной сбоя или ошибки.
ошибка ПОВТОРНАЯ ЗАПИСЬ Только приложения Apple: нефатальные ошибки
error.queue_name НИТЬ Очередь, в которой выполнялся поток
код ошибки ИНТ64 Код ошибки, связанный с зарегистрированной в приложении NSError.
ошибка.название НИТЬ Название темы
ошибка.субтитр НИТЬ Подзаголовок темы
ошибка.виноват БУЛЕВОЕ значение Определил ли анализ Crashlytics, что именно этот кадр является причиной ошибки
ошибка.кадры ПОВТОРНАЯ ЗАПИСЬ Кадры трассировки стека
ошибка.frames.line ИНТ64 Номер строки файла кадра
error.frames.file НИТЬ Имя файла кадра
ошибка.фреймы.символ НИТЬ Гидратированный символ или необработанный символ, если он не гидратируется.
ошибка.frames.offset ИНТ64 Смещение байта в двоичном изображении, содержащем код.
ошибка.фреймы.адрес ИНТ64 Адрес в двоичном изображении, содержащем код
ошибка.frames.library НИТЬ Отображаемое имя библиотеки, включающей фрейм.
ошибка.frames.owner НИТЬ РАЗРАБОТЧИК, ПОСТАВЩИК, СРЕДА ВЫПОЛНЕНИЯ, ПЛАТФОРМА или СИСТЕМА
error.frames.blamed БУЛЕВОЕ значение Определил ли анализ Crashlytics, что именно этот кадр является причиной ошибки
потоки ПОВТОРНАЯ ЗАПИСЬ Темы, присутствующие на момент события
темы.разбился БУЛЕВОЕ значение Разбился ли поток
threads.thread_name НИТЬ Название темы
threads.queue_name НИТЬ Только приложения Apple: очередь, в которой выполнялся поток.
threads.signal_name НИТЬ Имя сигнала, вызвавшего сбой приложения, присутствует только в сбойных собственных потоках.
threads.signal_code НИТЬ Код сигнала, вызвавшего сбой приложения; присутствует только в поврежденных собственных потоках
threads.crash_address ИНТ64 Адрес сигнала, вызвавшего сбой приложения; присутствует только в поврежденных собственных потоках
потоки.код ИНТ64 Только приложения Apple: код ошибки пользовательского журнала NSError приложения.
темы.название НИТЬ Название темы
темы.субтитры НИТЬ Подзаголовок темы
темы.виноваты БУЛЕВОЕ значение Определил ли анализ Crashlytics, что этот кадр является причиной сбоя или ошибки.
потоки.фреймы ПОВТОРНАЯ ЗАПИСЬ Кадры из нити
потоки.frames.line ИНТ64 Номер строки файла кадра
threads.frames.file НИТЬ Имя файла кадра
потоки.frames.symbol НИТЬ Гидратированный символ или необработанный символ, если он не гидратируется.
threads.frames.offset ИНТ64 Смещение байта в двоичном изображении, содержащем код.
threads.frames.address ИНТ64 Адрес в двоичном изображении, содержащем код
потоки.frames.library НИТЬ Отображаемое имя библиотеки, включающей фрейм.
threads.frames.owner НИТЬ РАЗРАБОТЧИК, ПОСТАВЩИК, СРЕДА ВЫПОЛНЕНИЯ, ПЛАТФОРМА или СИСТЕМА
темы.frames.blamed БУЛЕВОЕ значение Определил ли анализ Crashlytics, что именно этот кадр является причиной ошибки
unity_metadata.unity_version НИТЬ Версия Unity, работающая на этом устройстве.
unity_metadata.debug_build БУЛЕВОЕ значение Если это отладочная сборка
unity_metadata.processor_type НИТЬ Тип процессора
unity_metadata.processor_count ИНТ64 Количество процессоров (ядер)
unity_metadata.processor_ Frequency_mhz ИНТ64 Частота процессора(ов) в МГц
unity_metadata.system_memory_size_mb ИНТ64 Размер системной памяти в Мб
unity_metadata.graphics_memory_size_mb ИНТ64 Графическая память в МБ
unity_metadata.graphics_device_id ИНТ64 Идентификатор графического устройства
unity_metadata.graphics_device_vendor_id ИНТ64 Идентификатор производителя графического процессора
unity_metadata.graphics_device_name НИТЬ Имя графического устройства
unity_metadata.graphics_device_vendor НИТЬ Поставщик графического устройства
unity_metadata.graphics_device_version НИТЬ Версия графического устройства
unity_metadata.graphics_device_type НИТЬ Тип графического устройства
unity_metadata.graphics_shader_level ИНТ64 Уровень шейдеров графики
unity_metadata.graphics_render_target_count ИНТ64 Количество целей графического рендеринга
unity_metadata.graphics_copy_texture_support НИТЬ Поддержка копирования графической текстуры, как определено в Unity API.
unity_metadata.graphics_max_texture_size ИНТ64 Максимальный размер, предназначенный для рендеринга текстуры
unity_metadata.screen_size_px НИТЬ Размер экрана в пикселях в формате ширина х высота.
unity_metadata.screen_solve_dpi НИТЬ DPI экрана как число с плавающей запятой
unity_metadata.screen_refresh_rate_hz ИНТ64 Частота обновления экрана в Гц

Визуализация экспортированных данных Crashlytics с помощью Data Studio

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

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

Использование шаблона отчета Crashlytics

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

  1. Откройте шаблон панели управления Crashlytics Data Studio .
  2. Нажмите «Использовать шаблон» в правом верхнем углу.
  3. В раскрывающемся списке «Новый источник данных» выберите «Создать новый источник данных» .
  4. Нажмите «Выбрать» на карточке BigQuery .
  5. Выберите таблицу, содержащую экспортированные данные Crashlytics, выбрав «Мои проекты» > [имя-вашего-проекта] > firebase_crashlytics > [имя-вашей-таблицы] . Ваша таблица партий всегда доступна для выбора; если включен экспорт потоковой передачи Crashlytics BigQuery, вместо этого вы можете выбрать таблицу реального времени.
  6. В разделе «Конфигурация» установите для уровня шаблона Crashlytics значение «По умолчанию» .
  7. Нажмите «Подключиться» , чтобы создать новый источник данных.
  8. Нажмите «Добавить в отчет» , чтобы вернуться к шаблону Crashlytics.
  9. Наконец, нажмите « Создать отчет» , чтобы создать копию шаблона панели инструментов Crashlytics Data Studio.
,

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

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

  1. Перейдите на страницу «Интеграции» в консоли Firebase.
  2. На карточке BigQuery нажмите «Ссылка» .
  3. Следуйте инструкциям на экране, чтобы включить BigQuery.

Когда вы связываете свой проект с BigQuery:

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

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

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

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

Например, данные приложения с идентификатором com.google.test будут находиться в таблице с именем com_google_test_ANDROID . Эта пакетная таблица обновляется один раз в день. Если вы включите потоковый экспорт Crashlytics BigQuery, данные Firebase Crashlytics также будут передаваться в реальном времени в com_google_test_ANDROID_REALTIME .

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

Включить экспорт потоковой передачи Crashlytics BigQuery

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

Экспорт потоковой передачи Crashlytics BigQuery недоступен для тестовой среды BigQuery.

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

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

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

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

Включить потоковую передачу Crashlytics BigQuery

Чтобы включить потоковую передачу, перейдите в раздел Crashlytics на странице интеграции BigQuery и установите флажок Включить потоковую передачу .

Шаблон Студии данных

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

Взгляды

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

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

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

Работа с данными Firebase Crashlytics в BigQuery

В следующих примерах демонстрируются запросы, которые можно выполнять к данным Crashlytics. Эти запросы создают отчеты, которые недоступны на панели управления Crashlytics.

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

В следующих примерах показано, как создавать отчеты, объединяющие данные о событиях сбоя в более понятные сводки.

Пример 1: Сбои по дням

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

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

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

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

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
  `projectId.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;

Пример 3. 10 частых сбоев устройств

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

SELECT
  device.model,
COUNT(DISTINCT event_id) AS number_of_crashes
FROM
  `projectId.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;

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

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

Цель-C

CrashlyticsKit setIntValue:3 forKey:@"current_level";

Быстрый

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

Джава

Crashlytics.setInt("current_level", 3);

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

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

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

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

SELECT *
FROM
  `projectId.firebase_crashlytics.package_name_ANDROID`
WHERE
  user.id IN ("userid1", "userid2", "userid3")
ORDER BY
  user.id
 

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

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

SELECT user.id as user_id
FROM
  `projectId.firebase_crashlytics.package_name_ANDROID`
WHERE
  issue_id = "YOUR_ISSUE_ID"
  AND application.display_version = ""
  AND user.id != ""
ORDER BY
  user.id;

Пример 7. Количество пользователей, затронутых проблемой сбоя, с разбивкой по странам.

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

Чтобы написать этот запрос, команде потребуется:

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

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

    Цель-C
    CrashlyticsKit setUserIdentifier:@"123456789";
    FIRAnalytics setUserID:@"12345678 9";
    
    Быстрый
    Crashlytics.sharedInstance().setUserIdentifier("123456789");
    Analytics.setUserID("123456789");
    
    Джава
    Crashlytics.setUserIdentifier("123456789");
    mFirebaseAnalytics.setUserId("123456789");
    
  3. Напишите запрос, который использует поле идентификатора пользователя для объединения событий в наборе данных Google Analytics BigQuery со сбоями в наборе данных Crashlytics BigQuery:

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

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

Требуется включить экспорт потоковой передачи Crashlytics BigQuery.

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

Пример 9: 5 основных проблем с DATE, включая сегодняшний день

Требуется включить потоковый экспорт Crashlytics BigQuery.

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

SELECT
  issue_id,
  COUNT(DISTINCT event_id) AS events
FROM (
  SELECT
    issue_id,
    event_id,
    event_timestamp
  FROM
    `your_project.firebase_crashlytics.package_name_ANDROID_REALTIME`
  UNION ALL
  SELECT
    issue_id,
    event_id,
    event_timestamp
  FROM
    `your_project.firebase_crashlytics.package_name_ANDROID`)
WHERE
  event_timestamp >= "2020-01-13"
GROUP BY
  issue_id
ORDER BY
  events DESC
LIMIT
  5;

Понимание схемы Firebase Crashlytics в BigQuery

Когда вы связываете Crashlytics с BigQuery, Firebase экспортирует недавние события (сбои, нефатальные ошибки и ANR), включая события, произошедшие за два дня до связывания, с возможностью обратного заполнения за девяносто дней.

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

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

Firebase Crashlytics создает новый набор данных в BigQuery для данных Crashlytics. Набор данных охватывает весь ваш проект, даже если в нем имеется несколько приложений.

Таблицы

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

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

Таблицы содержат стандартный набор данных Crashlytics в дополнение к любым пользовательским ключам Crashlytics, определенным разработчиками.

Строки

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

Столбцы

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

Без следов стека

Столбцы представлены в строках, которые представляют события без трассировок стека.

Имя поля Тип данных Описание
Платформа НИТЬ Приложения Apple или Android
идентификатор_пакета НИТЬ Идентификатор пакета, например com.google.gmail.
event_id НИТЬ Уникальный идентификатор мероприятия.
is_fatal БУЛЕВОЕ значение Сбой приложения
тип_ошибки НИТЬ Тип ошибки события (FATAL, NON_FATAL, ANR)
идентификатор_выпуска НИТЬ Проблема, связанная с событием
вариант_ид НИТЬ Вариант проблемы, связанный с этим событием
Обратите внимание, что не со всеми событиями связан вариант проблемы.
event_timestamp ВРЕМЯ Когда произошло событие
устройство ЗАПИСЫВАТЬ Устройство, на котором произошло событие
устройство.производитель НИТЬ Производитель устройства
устройство.модель НИТЬ Модель устройства
устройство.архитектура НИТЬ X86_32, X86_64, ARMV7, ARM64, ARMV7S или ARMV7K
Память ЗАПИСЫВАТЬ Состояние памяти устройства
память.используется ИНТ64 Использовано байт памяти
память.свободно ИНТ64 Осталось байт памяти
хранилище ЗАПИСЫВАТЬ Постоянное хранилище устройства
хранилище.используется ИНТ64 Использовано байт памяти
хранилище.бесплатно ИНТ64 Осталось места в байтах
Операционная система ЗАПИСЫВАТЬ Подробности об ОС на устройстве
операционная_система.display_version НИТЬ Версия ОС на устройстве
операционная_система.имя НИТЬ Название ОС на устройстве
Operating_system.modification_state НИТЬ Было ли устройство модифицировано, например взломано/рутировано (МОДИФИЦИРОВАНО или НЕМОДИФИЦИРОВАНО)
операционная_система.тип НИТЬ Тип ОС, работающей на устройстве (например, IOS, MACOS); доступно только для приложений платформ Apple
операционная_система.тип_устройства НИТЬ Тип устройства (например, МОБИЛЬНЫЙ, ПЛАНШЕТ, ТВ и т. д.); также известная как «категория устройства»
приложение ЗАПИСЫВАТЬ Приложение, сгенерировавшее событие
application.build_version НИТЬ Версия сборки приложения
application.display_version НИТЬ
пользователь ЗАПИСЫВАТЬ Необязательно: информация, собранная о пользователе приложения.
имя пользователя НИТЬ Необязательно: имя пользователя
user.email НИТЬ Необязательно: адрес электронной почты пользователя.
ID пользователя НИТЬ Необязательно: идентификатор приложения, связанный с пользователем.
custom_keys ПОВТОРНАЯ ЗАПИСЬ Определенные разработчиком пары ключ-значение
custom_keys.key НИТЬ Ключ, определенный разработчиком
custom_keys.value НИТЬ Значение, определенное разработчиком
install_uuid НИТЬ Идентификатор, идентифицирующий уникальную установку приложения и устройства.
крашlytics_sdk_versions НИТЬ Версия Crashlytics SDK, сгенерировавшая событие.
app_orientation НИТЬ Портрет, ландшафт, face_up или face_down
device_orientation НИТЬ Портрет, ландшафт, face_up или face_down
process_state НИТЬ Фон или передний план
журналы Повторная запись Сообщения журнала TimeStected, сгенерированные журналом Crashlytics, если включено
logs.timestamp Временная метка Когда журнал был сделан
logs.message НИТЬ Зарегистрированное сообщение
панировочные сухари Повторная запись TimeStemed Google Analytics Shuthcrumbs, если включено
Сухания. TimeStamp Временная метка Временная метка, связанная с хлебной крошкой
Сухания НИТЬ Название, связанное с хлебной крошкой
Сухания. Params Повторная запись Параметры, связанные с хлебной крошкой
Сухания НИТЬ Ключ параметра, связанный с хлебной крошкой
Сухания. Pparams.value НИТЬ Значение параметра, связанное с хлебной крошкой
wars_frame ЗАПИСЫВАТЬ Кадра, идентифицированная как основная причина сбоя или ошибки
wanse_frame.line Int64 Номер строки файла кадра
wanse_frame.file НИТЬ Имя файла кадра
wanse_frame.symbol НИТЬ Гидратированный символ, или сырой символ, если он невырожденный
wanse_frame.offset Int64 Смещение байта в двоичное изображение, которое содержит код, не подходит для исключений Java
wanse_frame.address Int64 Адрес в двоичном изображении, который содержит код, не установлен для кадров Java
wanse_frame.library НИТЬ Отображаемое имя библиотеки, которая включает в себя кадр
wanse_frame.owner НИТЬ Разработчик, поставщик, время выполнения, платформу или систему
blanse_frame.blamed Логический Определил ли анализ Crashlytics, что этот кадр является причиной сбоя или ошибки
исключения Повторная запись Только для Android: исключения, которые произошли во время этого события. Вложенные исключения представлены в обратном хронологическом порядке (читай: Последняя запись - это первое исключение)
exceptions.type НИТЬ Тип исключения, например, java.lang.illegalstateexception
exceptions.exception_message НИТЬ Сообщение, связанное с исключением
Исключения Логический Верно для всех, кроме последнего исключения (т.е. первая запись)
exceptions.title НИТЬ Название ветки
Исключения. Subtitle НИТЬ Субтитры нити
exceptions.bamed Логический True, если Crashlytics определяет, что исключение отвечает за ошибку или сбой
Исключения Повторная запись Рамки, связанные с исключением
exceptions.frames.line Int64 Номер строки файла кадра
exceptions.frames.file НИТЬ Имя файла кадра
exceptions.frames.symbol НИТЬ Гидратированный символ, или сырой символ, если он невырожденный
exceptions.frames.offset Int64 Смещение байта в двоичное изображение, которое содержит код, не подходит для исключений Java
exceptions.frames.address Int64 Адрес в двоичном изображении, который содержит код, не установлен для кадров Java
exceptions.frames.library НИТЬ Отображаемое имя библиотеки, которая включает в себя кадр
exceptions.frames.owner НИТЬ Разработчик, поставщик, время выполнения, платформу или систему
exceptions.frames.blamed Логический Определил ли анализ Crashlytics, что этот кадр является причиной сбоя или ошибки
ошибка Повторная запись Только приложения Apple: не лечебные ошибки
error.queue_name НИТЬ Очередь, на которой работала нить
код ошибки Int64 Код ошибки, связанный с пользовательским зарегистрированным NSERROR приложения
error.title НИТЬ Название ветки
error.subtitle НИТЬ Субтитры нити
error.baled Логический Определил ли анализ Crashlytics, что этот кадр является причиной ошибки
error.frames Повторная запись Рамы StackTrace
error.frames.line Int64 Номер строки файла кадра
error.frames.file НИТЬ Имя файла кадра
error.frames.symbol НИТЬ Гидратированный символ, или сырой символ, если он невырожденный
error.frames.offset Int64 Смещение байта в двоичное изображение, которое содержит код
error.frames.address Int64 Адрес в двоичном изображении, который содержит код
error.frames.library НИТЬ Отображаемое имя библиотеки, которая включает в себя кадр
error.frames.owner НИТЬ Разработчик, поставщик, время выполнения, платформу или систему
error.frames.blamed Логический Определил ли анализ Crashlytics, что этот кадр является причиной ошибки
потоки Повторная запись Потоки присутствуют во время мероприятия
Threads.croshed Логический Разбилась ли нить
Threads.thread_name НИТЬ Имя ветки
Threads.queue_name НИТЬ Только приложения Apple: очередь, на которой работала поток
Threads.Signal_Name НИТЬ Название сигнала, которое заставило приложение сбой, присутствует только на разбитых местных потоках
Threads.Signal_code НИТЬ Код сигнала, который заставил приложение сбой; присутствует только в разбитых местных нитях
Threads.crash_address Int64 Адрес сигнала, который заставил приложение сбой; присутствует только в разбитых местных нитях
Threads.code Int64 Только приложения Apple: код ошибки пользовательского зарегистрированного NSerror приложения
Threads.title НИТЬ Название ветки
Threads.subtitle НИТЬ Субтитры нити
Threads.bamed Логический Определил ли анализ Crashlytics, что этот кадр является причиной сбоя или ошибки
Threads.frames Повторная запись Рамы нити
Threads.frames.line Int64 Номер строки файла кадра
Threads.frames.file НИТЬ Имя файла кадра
Threads.frames.symbol НИТЬ Гидратированный символ или сырой символ, если он невы
Threads.frames.offset Int64 Смещение байта в двоичное изображение, которое содержит код
Threads.frames.address Int64 Адрес в двоичном изображении, который содержит код
Threads.frames.library НИТЬ Отображаемое имя библиотеки, которая включает в себя кадр
Threads.frames.owner НИТЬ Разработчик, поставщик, время выполнения, платформу или систему
Threads.frames.blamed Логический Определил ли анализ Crashlytics, что этот кадр является причиной ошибки
unity_metadata.unity_version НИТЬ Версия Unity работает на этом устройстве
unity_metadata.debug_build Логический Если это сборка отладки
unity_metadata.processor_type НИТЬ Тип процессора
unity_metadata.processor_count Int64 Количество процессоров (ядер)
unity_metadata.processor_frequency_mhz Int64 Частота процессора (ы) в МГц
unity_metadata.system_memory_size_mb Int64 Размер памяти системы в МБ
unity_metadata.graphics_memory_size_mb Int64 Графическая память в МБ
unity_metadata.graphics_device_id Int64 Идентификатор графического устройства
unity_metadata.graphics_device_vendor_id Int64 Идентификатор поставщика графического процессора
unity_metadata.graphics_device_name НИТЬ Название графического устройства
unity_metadata.graphics_device_vendor НИТЬ Поставщик графического устройства
unity_metadata.graphics_device_version НИТЬ Версия графического устройства
unity_metadata.graphics_device_type НИТЬ Тип графического устройства
unity_metadata.graphics_shader_level Int64 Уровень шейдера графики
unity_metadata.graphics_render_target_count Int64 Количество целей графического рендеринга
unity_metadata.graphics_copy_texture_support НИТЬ Поддержка копирования графики текстуры, как определено в Unity API
unity_metadata.graphics_max_texture_size Int64 Максимальный размер, посвященный текстуре рендеринга
unity_metadata.screen_size_px НИТЬ Размер экрана в пикселях, отформатированный как ширина x высота
unity_metadata.screen_resolution_dpi НИТЬ DPI экрана в виде номера плавающей запятой
unity_metadata.screen_refresh_rate_hz Int64 Скорость обновления экрана в Гц

Визуализация экспортированных данных о катастрофе с Data Studio

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

Чтобы узнать больше об использовании Data Studio, попробуйте руководство QuickStart Data Studio, добро пожаловать в Data Studio .

Использование шаблона отчета о Crashlytics

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

  1. Откройте шаблон мониторинга Data Studio Crashlytics .
  2. Нажмите «Использовать шаблон» в верхнем правом углу.
  3. В выпадении нового источника данных выберите « Создать новый источник данных» .
  4. Нажмите выберите на карте BigQuery .
  5. Выберите таблицу, содержащую экспортируемые данные о Crashlytics, выбирая мои проекты > [YourProject-name] > firebase_crashlytics > [your-table-name] . Ваша пакетная таблица всегда доступна для выбора; Если включен экспорт потоковой передачи Crashlytics BigQuery, вы можете выбрать свою таблицу в режиме реального времени.
  6. Под конфигурацией установите уровень шаблона Crashlytics по умолчанию .
  7. Нажмите «Подключиться» , чтобы создать новый источник данных.
  8. Нажмите «Добавить», чтобы сообщить , чтобы вернуться в шаблон Crashlytics.
  9. Наконец, нажмите « Создать отчет» , чтобы создать свою копию шаблона Data Studio Data Studio.