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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Экспорт потоковой передачи Crashlytics в BigQuery

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

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

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

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

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

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

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

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

  2. На карточке BigQuery нажмите «Управление» .

  3. Установите флажок Включить потоковую передачу .

Это действие включает потоковую передачу для всех связанных приложений.

  1. Убедитесь, что вы отправили как минимум два события из своего приложения в Crashlytics и подождали пару минут после их отправки.

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

  3. Если после отправки двух событий и ожидания пары минут в вашей таблице реального времени по-прежнему нет данных:

    1. Перейдите на карточку BigQuery в консоли Firebase .

    2. Отключите, а затем снова включите потоковый экспорт.

    3. Убедитесь, что учетная запись службы service- PROJECT_NUMBER @gcp-sa-crashlytics.iam.gserviceaccount.com находится в вашем проекте Firebase и имеет роль агента службы Firebase Crashlytics .
      Вы можете проверить это на странице IAM консоли Google Cloud (обязательно установите флажок Включить предоставленные Google роли ).

    4. Отправьте в Crashlytics как минимум два события и подождите пару минут.

  4. Если вы по-прежнему не видите данные в таблице реального времени, обратитесь в службу поддержки Firebase .

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

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

Узнайте, какие именно данные Crashlytics экспортируются, и схему их таблиц далее на этой странице.

Используйте шаблон Студии данных

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

Создание представлений

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

Запуск запросов

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

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

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

Ниже приведен пример запроса для приложения 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;

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

Чтобы правильно расставить приоритеты в производственных планах, вам нужно найти 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;

Пример 3. 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;

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

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

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

Crashlytics.sharedInstance().setIntValue(3, forKey: "current_level");
CrashlyticsKit setIntValue:3 forKey:@"current_level";
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

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

У вас есть приложение для 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
 

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

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

Ниже приведен пример запроса для приложения 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;

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

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

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

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

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

    Crashlytics.sharedInstance().setUserIdentifier("123456789");
    Analytics.setUserID("123456789");
    
    CrashlyticsKit setUserIdentifier:@"123456789";
    FIRAnalytics setUserID:@"12345678 9";
    
    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

Пример 8: 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;

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

Вы также можете объединить пакетные таблицы и таблицы реального времени с помощью запроса на сшивку, чтобы добавить информацию в реальном времени к надежным пакетным данным. Поскольку 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 >= "YYYY_MM_DD"
GROUP BY
  issue_id
ORDER BY
  events DESC
LIMIT
  5;

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

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

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

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

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

Таблицы

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

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

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

Строки

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

Столбцы

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

Столбцы экспорта перечислены в этой таблице:

