Mengekspor data Firebase Crashlytics ke BigQuery

Anda dapat mengekspor data Firebase Crashlytics ke BigQuery untuk dianalisis lebih lanjut. Dengan BigQuery, Anda dapat menganalisis data menggunakan BigQuery SQL, mengekspornya ke penyedia cloud lain, dan menggunakannya untuk visualisasi dan dasbor kustom dengan Looker Studio.

Apa yang dapat dilakukan dengan data yang diekspor?

Ekspor ke BigQuery berisi data error mentah termasuk jenis perangkat, sistem operasi, pengecualian (aplikasi Android) atau error (aplikasi Apple), dan log Crashlytics, serta data lainnya. Anda dapat meninjau data Crashlytics yang diekspor dan skema tabelnya nanti di halaman ini.

Berikut beberapa contoh hal yang dapat Anda lakukan dengan data Crashlytics yang diekspor:

  • Menjalankan kueri
    Anda dapat menjalankan kueri pada data Crashlytics untuk membuat laporan yang menggabungkan data peristiwa error menjadi ringkasan yang lebih mudah dipahami. Karena jenis laporan ini tidak tersedia di dasbor Crashlytics Firebase console, laporan ini dapat melengkapi analisis dan pemahaman Anda tentang data error. Di bagian selanjutnya dalam halaman ini, temukan pilihan contoh kueri.

  • Menggunakan template Looker Studio
    Crashlytics menyediakan template Looker Studio bawaan untuk memvisualisasikan data yang diekspor.

  • Membuat tampilan
    Dengan menggunakan UI BigQuery, Anda dapat membuat tampilan, yang merupakan tabel virtual yang ditentukan oleh kueri SQL. Untuk mengetahui petunjuk mendetail tentang berbagai jenis tampilan dan cara membuatnya, lihat dokumentasi BigQuery.

  • Menggabungkan data spesifik per Crashlytics dengan data sesi Firebase
    Anda juga dapat mengekspor data sesi Firebase saat menyiapkan ekspor data Crashlytics. Gunakan data sesi ini untuk meningkatkan pemahaman tentang pengguna bebas error dan sesi bebas error.

Manfaat ekspor streaming ke BigQuery

Secara default, data diekspor ke BigQuery dalam ekspor batch harian. Selain itu, Anda dapat melakukan streaming data Crashlytics dan sesi Firebase secara real-time dengan streaming BigQuery. Anda dapat menggunakannya untuk tujuan apa pun yang memerlukan data live, seperti menyajikan informasi di dasbor live, mengamati peluncuran secara live, atau memantau masalah aplikasi yang memicu pemberitahuan dan alur kerja kustom.

Saat mengaktifkan ekspor streaming ke BigQuery, Anda juga akan memiliki tabel real-time (selain tabel batch). Kedua jenis tabel akan memiliki skema set data yang sama, tetapi berikut beberapa perbedaan penting antara tabel batch dan tabel real-time:

Tabel Batch Tabel Realtime
  • Data diekspor sekali sehari.
  • Peristiwa disimpan dalam waktu lama sebelum penulisan batch ke BigQuery.
  • Data dapat diisi ulang hingga 30 hari sebelumnya*.
  • Data diekspor secara real-time.
  • Tidak ada pengisian ulang yang tersedia.

Tabel batch cocok untuk analisis jangka panjang dan mengidentifikasi tren dari waktu ke waktu karena kami menyimpan peristiwa dalam waktu lama sebelum menulisnya, dan dapat diisikan ulang ke tabel hingga 30 hari*. Saat menulis data ke tabel realtime, kami langsung menulisnya ke BigQuery sehingga cocok untuk dasbor live dan notifikasi kustom. Kedua tabel ini dapat digabungkan dengan kueri penggabungan untuk mendapatkan manfaat keduanya.

Secara default, tabel realtime memiliki masa berlaku partisi 30 hari. Untuk mempelajari cara mengubah masa berlaku ini, lihat Menetapkan masa berlaku partisi dalam dokumentasi BigQuery.

* Lihat detail tentang dukungan pengisian ulang di Mengupgrade ke infrastruktur ekspor baru.



Mengaktifkan ekspor ke BigQuery

  1. Di Firebase console, buka halaman Integrations.

  2. Di kartu BigQuery, klik Link.

  3. Ikuti petunjuk di layar untuk mengaktifkan ekspor ke BigQuery, termasuk opsi berikut:

Apa yang terjadi saat Anda mengaktifkan ekspor?

  • Firebase mengekspor data dari aplikasi yang tertaut ke BigQuery.

    • Selama penyiapan, secara default, semua aplikasi di project Anda ditautkan ke BigQuery, tetapi Anda dapat memilih untuk tidak menautkan aplikasi tertentu selama penyiapan.

    • Setiap aplikasi yang Anda tambahkan nanti ke project Firebase akan otomatis ditautkan ke BigQuery.

    • Anda dapat mengelola aplikasi mana yang mengekspor data kapan saja.

  • Firebase mengekspor data ke lokasi set data yang Anda pilih selama penyiapan.

    • Lokasi ini berlaku untuk set data Crashlytics dan set data sesi Firebase (jika data sesi diaktifkan untuk diekspor).

    • Lokasi ini hanya berlaku untuk data yang diekspor ke BigQuery, dan tidak memengaruhi lokasi data yang disimpan untuk digunakan di dasbor Crashlytics di Firebase console atau di Android Studio.

    • Setelah set data dibuat, lokasinya tidak dapat diubah, tetapi Anda dapat menyalin set data ke lokasi lain atau memindahkan (membuat ulang) set data secara manual di lokasi yang berbeda. Untuk mempelajari lebih lanjut, lihat Mengubah lokasi untuk ekspor yang ada.

  • Firebase akan menyiapkan sinkronisasi harian data batch Anda ke BigQuery.

    • Setelah ditautkan ke BigQuery, mungkin perlu waktu hingga 48 jam untuk ekspor data batch awal.

    • Sinkronisasi harian dilakukan sekali per hari, terlepas dari ekspor terjadwal yang mungkin telah Anda siapkan di BigQuery. Perhatikan bahwa pengaturan waktu dan durasi tugas sinkronisasi dapat berubah, jadi sebaiknya jangan menjadwalkan operasi atau tugas downstream berdasarkan pengaturan waktu ekspor tertentu.

  • Firebase akan mengekspor salinan data Anda yang ada ke BigQuery.

    • Untuk setiap aplikasi tertaut, ekspor ini mencakup tabel batch yang berisi data dari sinkronisasi harian.

    • Anda dapat secara manual menjadwalkan pengisian ulang data untuk tabel batch hingga 30 hari terakhir atau untuk tanggal terkini saat Anda mengaktifkan ekspor ke BigQuery (mana saja yang terbaru).

    Perhatikan bahwa jika Anda mengaktifkan ekspor data Crashlytics sebelum pertengahan Oktober 2024, Anda juga dapat mengisi ulang data 30 hari sebelum hari saat Anda mengaktifkan ekspor.

  • Hal berikut berlaku jika Anda mengaktifkan ekspor streaming ke BigQuery.

    • Setiap aplikasi tertaut juga akan memiliki tabel real-time sendiri yang berisi data yang terus diperbarui (selain tabel batch aplikasi untuk ekspor batch harian).

    • Setelah mengaktifkan streaming, mungkin perlu waktu hingga 1 jam agar data mulai di-streaming.



Contoh kueri

Contoh 1: Menghitung metrik bebas error menggunakan data sesi Firebase

Dalam versi terbaru, Anda meluncurkan perombakan besar-besaran pada aplikasi untuk mengatasi error dalam perjalanan penting pengguna. Anda telah menerima ulasan yang sangat baik dari pengguna, tetapi Anda ingin bukti kuantitatif bahwa aplikasi Anda lebih stabil dari sebelumnya.

Metrik bebas error dapat membantu memberikan informasi ini. Metrik ini adalah pengukuran penting yang membantu Anda memahami kondisi keseluruhan aplikasi. Dengan data sesi Firebase dan peristiwa Crashlytics, Anda dapat menghitung metrik ini dengan kueri dasar.

Berikut adalah contoh kueri untuk aplikasi Android. Untuk aplikasi iOS, gunakan ID paket dan IOS-nya (bukan nama paket dan ANDROID).

Pengguna bebas error untuk versi tertentu:

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

Sesi bebas error selama seminggu terakhir (168 jam terakhir):

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

Contoh 2: Error per hari

Setelah berupaya memperbaiki bug sebanyak mungkin, Anda merasa bahwa tim Anda telah siap meluncurkan aplikasi berbagi foto yang baru. Sebelum melakukannya, Anda ingin memeriksa jumlah error per hari selama sebulan terakhir, untuk memastikan bahwa pemecahan masalah bug Anda membuat aplikasi menjadi lebih stabil dari waktu ke waktu.