Имя поля Тип данных Описание
platform НИТЬ Платформа приложения, зарегистрированная в проекте Firebase (допустимые значения: IOS или ANDROID ).
bundle_identifier НИТЬ Уникальный идентификатор приложения, зарегистрированный в проекте Firebase (например, com.google.gmail )
Для приложений платформы Apple это идентификатор пакета приложения.
Для приложений Android это имя пакета приложения.
event_id НИТЬ Уникальный идентификатор мероприятия.
is_fatal БУЛЕВОЕ значение Сбой приложения
error_type НИТЬ Тип ошибки события (например, FATAL , NON_FATAL , ANR и т. д.)
issue_id НИТЬ Проблема, связанная с событием
variant_id НИТЬ Вариант проблемы, связанный с этим событием
Обратите внимание, что не со всеми событиями связан вариант проблемы.
event_timestamp ТАЙМ-МЕТКА Когда произошло событие
device ЗАПИСЫВАТЬ Устройство, на котором произошло событие
device.manufacturer НИТЬ Производитель устройства
device.model НИТЬ Модель устройства
device.architecture НИТЬ Например, X86_32 , X86_64 , ARMV7 , ARM64 , ARMV7S или ARMV7K
memory ЗАПИСЫВАТЬ Состояние памяти устройства
memory.used ИНТ64 Использовано байт памяти
memory.free ИНТ64 Осталось байт памяти
storage ЗАПИСЫВАТЬ Постоянное хранилище устройства
storage.used ИНТ64 Использовано байт памяти
storage.free ИНТ64 Осталось места в байтах
operating_system ЗАПИСЫВАТЬ Подробности об ОС на устройстве
operating_system.display_version НИТЬ Версия ОС на устройстве
operating_system.name НИТЬ Название ОС на устройстве
operating_system.modification_state НИТЬ Было ли устройство модифицировано (например, приложение с джейлбрейком MODIFIED , а приложение с root-правами НЕ UNMODIFIED )
operating_system.type НИТЬ (Только приложения Apple) Тип ОС, установленной на устройстве (например, IOS , MACOS и т. д.).
operating_system.device_type НИТЬ Тип устройства (например, MOBILE , TABLET , TV и т. д.); также известная как «категория устройства»
application ЗАПИСЫВАТЬ Приложение, сгенерировавшее событие
application.build_version НИТЬ Версия сборки приложения
application.display_version НИТЬ
user ЗАПИСЫВАТЬ (Необязательно) Собранная информация о пользователе приложения.
user.name НИТЬ (Необязательно) Имя пользователя
user.email НИТЬ (Необязательно) Адрес электронной почты пользователя.
user.id НИТЬ (Необязательно) Идентификатор приложения, связанный с пользователем.
custom_keys ПОВТОРНАЯ ЗАПИСЬ Определенные разработчиком пары ключ-значение
custom_keys.key НИТЬ Ключ, определенный разработчиком
custom_keys.value НИТЬ Значение, определенное разработчиком
installation_uuid НИТЬ Идентификатор, идентифицирующий уникальную установку приложения и устройства.
crashlytics_sdk_versions НИТЬ Версия Crashlytics SDK, сгенерировавшая событие.
app_orientation НИТЬ Например, PORTRAIT , LANDSCAPE , FACE_UP , FACE_DOWN и т. д.
device_orientation НИТЬ Например, PORTRAIT , LANDSCAPE , FACE_UP , FACE_DOWN и т. д.
process_state НИТЬ BACKGROUND или FOREGROUND
logs ПОВТОРНАЯ ЗАПИСЬ Сообщения журнала с отметкой времени, созданные регистратором Crashlytics , если он включен.
logs.timestamp ТАЙМ-МЕТКА Когда был сделан журнал
logs.message НИТЬ Зарегистрированное сообщение
breadcrumbs ПОВТОРНАЯ ЗАПИСЬ Хлебные крошки Google Analytics с отметкой времени, если они включены.
breadcrumbs.timestamp ТАЙМ-МЕТКА Временная метка, связанная с навигационной цепочкой
breadcrumbs.name НИТЬ Имя, связанное с хлебными крошками
breadcrumbs.params ПОВТОРНАЯ ЗАПИСЬ Параметры, связанные с навигационной цепочкой
breadcrumbs.params.key НИТЬ Ключ параметра, связанный с навигационной цепочкой
breadcrumbs.params.value НИТЬ Значение параметра, связанное с навигационной цепочкой.
blame_frame ЗАПИСЫВАТЬ Кадр, определенный как основная причина сбоя или ошибки.
blame_frame.line ИНТ64 Номер строки файла кадра
blame_frame.file НИТЬ Имя файла кадра
blame_frame.symbol НИТЬ Гидратированный символ или необработанный символ, если он не гидратируется.
blame_frame.offset ИНТ64 Смещение байта в двоичном изображении, содержащем код.
Не настроено для исключений Java
blame_frame.address ИНТ64 Адрес в двоичном изображении, содержащем код
Не установлено для фреймов Java
blame_frame.library НИТЬ Отображаемое имя библиотеки, включающей фрейм.
blame_frame.owner НИТЬ Например, DEVELOPER , VENDOR , RUNTIME , PLATFORM или SYSTEM
blame_frame.blamed БУЛЕВОЕ значение Определил ли Crashlytics , что этот кадр является причиной сбоя или ошибки
exceptions ПОВТОРНАЯ ЗАПИСЬ (Только для Android) Исключения, возникшие во время этого события. Вложенные исключения представлены в обратном хронологическом порядке, что означает, что последняя запись является первым возникшим исключением.
exceptions.type НИТЬ Тип исключения (например, java.lang.IllegalStateException)
exceptions.exception_message НИТЬ Сообщение, связанное с исключением
exceptions.nested БУЛЕВОЕ значение Истинно для всех исключений, кроме последнего (имеется в виду первая запись).
exceptions.title НИТЬ Название темы
exceptions.subtitle НИТЬ Подзаголовок темы
exceptions.blamed БУЛЕВОЕ значение Истинно, если Crashlytics определяет, что исключение является причиной ошибки или сбоя.
exceptions.frames ПОВТОРНАЯ ЗАПИСЬ Кадры, связанные с исключением
exceptions.frames.line ИНТ64 Номер строки файла кадра
exceptions.frames.file НИТЬ Имя файла кадра
exceptions.frames.symbol НИТЬ Гидратированный символ или необработанный символ, если он не гидратируется.
exceptions.frames.offset ИНТ64 Смещение байта в двоичном изображении, содержащем код.
Не настроено для исключений Java
exceptions.frames.address ИНТ64 Адрес в двоичном изображении, содержащем код
Не установлено для фреймов Java
exceptions.frames.library НИТЬ Отображаемое имя библиотеки, включающей фрейм.
exceptions.frames.owner НИТЬ Например, DEVELOPER , VENDOR , RUNTIME , PLATFORM или SYSTEM
exceptions.frames.blamed БУЛЕВОЕ значение Определил ли Crashlytics , что этот кадр является причиной сбоя или ошибки
error ПОВТОРНАЯ ЗАПИСЬ (Только приложения Apple) Нефатальные ошибки
error.queue_name НИТЬ Очередь, в которой выполнялся поток
error.code ИНТ64 Код ошибки, связанный с зарегистрированной в приложении NSError.
error.title НИТЬ Название темы
error.subtitle НИТЬ Подзаголовок темы
error.blamed БУЛЕВОЕ значение Определил ли Crashlytics , что именно этот кадр является причиной ошибки
error.frames ПОВТОРНАЯ ЗАПИСЬ Кадры трассировки стека
error.frames.line ИНТ64 Номер строки файла кадра
error.frames.file НИТЬ Имя файла кадра
error.frames.symbol НИТЬ Гидратированный символ или необработанный символ, если он не гидратируется.
error.frames.offset ИНТ64 Смещение байта в двоичном изображении, содержащем код.
error.frames.address ИНТ64 Адрес в двоичном изображении, содержащем код
error.frames.library НИТЬ Отображаемое имя библиотеки, включающей фрейм.
error.frames.owner НИТЬ Например, DEVELOPER , VENDOR , RUNTIME , PLATFORM или SYSTEM
error.frames.blamed БУЛЕВОЕ значение Определил ли Crashlytics , что именно этот кадр является причиной ошибки
threads ПОВТОРНАЯ ЗАПИСЬ Темы, присутствующие на момент события
threads.crashed БУЛЕВОЕ значение Разбился ли поток
threads.thread_name НИТЬ Название темы
threads.queue_name НИТЬ (Только для приложений Apple) Очередь, в которой выполнялся поток
threads.signal_name НИТЬ Имя сигнала, вызвавшего сбой приложения, присутствует только в сбойных собственных потоках.
threads.signal_code НИТЬ Код сигнала, вызвавшего сбой приложения; присутствует только в поврежденных собственных потоках
threads.crash_address ИНТ64 Адрес сигнала, вызвавшего сбой приложения; присутствует только в поврежденных собственных потоках
threads.code ИНТ64 (Только для приложений Apple) Код ошибки пользовательского журнала NSError приложения.
threads.title НИТЬ Название темы
threads.subtitle НИТЬ Подзаголовок темы
threads.blamed БУЛЕВОЕ значение Определил ли Crashlytics , что этот кадр является причиной сбоя или ошибки
threads.frames ПОВТОРНАЯ ЗАПИСЬ Кадры из нити
threads.frames.line ИНТ64 Номер строки файла кадра
threads.frames.file НИТЬ Имя файла кадра
threads.frames.symbol НИТЬ Гидратированный символ или необработанный символ, если он не гидратируется.
threads.frames.offset ИНТ64 Смещение байта в двоичном изображении, содержащем код.
threads.frames.address ИНТ64 Адрес в двоичном изображении, содержащем код
threads.frames.library НИТЬ Отображаемое имя библиотеки, включающей фрейм.
threads.frames.owner НИТЬ Например, DEVELOPER , VENDOR , RUNTIME , PLATFORM или SYSTEM
threads.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_resolution_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 , выбрав Мои проекты > PROJECT_ID > firebase_crashlytics > TABLE_NAME .

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

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

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

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

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

Переход на новую экспортную инфраструктуру

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

Эта новая инфраструктура поддерживает местоположения наборов данных Crashlytics за пределами США.

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

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

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

Обязательное условие для обновления

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

Например:

  • Если у вас есть таблица BigQuery с именем com_yourcompany_yourproject_IOS , то в вашем проекте Firebase должно быть зарегистрировано приложение Firebase iOS+ с идентификатором пакета com.yourcompany.yourproject .

  • Если у вас есть таблица BigQuery с именем com_yourcompany_yourproject_ANDROID , то в вашем проекте Firebase должно быть зарегистрировано Android-приложение Firebase с именем пакета com.yourcompany.yourproject .

Вот как найти все приложения Firebase, зарегистрированные в вашем проекте Firebase:

  1. В консоли Firebase перейдите в Project Settings .

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

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

Как перейти на новую инфраструктуру

Если вы уже включили экспорт, вы можете перейти на новую инфраструктуру, просто выключив и снова включив экспорт данных Crashlytics в консоли Firebase .

Вот подробные шаги:

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

  2. На карточке BigQuery нажмите «Управление» .

  3. Отключите ползунок Crashlytics , чтобы отключить экспорт. При появлении запроса подтвердите, что вы хотите остановить экспорт данных.

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

    Для экспорта данных Crashlytics в BigQuery теперь используется новая инфраструктура экспорта.

,

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Экспорт потоковой передачи Crashlytics в BigQuery

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

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

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

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

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

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

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

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

  2. На карточке BigQuery нажмите «Управление» .

  3. Установите флажок Включить потоковую передачу .

Это действие включает потоковую передачу для всех связанных приложений.

  1. Убедитесь, что вы отправили как минимум два события из своего приложения в Crashlytics и подождали пару минут после их отправки.

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

  3. Если после отправки двух событий и ожидания пары минут в вашей таблице реального времени по-прежнему нет данных:

    1. Перейдите на карту BigQuery в консоли Firebase .

    2. Отключить, а затем повторно включить потоковой экспорт.

    3. Убедитесь, что учетная запись обслуживания service- PROJECT_NUMBER @gcp-sa-crashlytics.iam.gserviceaccount.com находится в вашем проекте Firebase и играет роль агента Firebase Crashlytics .
      Вы можете проверить это на странице IAM на консоли Google Cloud Console (обязательно выберите флажок для включения ролевых грантов Google ).

    4. Отправьте как минимум два события на Crashlytics и подождите пару минут.

  4. Если вы все еще не видите данные в своей таблице в реальном времени, обратитесь к поддержке Firebase .

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

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

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

Используйте шаблон студии данных

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

Создайте представления

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

Запустить запросы

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

Пример 1: сбои днем

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

Вот пример запроса для приложения 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;

Пример 2: Найдите самые распространенные аварии

Чтобы правильно расставить приоритеты в производственных планах, вы хотите найти 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;

Пример 3: Топ -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;

Пример 4: Фильтр от пользовательского ключа

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

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

Crashlytics.sharedInstance().setIntValue(3, forKey: "current_level");
CrashlyticsKit setIntValue:3 forKey:@"current_level";
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

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

У вас есть приложение для 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
 

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

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

Вот пример запроса для приложения 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;

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

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

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

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

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

    Crashlytics.sharedInstance().setUserIdentifier("123456789");
    Analytics.setUserID("123456789");
    
    CrashlyticsKit setUserIdentifier:@"123456789";
    FIRAnalytics setUserID:@"12345678 9";
    
    Crashlytics.setUserIdentifier("123456789");
    mFirebaseAnalytics.setUserId("123456789");
    
  3. Напишите запрос, который использует поле идентификатора пользователя, чтобы присоединиться к событиям в наборе данных Google Analytics с Crashes в наборе данных 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