Berikut adalah contoh kueri untuk aplikasi Android. Untuk aplikasi iOS, gunakan ID paket dan IOS (bukan nama paket dan 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;

Contoh 3: Menemukan error yang paling signifikan

Untuk memprioritaskan rencana produksi dengan benar, Anda ingin menemukan 10 error paling signifikan dalam aplikasi. Anda membuat kueri yang memberikan poin data yang relevan.

Berikut adalah contoh kueri untuk aplikasi Android. Untuk aplikasi iOS, gunakan ID paket dan IOS (bukan nama paket dan 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;

Contoh 4: 10 perangkat yang paling sering mengalami error

Musim gugur adalah musim ponsel baru. Perusahaan Anda tahu bahwa ini juga berarti musim munculnya masalah pada perangkat baru — terutama untuk Android. Untuk mengatasi masalah kompatibilitas tersebut, Anda mengumpulkan kueri yang mengidentifikasi 10 perangkat yang paling sering mengalami error dalam seminggu terakhir (168 jam).

Berikut adalah contoh kueri untuk aplikasi Android. Untuk aplikasi iOS, gunakan ID paket dan IOS (bukan nama paket dan 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;

Contoh 5: Memfilter berdasarkan kunci kustom

Anda adalah developer game yang ingin mengetahui level mana dari game Anda yang paling sering mengalami error.

Untuk membantu melacak statistik tersebut, Anda menetapkan kunci Crashlytics kustom yang disebut current_level, dan memperbaruinya setiap kali pengguna mencapai level baru.

Swift

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

Objective-C

CrashlyticsKit setIntValue:3 forKey:@"current_level";

Java

Crashlytics.setInt("current_level", 3);

Dengan kunci tersebut dalam ekspor ke BigQuery, Anda kemudian dapat menulis kueri untuk melaporkan distribusi nilai current_level yang terkait dengan setiap peristiwa error.

Berikut adalah contoh kueri untuk aplikasi Android. Untuk aplikasi iOS, gunakan ID paket dan IOS (bukan nama paket dan 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

Contoh 6: Ekstraksi ID pengguna

Anda memiliki aplikasi Android dalam akses awal. Sebagian besar pengguna menyukai aplikasi tersebut, tetapi tiga pengguna mengalami jumlah error yang tidak biasa. Untuk menyelesaikan masalah, Anda menulis kueri yang menarik semua peristiwa error pada pengguna tersebut menggunakan ID pengguna mereka:

Berikut adalah contoh kueri untuk aplikasi Android. Untuk aplikasi iOS, gunakan ID paket dan IOS (bukan nama paket dan 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
 

Contoh 7: Menemukan semua pengguna yang mengalami masalah error tertentu

Tim Anda tidak sengaja merilis bug kritis kepada sekelompok penguji beta. Tim Anda dapat menggunakan kueri dari contoh "Menemukan error yang paling signifikan" di atas untuk mengidentifikasi ID masalah error yang spesifik. Sekarang, tim Anda ingin menjalankan kueri untuk mengekstrak daftar pengguna aplikasi yang terkena dampak error ini.

Berikut adalah contoh kueri untuk aplikasi Android. Untuk aplikasi iOS, gunakan ID paket dan IOS (bukan nama paket dan 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;

Contoh 8: Jumlah pengguna yang terkena dampak masalah error, dibagi berdasarkan negara

Tim Anda telah mendeteksi bug kritis selama peluncuran rilis baru. Anda dapat menggunakan kueri dari contoh "Menemukan error yang paling signifikan" di atas untuk mengidentifikasi ID masalah error yang spesifik. Sekarang, tim Anda ingin melihat apakah error ini telah menyebar ke pengguna di berbagai negara di dunia.

Untuk menulis kueri ini, tim Anda harus melakukan hal berikut:

  1. Aktifkan ekspor data Google Analytics ke BigQuery. Lihat Mengekspor data project ke BigQuery.

  2. Update aplikasi Anda untuk meneruskan ID pengguna ke Google Analytics SDK dan Crashlytics SDK.

    Swift

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

    Objective-C

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

    Java

    Crashlytics.setUserIdentifier("123456789");
    mFirebaseAnalytics.setUserId("123456789");
    
  3. Menulis kueri yang menggunakan kolom ID pengguna untuk menggabungkan peristiwa di set data Google Analytics dengan error di set data Crashlytics.

    Berikut adalah contoh kueri untuk aplikasi Android. Untuk aplikasi iOS, gunakan ID paket dan IOS (bukan nama paket dan 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

Contoh 9: 5 masalah teratas sejauh ini

Berikut adalah contoh kueri untuk aplikasi Android. Untuk aplikasi iOS, gunakan ID paket dan IOS (bukan nama paket dan 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;

Contoh 10: 5 masalah teratas sejak TANGGAL, termasuk hari ini

Anda juga dapat menggabungkan tabel batch dan realtime dengan kueri penggabungan untuk menambahkan informasi realtime ke data batch yang dapat diandalkan. Karena event_id adalah kunci utama, Anda dapat menggunakan DISTINCT event_id untuk menghilangkan duplikat setiap peristiwa umum dari kedua tabel.

Berikut adalah contoh kueri untuk aplikasi Android. Untuk aplikasi iOS, gunakan ID paket dan IOS (bukan nama paket dan ANDROID).

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



Memvisualisasikan data Crashlytics yang diekspor dengan Looker Studio

Looker Studio mengubah set data Crashlytics Anda di BigQuery menjadi laporan yang lebih mudah dibaca, lebih mudah dibagikan, dan dapat disesuaikan sepenuhnya.

Untuk mempelajari lebih lanjut cara menggunakan Looker Studio, lihat panduan selamat datang.

Menggunakan template laporan Crashlytics

Looker Studio memiliki laporan contoh untuk Crashlytics yang mencakup serangkaian dimensi dan metrik komprehensif dari skema Crashlytics BigQuery yang diekspor. Jika telah mengaktifkan ekspor streaming Crashlytics ke BigQuery, Anda dapat melihat data tersebut di halaman Realtime trends template Looker Studio. Anda dapat menggunakan contoh ini sebagai template untuk membuat laporan dan visualisasi baru dengan cepat berdasarkan data error mentah aplikasi Anda sendiri:

  1. Buka template Dasbor Crashlytics Looker Studio.

  2. Klik Use Template di sudut kanan atas.

  3. Di dropdown New Data Source, pilih Create New Data Source.

  4. Klik Select pada kartu BigQuery.

  5. Pilih tabel yang berisi data Crashlytics yang diekspor dengan memilih My Projects > PROJECT_ID > firebase_crashlytics > TABLE_NAME.

    Tabel batch Anda selalu tersedia untuk dipilih. Jika ekspor streaming Crashlytics ke BigQuery diaktifkan, Anda dapat memilih tabel realtime.

  6. Pada Configuration, setel Crashlytics Template level ke Default.

  7. Klik Connect untuk membuat sumber data baru.

  8. Klik Add to Report untuk kembali ke template Crashlytics.

  9. Terakhir, klik Create Report untuk membuat salinan template Dasbor Crashlytics Looker Studio Anda.



Memahami skema di BigQuery

Firebase membuat set data baru di BigQuery untuk data Anda yang diekspor:

set data Crashlytics

Data Crashlytics diekspor ke set data BigQuery bernama firebase_crashlytics. Set data mencakup seluruh project Anda, meski memiliki beberapa aplikasi.

Tabel

Secara default, Firebase membuat setiap tabel di dalam set data Crashlytics untuk setiap aplikasi di project Anda yang ditautkan ke BigQuery.

Tabel diberi nama berdasarkan ID aplikasi (dengan tanda titik dikonversi menjadi garis bawah) dan ditambahkan dengan platform aplikasi (_IOS atau _ANDROID). Misalnya, data untuk aplikasi Android dengan nama paket com.google.test akan berada dalam tabel bernama com_google_test_ANDROID.

  • Jika ekspor streaming ke BigQuery diaktifkan, data juga akan di-streaming secara real-time ke tabel yang ditambahkan dengan _REALTIME (misalnya, com_google_test_ANDROID_REALTIME).

  • Setiap baris dalam tabel mewakili peristiwa yang terjadi di aplikasi, termasuk error, error non-fatal, dan ANR.

  • Tabel berisi set data Crashlytics standar selain kunci Crashlytics kustom yang ditentukan oleh Anda di aplikasi.

Baris

Setiap baris dalam tabel merepresentasikan error yang dialami aplikasi.

Kolom

Kolom dalam tabel identik untuk error, error non-fatal, dan ANR.

  • Jika ekspor streaming ke BigQuery diaktifkan, tabel real-time akan memiliki kolom yang sama dengan tabel batch.

  • Anda mungkin memiliki kolom dalam baris yang mewakili peristiwa yang tidak memiliki stack trace.

Berikut adalah kolom dalam tabel untuk data Crashlytics yang diekspor:

Nama kolom Jenis data Deskripsi
app_orientation STRING Misalnya, PORTRAIT, LANDSCAPE, FACE_UP, FACE_DOWN, dll.
application RECORD Aplikasi yang menimbulkan peristiwa
application.build_version STRING Versi build aplikasi
application.display_version STRING
blame_frame RECORD Frame yang diidentifikasi sebagai akar penyebab crash atau error
blame_frame.address INT64 Alamat dalam image biner yang berisi kode
Tidak disetel untuk frame Java
blame_frame.blamed BOOLEAN Apakah Crashlytics menentukan bahwa frame ini adalah penyebab error atau crash
blame_frame.file STRING Nama file frame
blame_frame.library STRING Nama tampilan library yang menyertakan frame
blame_frame.line INT64 Nomor baris file frame
blame_frame.offset INT64 Offset byte ke image biner yang berisi kode
Tidak disetel untuk pengecualian Java
blame_frame.owner STRING Misalnya, DEVELOPER, VENDOR, RUNTIME, PLATFORM, atau SYSTEM
blame_frame.symbol STRING Simbol terhidrasi, atau simbol mentah jika tidak dapat dihidrasi
breadcrumbs REPEATED RECORD Breadcrumb Google Analytics berstempel waktu, jika diaktifkan
breadcrumbs.name STRING Nama yang terkait dengan breadcrumb
breadcrumbs.params REPEATED RECORD Parameter yang terkait dengan breadcrumb
breadcrumbs.params.key STRING Kunci parameter yang terkait dengan breadcrumb
breadcrumbs.params.value STRING Parameter value yang terkait dengan breadcrumb
breadcrumbs.timestamp TIMESTAMP Stempel waktu yang terkait dengan breadcrumb
bundle_identifier STRING ID unik untuk aplikasi seperti yang terdaftar di project Firebase (misalnya, com.google.gmail)
Untuk aplikasi platform Apple, ini adalah ID paket aplikasi.
Untuk aplikasi Android, ini adalah nama paket aplikasi.
crashlytics_sdk_versions STRING Versi Crashlytics SDK yang menimbulkan peristiwa
custom_keys REPEATED RECORD Key-value pair yang ditentukan developer
custom_keys.key STRING Kunci yang ditentukan developer
custom_keys.value STRING Nilai yang ditentukan developer
device RECORD Perangkat tempat peristiwa terjadi
device_orientation STRING Misalnya, PORTRAIT, LANDSCAPE, FACE_UP, FACE_DOWN, dll.
device.architecture STRING Misalnya, X86_32, X86_64, ARMV7, ARM64, ARMV7S, atau ARMV7K
device.manufacturer STRING Produsen perangkat
device.model STRING Model perangkat
error REPEATED RECORD (Khusus aplikasi Apple) error non-fatal
error_type STRING Jenis error peristiwa (misalnya, FATAL, NON_FATAL, ANR, dll.)
error.blamed BOOLEAN Apakah Crashlytics menentukan bahwa frame ini adalah penyebab error
error.code INT64 Kode error yang terkait dengan NSError yang dicatat khusus pada aplikasi
error.frames REPEATED RECORD Frame stacktrace
error.frames.address INT64 Alamat dalam image biner yang berisi kode
error.frames.blamed BOOLEAN Apakah Crashlytics menentukan bahwa frame ini adalah penyebab error
error.frames.file STRING Nama file frame
error.frames.library STRING Nama tampilan library yang menyertakan frame
error.frames.line INT64 Nomor baris file frame
error.frames.offset INT64 Offset byte ke image biner yang berisi kode
error.frames.owner STRING Misalnya, DEVELOPER, VENDOR, RUNTIME, PLATFORM, atau SYSTEM
error.frames.symbol STRING Simbol terhidrasi, atau simbol mentah jika tidak dapat dihidrasi
error.queue_name STRING Antrean tempat thread berjalan
error.subtitle STRING Subjudul thread
error.title STRING Judul thread
event_id STRING ID unik untuk peristiwa
event_timestamp TIMESTAMP Kapan peristiwa terjadi
exceptions REPEATED RECORD (Khusus Android) Pengecualian yang terjadi selama peristiwa ini. Pengecualian bertingkat ditampilkan dalam urutan kronologis terbalik, yang berarti bahwa data terakhir adalah pengecualian pertama yang ditampilkan
exceptions.blamed BOOLEAN True jika Crashlytics menentukan bahwa pengecualian menyebabkan error atau crash
exceptions.exception_message STRING Pesan yang terkait dengan pengecualian
exceptions.frames REPEATED RECORD Frame yang terkait dengan pengecualian
exceptions.frames.address INT64 Alamat dalam image biner yang berisi kode
Tidak disetel untuk frame Java
exceptions.frames.blamed BOOLEAN Apakah Crashlytics menentukan bahwa frame ini adalah penyebab error atau crash
exceptions.frames.file STRING Nama file frame
exceptions.frames.library STRING Nama tampilan library yang menyertakan frame
exceptions.frames.line INT64 Nomor baris file frame
exceptions.frames.offset INT64 Offset byte ke image biner yang berisi kode
Tidak disetel untuk pengecualian Java
exceptions.frames.owner STRING Misalnya, DEVELOPER, VENDOR, RUNTIME, PLATFORM, atau SYSTEM
exceptions.frames.symbol STRING Simbol terhidrasi, atau simbol mentah jika tidak dapat dihidrasi
exceptions.nested BOOLEAN True untuk semua kecuali pengecualian yang terakhir kali ditampilkan (yaitu data pertama)
exceptions.subtitle STRING Subjudul thread
exceptions.title STRING Judul thread
exceptions.type STRING Jenis pengecualian (misalnya, java.lang.IllegalStateException)
firebase_session_id STRING ID yang dibuat secara otomatis untuk sesi Firebase yang dipetakan ke peristiwa dari Crashlytics
installation_uuid STRING ID yang mengidentifikasi penginstalan aplikasi dan perangkat unik
is_fatal BOOLEAN Apakah aplikasi mengalami error
issue_id STRING Masalah yang terkait dengan peristiwa
logs REPEATED RECORD Pesan log berstempel waktu yang dihasilkan oleh pencatat log Crashlytics, jika diaktifkan
logs.message STRING Pesan yang dicatat dalam log
logs.timestamp TIMESTAMP Kapan log dibuat
memory RECORD Status memori perangkat
memory.free INT64 Byte memori tersisa
memory.used INT64 Byte memori yang digunakan
operating_system RECORD Detail OS di perangkat
operating_system.device_type STRING Jenis perangkat (misalnya, MOBILE, TABLET, TV, dll.); juga disebut dengan "kategori perangkat"
operating_system.display_version STRING Versi OS di perangkat
operating_system.modification_state STRING Apakah perangkat telah diubah (misalnya, aplikasi yang di-jailbreak adalah MODIFIED dan aplikasi yang di-root adalah UNMODIFIED)
operating_system.name STRING Nama OS di perangkat
operating_system.type STRING (Khusus aplikasi Apple) Jenis OS yang berjalan di perangkat (misalnya, IOS, MACOS, dll.)
platform STRING Platform aplikasi seperti yang terdaftar di project Firebase (nilai yang valid: IOS atau ANDROID)
process_state STRING BACKGROUND atau FOREGROUND
storage RECORD Penyimpanan persisten perangkat
storage.free INT64 Byte penyimpanan tersisa
storage.used INT64 Byte penyimpanan yang digunakan
threads REPEATED RECORD Thread yang ada pada saat peristiwa
threads.blamed BOOLEAN Apakah Crashlytics menentukan bahwa frame ini adalah penyebab error atau crash
threads.code INT64 (Khusus aplikasi Apple) Kode error NSError yang dicatat khusus pada aplikasi
threads.crash_address INT64 Alamat sinyal yang menyebabkan aplikasi error; hanya ada di thread native yang error
threads.crashed BOOLEAN Apakah thread error
threads.frames REPEATED RECORD Frame thread
threads.frames.address INT64 Alamat dalam image biner yang berisi kode
threads.frames.blamed BOOLEAN Apakah Crashlytics menentukan bahwa frame ini adalah penyebab error
threads.frames.file STRING Nama file frame
threads.frames.library STRING Nama tampilan library yang menyertakan frame
threads.frames.line INT64 Nomor baris file frame
threads.frames.offset INT64 Offset byte ke image biner yang berisi kode
threads.frames.owner STRING Misalnya, DEVELOPER, VENDOR, RUNTIME, PLATFORM, atau SYSTEM
threads.frames.symbol STRING Simbol terhidrasi, atau simbol mentah jika tidak terhidrasi
threads.queue_name STRING (Khusus aplikasi Apple) Antrean tempat thread berjalan
threads.signal_code STRING Kode sinyal yang menyebabkan aplikasi error; hanya ada di thread native yang error
threads.signal_name STRING Nama sinyal yang menyebabkan aplikasi error, hanya ada di thread native yang error
threads.subtitle STRING Subjudul thread
threads.thread_name STRING Nama thread
threads.title STRING Judul thread
unity_metadata.debug_build BOOLEAN Jika ini adalah build debug
unity_metadata.graphics_copy_texture_support STRING Dukungan untuk menyalin tekstur grafis seperti yang dijelaskan dalam Unity API
unity_metadata.graphics_device_id INT64 ID perangkat grafis
unity_metadata.graphics_device_name STRING Nama perangkat grafis
unity_metadata.graphics_device_type STRING Jenis perangkat grafis
unity_metadata.graphics_device_vendor_id INT64 ID vendor prosesor grafis
unity_metadata.graphics_device_vendor STRING Vendor perangkat grafis
unity_metadata.graphics_device_version STRING Versi perangkat grafis
unity_metadata.graphics_max_texture_size INT64 Ukuran maksimum yang didedikasikan untuk rendering tekstur
unity_metadata.graphics_memory_size_mb INT64 Memori grafis dalam MB
unity_metadata.graphics_render_target_count INT64 Jumlah target rendering grafis
unity_metadata.graphics_shader_level INT64 Tingkat shader grafis
unity_metadata.processor_count INT64 Jumlah prosesor (core)
unity_metadata.processor_frequency_mhz INT64 Frekuensi prosesor dalam MHz
unity_metadata.processor_type STRING Jenis prosesor
unity_metadata.screen_refresh_rate_hz INT64 Kecepatan refresh layar dalam Hz
unity_metadata.screen_resolution_dpi STRING DPI layar sebagai angka floating point
unity_metadata.screen_size_px STRING Ukuran layar dalam piksel, yang diformat sebagai lebar x tinggi
unity_metadata.system_memory_size_mb INT64 Ukuran memori sistem dalam Mb
unity_metadata.unity_version STRING Versi Unity yang berjalan di perangkat ini
user RECORD (Opsional) Info yang dikumpulkan tentang pengguna aplikasi
user.email STRING (Opsional) Alamat email pengguna
user.id STRING (Opsional) ID khusus aplikasi yang terkait dengan pengguna
user.name STRING (Opsional) Nama pengguna
variant_id STRING Varian masalah yang terkait dengan peristiwa ini
Perhatikan bahwa tidak semua peristiwa memiliki varian masalah terkait.

Set data sesi Firebase

Data sesi Firebase diekspor ke set data BigQuery bernama firebase_sessions. Set data mencakup seluruh project Anda, meski memiliki beberapa aplikasi.

Tabel

Secara default, Firebase membuat setiap tabel di dalam set data sesi Firebase untuk setiap aplikasi di project Anda yang ditautkan ke BigQuery.

Tabel diberi nama berdasarkan ID aplikasi (dengan tanda titik dikonversi menjadi garis bawah) dan ditambahkan dengan platform aplikasi (_IOS atau _ANDROID). Misalnya, data untuk aplikasi Android dengan nama paket com.google.test akan berada dalam tabel bernama com_google_test_ANDROID.

Baris

Setiap baris dalam tabel mewakili peristiwa sesi yang terjadi.

Kolom

Jika ekspor streaming ke BigQuery diaktifkan, tabel real-time akan memiliki kolom yang sama dengan tabel batch.

Berikut adalah kolom dalam tabel untuk data sesi Firebase yang diekspor:

Nama kolom Jenis data Deskripsi
instance_id STRING ID penginstalan Firebase (FID) dari perangkat. Mengidentifikasi penginstalan aplikasi + perangkat yang unik
session_id STRING ID unik sesi ini
first_session_id STRING ID pertama dari serangkaian sesi yang diikuti sesi ini sejak aplikasi dimulai dingin. ID ini dapat digunakan untuk mengelompokkan semua sesi yang telah terjadi sejak cold start. Jika sesi ini adalah sesi pertama, kolom ini akan sama dengan session_id.
session_index INTEGER Urutan sesi ini setelah aplikasi melakukan cold start. Untuk sesi pertama setelah cold start, nilainya adalah 0. Indeks akan bertambah setiap kali sesi dibuat tanpa terjadinya cold start (misalnya, setelah tidak ada aktivitas selama 30 menit).
event_type STRING Jenis peristiwa yang terjadi dalam sesi (misalnya, SESSION_START)
event_timestamp TIMESTAMP Waktu terjadinya peristiwa
received_timestamp TIMESTAMP Waktu peristiwa diterima oleh server dari perangkat
performance_data_collection_enabled BOOLEAN Apakah pengumpulan data Firebase Performance Monitoring SDK diaktifkan pada saat sesi
crashlytics_data_collection_enabled BOOLEAN Apakah pengumpulan data Firebase Crashlytics SDK diaktifkan pada waktu sesi
application RECORD Menjelaskan aplikasi
application.build_version STRING Versi build aplikasi (misalnya, 1523456)
application.display_version STRING Versi tampilan aplikasi (misalnya, 4.1.7)
device RECORD Perangkat tempat peristiwa terjadi
device.model STRING Model perangkat
device.manufacturer STRING Produsen perangkat. Untuk aplikasi platform Apple, nilainya adalah NULL.
operating_system RECORD Menjelaskan OS perangkat
operating_system.display_version STRING Versi tampilan sistem operasi (misalnya, 10.2.1)
operating_system.name STRING Nama sistem operasi
operating_system.type STRING Jenis sistem operasi (misalnya IOS). Kolom ini hanya ditetapkan untuk perangkat Apple.
operating_system.device_type STRING Jenis perangkat (misalnya, MOBILE, TABLET, TV)



Mengupgrade ke infrastruktur ekspor baru

Pada pertengahan Oktober 2024, Crashlytics meluncurkan infrastruktur baru untuk ekspor batch data Crashlytics ke BigQuery.

Semua project Firebase akan otomatis diupgrade ke infrastruktur ekspor batch baru paling cepat 15 September 2025. Anda dapat mengupgrade sebelum tanggal ini, tetapi pastikan tabel batch BigQuery Anda memenuhi prasyarat untuk mengupgrade.

Anda dapat mengupgrade ke infrastruktur baru, tetapi pastikan tabel batch BigQuery Anda memenuhi prasyarat untuk mengupgrade.

Menentukan apakah Anda menggunakan infrastruktur baru

Jika Anda mengaktifkan ekspor batch pada pertengahan Oktober 2024 atau yang lebih baru, project Firebase Anda akan otomatis menggunakan infrastruktur ekspor baru.

Anda dapat memeriksa infrastruktur yang digunakan project: Buka konsol Google Cloud, dan jika "konfigurasi transfer data" diberi label Firebase Crashlytics with Multi-Region Support, berarti project Anda menggunakan infrastruktur ekspor baru.

Perbedaan penting antara infrastruktur ekspor lama dan infrastruktur ekspor baru

  • Infrastruktur baru ini mendukung lokasi set data Crashlytics di luar Amerika Serikat.

    • Ekspor yang diaktifkan sebelum pertengahan Oktober 2024 dan diupgrade ke infrastruktur ekspor baru — Anda kini dapat secara opsional mengubah lokasi untuk ekspor data.

    • Ekspor yang diaktifkan pada pertengahan Oktober 2024 atau yang lebih baru — Anda diminta selama penyiapan untuk memilih lokasi ekspor data.

  • Infrastruktur baru tidak mendukung pengisian ulang data dari sebelum Anda mengaktifkan ekspor.

    • Infrastruktur lama mendukung pengisian ulang hingga 30 hari sebelum tanggal saat Anda mengaktifkan ekspor.

    • Infrastruktur baru mendukung pengisian ulang hingga 30 hari terakhir atau untuk tanggal terkini saat Anda mengaktifkan ekspor ke BigQuery (mana saja yang terkini).

  • Infrastruktur baru ini memberi nama tabel batch BigQuery menggunakan ID yang ditetapkan untuk Aplikasi Firebase Anda di project Firebase.

    • Infrastruktur lama menulis data ke tabel batch dengan nama berdasarkan ID paket atau nama paket dalam program biner aplikasi Anda.

    • Infrastruktur baru menulis data ke tabel batch dengan nama berdasarkan ID paket atau nama paket yang ditetapkan untuk Aplikasi Firebase terdaftar di project Firebase Anda.

Langkah 1: Prasyarat untuk melakukan upgrade

  1. Pastikan tabel batch BigQuery yang ada menggunakan ID yang cocok dengan ID paket atau nama paket yang ditetapkan untuk Aplikasi Firebase terdaftar di project Firebase Anda. Jika tidak cocok, Anda mungkin mengalami gangguan pada data batch yang diekspor. Sebagian besar project akan berada dalam status yang tepat dan kompatibel, tetapi sebaiknya periksa sebelum mengupgrade.

    • Anda dapat menemukan semua Aplikasi Firebase yang terdaftar di project Firebase di konsol Firebase: Buka Project settings, lalu scroll ke kartu Your apps untuk melihat semua Aplikasi Firebase dan informasinya.

    • Anda dapat menemukan semua tabel batch BigQuery di halaman BigQuery di konsol Google Cloud.

    Misalnya, berikut adalah status ideal tempat Anda tidak akan mengalami masalah upgrade:

    • Anda memiliki tabel batch bernama com_yourcompany_yourproject_IOS dan Aplikasi iOS+ Firebase dengan ID paket com.yourcompany.yourproject yang terdaftar di project Firebase.

    • Anda memiliki tabel batch bernama com_yourcompany_yourproject_ANDROID dan Aplikasi Android Firebase dengan nama paket com.yourcompany.yourproject yang terdaftar di project Firebase.

  2. Jika Anda memiliki nama tabel batch yang tidak cocok dengan ID yang ditetapkan untuk Aplikasi Firebase terdaftar, ikuti petunjuknya di halaman ini nanti sebelum mengupgrade secara manual atau sebelum 15 September 2025 untuk menghindari gangguan pada ekspor batch Anda.

Langkah 2: Mengupgrade ke infrastruktur baru secara manual

Jika Anda mengaktifkan ekspor batch sebelum pertengahan Oktober 2024, Anda dapat mengupgrade ke infrastruktur baru secara manual cukup dengan menonaktifkan ekspor data Crashlytics, lalu mengaktifkannya lagi di Firebase console.

Berikut adalah langkah-langkah detailnya:

  1. Di Firebase console, buka halaman Integrations.

  2. Di kartu BigQuery, klik Manage.

  3. Nonaktifkan penggeser Crashlytics untuk menonaktifkan ekspor. Jika diminta, konfirmasikan bahwa Anda ingin ekspor data dihentikan.

  4. Segera aktifkan kembali penggeser Crashlytics untuk mengaktifkan kembali ekspor. Saat diminta, konfirmasikan bahwa Anda ingin mengekspor data.

    Ekspor data Crashlytics Anda ke BigQuery kini menggunakan infrastruktur ekspor baru.

Nama tabel batch yang ada tidak cocok dengan ID Aplikasi Firebase Anda