Пример 8: 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;

Пример 9: 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 >= "YYYY_MM_DD"
GROUP BY
  issue_id
ORDER BY
  events DESC
LIMIT
  5;

Понять схему Crashlytics в BigQuery

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

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

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

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

Таблицы

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

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

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

Строки

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

Столбцы

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

Столбцы в экспорте перечислены в этой таблице:

Имя поля Тип данных Описание
platform НИТЬ Платформа приложения, зарегистрированная в проекте Firebase (Допустимые значения: IOS или ANDROID )
bundle_identifier НИТЬ Уникальный идентификатор для приложения, зарегистрированного в проекте Firebase (например, com.google.gmail )
Для приложений Apple Platform это идентификатор пакета приложения.
Для приложений Android это имя пакета приложения.
event_id НИТЬ Уникальный идентификатор для мероприятия
is_fatal БУЛЕВОЕ значение Разбито приложение
error_type НИТЬ Тип ошибки события (например, FATAL , NON_FATAL , ANR и т. Д.)
issue_id НИТЬ Проблема, связанная с событием
variant_id НИТЬ Вариант проблемы, связанный с этим событием
Обратите внимание, что не все события имеют соответствующий вариант проблемы.
event_timestamp ТАЙМ-МЕТКА Когда произошло событие
device ЗАПИСЫВАТЬ Устройство, на котором произошло событие
device.manufacturer НИТЬ Производитель устройства
device.model НИТЬ Модель устройства
device.architecture НИТЬ Например, X86_32 , X86_64 , ARMV7 , ARM64 , ARMV7S или ARMV7K
memory ЗАПИСЫВАТЬ Состояние памяти устройства
memory.used Int64 Байты памяти используются
memory.free Int64 Оставшиеся байты памяти
storage ЗАПИСЫВАТЬ Постоянное хранилище устройства
storage.used Int64 Используемые байты хранения
storage.free Int64 Оставшиеся байты хранения
operating_system ЗАПИСЫВАТЬ Детали ОС на устройстве
operating_system.display_version НИТЬ Версия ОС на устройстве
operating_system.name НИТЬ Название ОС на устройстве
operating_system.modification_state НИТЬ Было ли устройство изменено (например, приложение с джейлбрандом MODIFIED , и укодимое приложение UNMODIFIED )
operating_system.type НИТЬ (Только приложения Apple) Тип ОС, работающей на устройстве (например, IOS , MACOS и т. Д.)
operating_system.device_type НИТЬ Тип устройства (например, MOBILE , TABLET , TV и т. Д.); Также известен как «категория устройств»
application ЗАПИСЫВАТЬ Приложение, которое сгенерировало событие
application.build_version НИТЬ Версия сборки приложения
application.display_version НИТЬ
user ЗАПИСЫВАТЬ (Необязательно) Информация, собранная о пользователе приложения
user.name НИТЬ (Необязательно) Имя пользователя
user.email НИТЬ (Необязательно) Адрес электронной почты пользователя
user.id НИТЬ (Необязательно) идентификатор, специфичный для приложения, связанный с пользователем
custom_keys Повторная запись Разработчики, определенные пары ключей
custom_keys.key НИТЬ Определенный разработчиком ключ
custom_keys.value НИТЬ Значение разработчика
installation_uuid НИТЬ Идентификатор, который идентифицирует уникальную установку приложения и устройства
crashlytics_sdk_versions НИТЬ Версия Crashlytics SDK, которая сгенерировала событие
app_orientation НИТЬ Например, PORTRAIT , LANDSCAPE , FACE_UP , FACE_DOWN и т. Д.
device_orientation НИТЬ Например, PORTRAIT , LANDSCAPE , FACE_UP , FACE_DOWN и т. Д.
process_state НИТЬ BACKGROUND или FOREGROUND
logs Повторная запись Сообщения журнала TimeStected, сгенерированные журналом Crashlytics , если включено
logs.timestamp ТАЙМ-МЕТКА Когда журнал был сделан
logs.message НИТЬ Зарегистрированное сообщение
breadcrumbs Повторная запись TimeStemed Google Analytics Shuthcrumbs , если включено
breadcrumbs.timestamp ТАЙМ-МЕТКА Временная метка, связанная с хлебной крошкой
breadcrumbs.name НИТЬ Название, связанное с хлебной крошкой
breadcrumbs.params Повторная запись Параметры, связанные с хлебной крошкой
breadcrumbs.params.key НИТЬ Ключ параметра, связанный с хлебной крошкой
breadcrumbs.params.value НИТЬ Значение параметра, связанное с хлебной крошкой
blame_frame ЗАПИСЫВАТЬ Кадра, идентифицированная как основная причина сбоя или ошибки
blame_frame.line Int64 Номер строки файла кадра
blame_frame.file НИТЬ Имя файла кадра
blame_frame.symbol НИТЬ Гидратированный символ, или сырой символ, если он невырожденный
blame_frame.offset Int64 Смещение байта в двоичное изображение, которое содержит код
Необходимо для исключений Java
blame_frame.address Int64 Адрес в двоичном изображении, который содержит код
Неоткрывать для рамки Java
blame_frame.library НИТЬ Отображаемое имя библиотеки, которая включает в себя кадр
blame_frame.owner НИТЬ Например, DEVELOPER , VENDOR , RUNTIME , PLATFORM или SYSTEM
blame_frame.blamed БУЛЕВОЕ значение Определили ли Crashlytics , что этот кадр является причиной сбоя или ошибки
exceptions Повторная запись (Только для Android) исключения, которые произошли во время этого события. Вложенные исключения представлены в обратном хронологическом порядке, что означает, что последняя запись является первым исключением
exceptions.type НИТЬ Тип исключения (например,, java.lang.IllegalStateException)
exceptions.exception_message НИТЬ Сообщение, связанное с исключением
exceptions.nested БУЛЕВОЕ значение Верно для всех, кроме последнего исключения (что означает первая запись)
exceptions.title НИТЬ Название ветки
exceptions.subtitle НИТЬ Субтитры нити
exceptions.blamed БУЛЕВОЕ значение True, если Crashlytics определяет, что исключение отвечает за ошибку или сбой
exceptions.frames Повторная запись Рамки, связанные с исключением
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 НИТЬ Например, DEVELOPER , VENDOR , RUNTIME , PLATFORM или SYSTEM
exceptions.frames.blamed БУЛЕВОЕ значение Определили ли Crashlytics , что этот кадр является причиной сбоя или ошибки
error Повторная запись (Только приложения Apple) Неурозненные ошибки
error.queue_name НИТЬ Очередь, на которой работала нить
error.code Int64 Код ошибки, связанный с пользовательским зарегистрированным NSERROR приложения
error.title НИТЬ Название ветки
error.subtitle НИТЬ Субтитры нити
error.blamed БУЛЕВОЕ значение Определили ли 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 НИТЬ Например, DEVELOPER , VENDOR , RUNTIME , PLATFORM или SYSTEM
error.frames.blamed БУЛЕВОЕ значение Определили ли Crashlytics , что этот кадр является причиной ошибки
threads Повторная запись Потоки присутствуют во время мероприятия
threads.crashed БУЛЕВОЕ значение Разбилась ли нить
threads.thread_name НИТЬ Имя ветки
threads.queue_name НИТЬ (Только приложения Apple) очередь, на которой работала поток
threads.signal_name НИТЬ Название сигнала, которое заставило приложение сбой, присутствует только на разбитых местных потоках
threads.signal_code НИТЬ Код сигнала, который заставил приложение сбой; присутствует только в разбитых местных нитях
threads.crash_address Int64 Адрес сигнала, который заставил приложение сбой; присутствует только в разбитых местных нитях
threads.code Int64 (Только приложения Apple) Код ошибки пользовательского регистрационного приложения.
threads.title НИТЬ Название ветки
threads.subtitle НИТЬ Субтитры нити
threads.blamed БУЛЕВОЕ значение Определили ли 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 НИТЬ Например, DEVELOPER , VENDOR , RUNTIME , PLATFORM или SYSTEM
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 Скорость обновления экрана в Гц

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

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

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

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

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

  1. Откройте шаблон мониторинга Data Studio Crashlytics .

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

  3. В выброшении нового источника данных выберите «Создать новый источник данных» .

  4. Нажмите выберите на карте BigQuery .

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

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

  6. Под конфигурацией установите уровень шаблона Crashlytics по умолчанию .

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

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

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

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

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

Эта новая инфраструктура поддерживает местоположения наборов данных Crashlytics за пределами Соединенных Штатов.

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

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

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

Условие для обновления

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

Например:

  • Если у вас есть таблица BigQuery с именем com_yourcompany_yourproject_IOS , то у вас должно быть зарегистрировано приложение Firebase IOS+ в вашем проекте Firebase с помощью идентификатора пакета com.yourcompany.yourproject .

  • Если у вас есть таблица BigQuery с именем com_yourcompany_yourproject_ANDROID , то у вас должно быть зарегистрировано приложение Firebase Android в вашем проекте Firebase с именем пакета com.yourcompany.yourproject .

Вот как найти все приложения Firebase, зарегистрированные в вашем проекте Firebase:

  1. В консоли Firebase перейдите к проекта настройки .

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

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

Как перейти на новую инфраструктуру

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

Вот подробные шаги:

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

  2. В карте BigQuery нажмите «Управление» .

  3. Установите Crashlytics -слайдер, чтобы отключить экспорт. При запросе подтвердите, что вы хотите, чтобы экспорт данных остановился.

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

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

,

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

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

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

  2. В карте BigQuery нажмите ссылку .

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

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

Что происходит, когда вы включаете экспорт?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Crashlytics Streaming Export в BigQuery

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

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

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

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

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

* См. Подробную информацию о поддержке обратной засыпки в обновлении до новой экспортной инфраструктуры .

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

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

  2. В карте BigQuery нажмите «Управление» .

  3. Выберите флажок « Включить потоковую передачу ».

Это действие позволяет потоковой передаче для всех ваших связанных приложений.

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

  2. Убедитесь, что ваш проект Firebase находится в плане пламени пламя.
    Вы можете проверить это, посмотрев в левом нижнем углу консоли Firebase .

  3. Если в вашей таблице в реальном времени все еще нет данных после отправки двух событий и ожидания пару минут:

    1. Перейдите на карту BigQuery в консоли Firebase .

    2. Отключить, а затем повторно включить потоковой экспорт.

    3. Убедитесь, что учетная запись обслуживания service- PROJECT_NUMBER @gcp-sa-crashlytics.iam.gserviceaccount.com находится в вашем проекте Firebase и играет роль агента Firebase Crashlytics .
      Вы можете проверить это на странице IAM на консоли Google Cloud Console (обязательно выберите флажок для включения ролевых грантов Google ).

    4. Отправьте как минимум два события на Crashlytics и подождите пару минут.

  4. Если вы все еще не видите данные в своей таблице в реальном времени, обратитесь к поддержке Firebase .

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

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

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

Используйте шаблон студии данных

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

Создайте представления

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

Запустить запросы

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

Пример 1: сбои днем

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

Вот пример запроса для приложения 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;

Пример 2: Найдите самые распространенные аварии

Чтобы правильно расставить приоритеты в производственных планах, вы хотите найти 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;

Пример 3: Топ -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;

Пример 4: Фильтр от пользовательского ключа

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

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

Crashlytics.sharedInstance().setIntValue(3, forKey: "current_level");
CrashlyticsKit setIntValue:3 forKey:@"current_level";
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

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

У вас есть приложение для 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
 

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

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

Вот пример запроса для приложения 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;

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

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

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

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

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

    Crashlytics.sharedInstance().setUserIdentifier("123456789");
    Analytics.setUserID("123456789");
    
    CrashlyticsKit setUserIdentifier:@"123456789";
    FIRAnalytics setUserID:@"12345678 9";
    
    Crashlytics.setUserIdentifier("123456789");
    mFirebaseAnalytics.setUserId("123456789");
    
  3. Напишите запрос, который использует поле идентификатора пользователя, чтобы присоединиться к событиям в наборе данных Google Analytics с Crashes в наборе данных 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

Пример 8: 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;

Пример 9: 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 >= "YYYY_MM_DD"
GROUP BY
  issue_id
ORDER BY
  events DESC
LIMIT
  5;

Понять схему Crashlytics в BigQuery

When you set up Crashlytics data export to BigQuery , Firebase exports recent events (crashes, non-fatal errors, and ANRs), including events from up to two days before the link, with the option to backfill up to 30 days.

From that point until you deactivate the export, Firebase exports Crashlytics events on a daily basis. It can take a few minutes for the data to be available in BigQuery after each export.

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

Crashlytics creates a new dataset in BigQuery for Crashlytics data. The dataset covers your entire project, even if it has multiple apps.

Таблицы

Crashlytics creates a table in the dataset for each app in your project, unless you've opted out of exporting data for that app. Firebase names the tables based on the app's identifier, with periods converted to underscores, and a platform name appended to the end.

For example, data for an Android app with the package name com.google.test would be in a table named com_google_test_ANDROID , and realtime data (if enabled) would be in a table named com_google_test_ANDROID_REALTIME

Tables contain a standard set of Crashlytics data in addition to any custom Crashlytics keys defined by you in your app.

Строки

Each row in a table represents an error the app encountered.

Столбцы

The columns in a table are identical for crashes, non-fatal errors, and ANRs. If Crashlytics streaming export to BigQuery is enabled, then the realtime table will have the same columns as the batch table. Note that you may have columns in rows that represent events that don't have stack traces.

The columns within the export are listed in this table:

Имя поля Тип данных Описание
platform НИТЬ The platform of the app as registered in the Firebase project (valid values: IOS or ANDROID )
bundle_identifier НИТЬ The unique identifier for the app as registered in the Firebase project (for example, com.google.gmail )
For Apple platform apps, this is the bundle ID of the app.
For Android apps, this is the package name of the app.
event_id НИТЬ The unique ID for the event
is_fatal БУЛЕВОЕ значение Whether the app crashed
error_type НИТЬ The error type of the event (for example, FATAL , NON_FATAL , ANR , etc.)
issue_id НИТЬ The issue associated with the event
variant_id НИТЬ The issue variant associated with this event
Note that not all events have an associated issue variant.
event_timestamp ТАЙМ-МЕТКА When the event occurred
device ЗАПИСЫВАТЬ The device the event occurred on
device.manufacturer НИТЬ The device manufacturer
device.model НИТЬ The device model
device.architecture НИТЬ For example, X86_32 , X86_64 , ARMV7 , ARM64 , ARMV7S , or ARMV7K
memory ЗАПИСЫВАТЬ The device's memory status
memory.used INT64 Bytes of memory used
memory.free INT64 Bytes of memory remaining
storage ЗАПИСЫВАТЬ The device's persistent storage
storage.used INT64 Bytes of storage used
storage.free INT64 Bytes of storage remaining
operating_system ЗАПИСЫВАТЬ The details of the OS on the device
operating_system.display_version НИТЬ The version of the OS on the device
operating_system.name НИТЬ The name of the OS on the device
operating_system.modification_state НИТЬ Whether the device has been modified (for example, a jailbroken app is MODIFIED and a rooted app is UNMODIFIED )
operating_system.type НИТЬ (Apple apps only) The type of OS running on the device (for example, IOS , MACOS , etc.)
operating_system.device_type НИТЬ The type of device (for example, MOBILE , TABLET , TV , etc.); also known as "device category"
application ЗАПИСЫВАТЬ The app that generated the event
application.build_version НИТЬ The app's build version
application.display_version НИТЬ
user ЗАПИСЫВАТЬ (Optional) Info collected about the app's user
user.name НИТЬ (Optional) The user's name
user.email НИТЬ (Optional) The user's email address
user.id НИТЬ (Optional) An app-specific ID associated with the user
custom_keys REPEATED RECORD Developer-defined key-value pairs
custom_keys.key НИТЬ A developer-defined key
custom_keys.value НИТЬ A developer-defined value
installation_uuid НИТЬ An ID that identifies a unique app and device installation
crashlytics_sdk_versions НИТЬ The Crashlytics SDK version that generated the event
app_orientation НИТЬ For example, PORTRAIT , LANDSCAPE , FACE_UP , FACE_DOWN , etc.
device_orientation НИТЬ For example, PORTRAIT , LANDSCAPE , FACE_UP , FACE_DOWN , etc.
process_state НИТЬ BACKGROUND or FOREGROUND
logs REPEATED RECORD Timestamped log messages generated by the Crashlytics logger, if enabled
logs.timestamp ТАЙМ-МЕТКА When the log was made
logs.message НИТЬ The logged message
breadcrumbs REPEATED RECORD Timestamped Google Analytics breadcrumbs , if enabled
breadcrumbs.timestamp ТАЙМ-МЕТКА The timestamp associated with the breadcrumb
breadcrumbs.name НИТЬ The name associated with the breadcrumb
breadcrumbs.params REPEATED RECORD Parameters associated with the breadcrumb
breadcrumbs.params.key НИТЬ A parameter key associated with the breadcrumb
breadcrumbs.params.value НИТЬ A parameter value associated with the breadcrumb
blame_frame ЗАПИСЫВАТЬ The frame identified as the root cause of the crash or error
blame_frame.line INT64 The line number of the file of the frame
blame_frame.file НИТЬ The name of the frame file
blame_frame.symbol НИТЬ The hydrated symbol, or raw symbol if it's unhydrateable
blame_frame.offset INT64 The byte offset into the binary image that contains the code
Unset for Java exceptions
blame_frame.address INT64 The address in the binary image which contains the code
Unset for Java frames
blame_frame.library НИТЬ The display name of the library that includes the frame
blame_frame.owner НИТЬ For example, DEVELOPER , VENDOR , RUNTIME , PLATFORM , or SYSTEM
blame_frame.blamed БУЛЕВОЕ значение Whether Crashlytics determined that this frame is the cause of the crash or error
exceptions REPEATED RECORD (Android only) Exceptions that occurred during this event. Nested exceptions are presented in reverse chronological order, which means that the last record is the first exception thrown
exceptions.type НИТЬ The exception type (for example, java.lang.IllegalStateException)
exceptions.exception_message НИТЬ A message associated with the exception
exceptions.nested БУЛЕВОЕ значение True for all but the last-thrown exception (meaning the first record)
exceptions.title НИТЬ The title of the thread
exceptions.subtitle НИТЬ The subtitle of the thread
exceptions.blamed БУЛЕВОЕ значение True if Crashlytics determines the exception is responsible for the error or crash
exceptions.frames REPEATED RECORD The frames associated with the exception
exceptions.frames.line INT64 The line number of the file of the frame
exceptions.frames.file НИТЬ The name of the frame file
exceptions.frames.symbol НИТЬ The hydrated symbol, or raw symbol if it's unhydrateable
exceptions.frames.offset INT64 The byte offset into the binary image that contains the code
Unset for Java exceptions
exceptions.frames.address INT64 The address in the binary image which contains the code
Unset for Java frames
exceptions.frames.library НИТЬ The display name of the library that includes the frame
exceptions.frames.owner НИТЬ For example, DEVELOPER , VENDOR , RUNTIME , PLATFORM , or SYSTEM
exceptions.frames.blamed БУЛЕВОЕ значение Whether Crashlytics determined that this frame is the cause of the crash or error
error REPEATED RECORD (Apple apps only) non-fatal errors
error.queue_name НИТЬ The queue the thread was running on
error.code INT64 Error code associated with the app's custom logged NSError
error.title НИТЬ The title of the thread
error.subtitle НИТЬ The subtitle of the thread
error.blamed БУЛЕВОЕ значение Whether Crashlytics determined that this frame is the cause of the error
error.frames REPEATED RECORD The frames of the stacktrace
error.frames.line INT64 The line number of the file of the frame
error.frames.file НИТЬ The name of the frame file
error.frames.symbol НИТЬ The hydrated symbol, or raw symbol if it's unhydrateable
error.frames.offset INT64 The byte offset into the binary image that contains the code
error.frames.address INT64 The address in the binary image which contains the code
error.frames.library НИТЬ The display name of the library that includes the frame
error.frames.owner НИТЬ For example, DEVELOPER , VENDOR , RUNTIME , PLATFORM , or SYSTEM
error.frames.blamed БУЛЕВОЕ значение Whether Crashlytics determined that this frame is the cause of the error
threads REPEATED RECORD Threads present at the time of the event
threads.crashed БУЛЕВОЕ значение Whether the thread crashed
threads.thread_name НИТЬ The thread's name
threads.queue_name НИТЬ (Apple apps only) The queue the thread was running on
threads.signal_name НИТЬ The name of the signal that caused the app to crash, only present on crashed native threads
threads.signal_code НИТЬ The code of the signal that caused the app to crash; only present on crashed native threads
threads.crash_address INT64 The address of the signal that caused the application to crash; only present on crashed native threads
threads.code INT64 (Apple apps only) Error code of the application's custom logged NSError
threads.title НИТЬ The title of the thread
threads.subtitle НИТЬ The subtitle of the thread
threads.blamed БУЛЕВОЕ значение Whether Crashlytics determined that this frame is the cause of the crash or error
threads.frames REPEATED RECORD The frames of the thread
threads.frames.line INT64 The line number of the file of the frame
threads.frames.file НИТЬ The name of the frame file
threads.frames.symbol НИТЬ The hydrated symbol, or raw symbol if it's unhydreatable
threads.frames.offset INT64 The byte offset into the binary image that contains the code
threads.frames.address INT64 The address in the binary image which contains the code
threads.frames.library НИТЬ The display name of the library that includes the frame
threads.frames.owner НИТЬ For example, DEVELOPER , VENDOR , RUNTIME , PLATFORM , or SYSTEM
threads.frames.blamed БУЛЕВОЕ значение Whether Crashlytics determined that this frame is the cause of the error
unity_metadata.unity_version НИТЬ The version of Unity running on this device
unity_metadata.debug_build БУЛЕВОЕ значение If this is a debug build
unity_metadata.processor_type НИТЬ The type of processor
unity_metadata.processor_count INT64 The number of processors (cores)
unity_metadata.processor_frequency_mhz INT64 The frequency of the processor(s) in MHz
unity_metadata.system_memory_size_mb INT64 The size of the system's memory in Mb
unity_metadata.graphics_memory_size_mb INT64 The graphics memory in MB
unity_metadata.graphics_device_id INT64 The identifier of the graphics device
unity_metadata.graphics_device_vendor_id INT64 The identifier of the graphics processor's vendor
unity_metadata.graphics_device_name НИТЬ The name of the graphics device
unity_metadata.graphics_device_vendor НИТЬ The vendor of the graphics device
unity_metadata.graphics_device_version НИТЬ The version of the graphics device
unity_metadata.graphics_device_type НИТЬ The type of the graphics device
unity_metadata.graphics_shader_level INT64 The shader level of the graphics
unity_metadata.graphics_render_target_count INT64 The number of graphical rendering targets
unity_metadata.graphics_copy_texture_support НИТЬ Support for copying graphics texture as defined in the Unity API
unity_metadata.graphics_max_texture_size INT64 The maximum size dedicated to rendering texture
unity_metadata.screen_size_px НИТЬ The size of the screen in pixels, formatted as width x height
unity_metadata.screen_resolution_dpi НИТЬ The DPI of the screen as a floating point number
unity_metadata.screen_refresh_rate_hz INT64 The refresh rate of the screen in Hz

Visualize exported Crashlytics data with Data Studio

Google Data Studio turns your Crashlytics datasets in BigQuery into reports that are easier to read, easier to share, and fully customizable.

To learn more about using Data Studio, try the Data Studio quickstart guide, Welcome to Data Studio .

Use a Crashlytics report template

Data Studio has a sample report for Crashlytics that includes a comprehensive set of dimensions and metrics from the exported Crashlytics BigQuery schema. If you have enabled Crashlytics streaming export to BigQuery , then you can view that data on the Realtime trends page of the Data Studio template.You can use the sample as a template to quickly create new reports and visualizations based on your own app's raw crash data:

  1. Open the Crashlytics Data Studio Dashboard template .

  2. Click Use Template in the upper-right corner.

  3. In the New Data Source drop down, select Create New Data Source .

  4. Click Select on the BigQuery card.

  5. Select a table containing exported Crashlytics data by choosing My Projects > PROJECT_ID > firebase_crashlytics > TABLE_NAME .

    Your batch table is always available to select. If Crashlytics streaming export to BigQuery is enabled, then you can select your realtime table instead.

  6. Under Configuration , set Crashlytics Template level to Default .

  7. Click Connect to create the new data source.

  8. Click Add to Report to return to the Crashlytics template.

  9. Finally, click Create Report to create your copy of the Crashlytics Data Studio Dashboard template.

Upgrade to the new export infrastructure

In mid-October 2024, Crashlytics launched a new infrastructure for exporting Crashlytics data into BigQuery . For now, upgrading to this new infrastructure is optional.

This new infrastructure supports Crashlytics dataset locations outside the United States.

  • If you enabled export before mid-October 2024, you can now optionally change the location for data export to any BigQuery -supported dataset location.

  • If you enabled export in mid-October 2024 or later, then you can select any BigQuery -supported dataset location during setup.

Another difference in the new infrastructure is that it doesn't support backfills of data from before you enabled export. (With the old infrastructure, you could backfill up to 30 days prior to the enablement date.) The new infrastructure supports backfills up to the past 30 days or for the most recent date when you enabled export to BigQuery (whichever is most recent).

Prerequisite for upgrading

Before upgrading to the new infrastructure, confirm that you meet the following prerequisite: Your current batch BigQuery tables have matching identifiers to the bundle IDs or package names set for your registered Firebase Apps.

Например:

  • If you have a BigQuery table named com_yourcompany_yourproject_IOS , then you should have a Firebase iOS+ App registered in your Firebase project with the bundle ID com.yourcompany.yourproject .

  • If you have a BigQuery table named com_yourcompany_yourproject_ANDROID , then you should have a Firebase Android App registered in your Firebase project with the package name com.yourcompany.yourproject .

Here's how to find all the Firebase Apps registered in your Firebase project:

  1. In the Firebase console, go to your Project settings .

  2. Scroll down to the Your apps card, then click on the desired Firebase App to view the app's information, including its identifier.

The new export infrastructure will export each app's data based on the package name or bundle ID set for the registered Firebase App. In order to not disrupt your BigQuery workflow, it's important to make sure your current batch tables already have the correct names so that the new infrastructure can append all new data to the existing tables. If you have batch table names that do not match your registered Firebase Apps, but you still want to upgrade, reach out to Firebase Support .

How to upgrade to the new infrastructure

If you've already enabled export, you can upgrade to the new infrastructure simply by toggling Crashlytics data export off and then on again in the Firebase console.

Вот подробные шаги:

  1. In the Firebase console, go to the Integrations page .

  2. In the BigQuery card, click Manage .

  3. Toggle off the Crashlytics slider to disable export. When prompted, confirm that you want data export to stop.

  4. Immediately toggle on again the Crashlytics slider to re-enable export. When prompted, confirm that you want to export data.

    Your Crashlytics data export to BigQuery is now using the new export infrastructure.