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 Google Data Studio.
Mengaktifkan ekspor ke BigQuery
Di Firebase console, buka tab Integrations.
Di kartu BigQuery, klik Link.
Ikuti petunjuk di layar untuk mengaktifkan ekspor ke BigQuery.
Jika Anda menginginkan akses mendekati real-time ke data Crashlytics di BigQuery, sebaiknya upgrade ke ekspor streaming.
Apa yang terjadi saat Anda mengaktifkan ekspor?
Anda memilih lokasi set data. Setelah set data dibuat, lokasi 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.
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.
Secara default, semua aplikasi di project Anda akan ditautkan ke BigQuery, dan semua aplikasi yang Anda tambahkan nanti ke project akan otomatis ditautkan ke BigQuery. Anda dapat mengelola aplikasi yang akan mengirimkan data.
Firebase akan menyiapkan sinkronisasi harian data Anda ke BigQuery.
Setelah menautkan project, Anda biasanya harus menunggu hingga sinkronisasi pada hari berikutnya agar kumpulan data pertama diekspor ke BigQuery.
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 yang ada ke BigQuery. Penerapan data awal untuk ekspor mungkin memakan waktu hingga 48 jam.
Untuk setiap aplikasi tertaut, ekspor ini mencakup tabel batch yang berisi data dari sinkronisasi harian.
Anda dapat menjadwalkan pengisian ulang data secara manual untuk tabel batch hingga 30 hari terakhir atau untuk tanggal terbaru 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.
Jika Anda mengaktifkan ekspor streaming Crashlytics ke BigQuery, semua aplikasi tertaut juga akan memiliki tabel realtime yang berisi data yang terus-menerus diperbarui.
Untuk menonaktifkan ekspor BigQuery, batalkan tautan project Anda di Firebase console.
Data apa yang diekspor ke BigQuery?
Data Firebase Crashlytics diekspor ke set data BigQuery bernama firebase_crashlytics
. Secara default, setiap tabel akan dibuat di dalam set data Crashlytics untuk setiap aplikasi di project Anda. Firebase memberi nama tabel berdasarkan ID aplikasi, dengan tanda titik dikonversi menjadi garis bawah dan nama platform ditambahkan ke bagian akhir.
Misalnya, data untuk aplikasi Android dengan nama paket com.google.test
akan berada dalam tabel bernama com_google_test_ANDROID
. Tabel batch ini diperbarui sekali setiap hari. Jika Anda mengaktifkan ekspor streaming Crashlytics ke BigQuery, data Crashlytics juga akan di-streaming secara realtime ke tabel bernama com_google_test_ANDROID_REALTIME
.
Setiap baris dalam tabel mewakili peristiwa yang terjadi di aplikasi, termasuk error, error non-fatal, dan ANR.
Ekspor streaming Crashlytics ke BigQuery
Anda dapat melakukan streaming data Crashlytics 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 Crashlytics ke BigQuery, selain tabel batch, Anda juga akan memiliki tabel realtime. Berikut ini perbedaan yang harus Anda ketahui antara kedua tabel:
Tabel Batch | Tabel Realtime |
---|---|
|
|
Tabel batch cocok untuk analisis jangka panjang dan mengidentifikasi tren dari waktu ke waktu karena kami menyimpan peristiwa secara permanen 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 pemberitahuan 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 streaming Crashlytics ke BigQuery
Di Firebase console, buka tab Integrations.
Di kartu BigQuery, klik Manage.
Pilih kotak centang Include streaming.
Tindakan ini memungkinkan streaming untuk semua aplikasi tertaut.
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.
Tinjau data Crashlytics yang diekspor dan skema tabelnya nanti di halaman ini.
Menggunakan template Data Studio
Untuk mengaktifkan data realtime di template Data Studio, ikuti petunjuk di Memvisualisasikan data Crashlytics yang diekspor dengan Data Studio.
Membuat tampilan
Anda dapat mengubah kueri menjadi tampilan menggunakan UI BigQuery. Untuk mengetahui petunjuk selengkapnya, lihat Membuat tampilan dalam dokumentasi BigQuery.
Menjalankan kueri
Contoh berikut menunjukkan kueri yang dapat Anda jalankan 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.
Contoh 1: 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 2: 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 3: 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 4: 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 5: 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 6: 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 7: 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:
Aktifkan ekspor data Google Analytics ke BigQuery. Lihat Mengekspor data project ke BigQuery.
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");
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 danANDROID
).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 8: 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 9: 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 >= "YYYY_MM_DD" GROUP BY issue_id ORDER BY events DESC LIMIT 5;
Memahami skema Crashlytics di BigQuery
Saat Anda menyiapkan ekspor data Crashlytics ke BigQuery, Firebase akan mengekspor peristiwa terbaru (error, error non-fatal, dan ANR), termasuk peristiwa hingga dua hari sebelum penautan, dengan opsi untuk pengisian ulang hingga 30 hari.
Sejak saat itu hingga Anda menonaktifkan ekspor, Firebase akan mengekspor peristiwa Crashlytics setiap hari. Butuh beberapa menit agar data dapat tersedia di BigQuery setelah setiap ekspor.
Set data
Crashlytics membuat set data baru di BigQuery untuk data Crashlytics. Set data mencakup seluruh project Anda, bahkan jika ia memiliki beberapa aplikasi.
Tabel
Crashlytics membuat tabel dalam set data untuk setiap aplikasi di project Anda, kecuali jika Anda memilih untuk tidak mengekspor data untuk aplikasi tersebut. Firebase memberi nama tabel berdasarkan ID aplikasi, dengan tanda titik dikonversi menjadi garis bawah dan nama platform ditambahkan ke bagian akhir.
Misalnya, data untuk aplikasi Android dengan nama paket com.google.test
akan berada di tabel bernama com_google_test_ANDROID
, dan data realtime (jika diaktifkan) akan berada di tabel bernama com_google_test_ANDROID_REALTIME
Tabel berisi kumpulan standar data Crashlytics 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 Crashlytics ke BigQuery diaktifkan, tabel realtime akan memiliki kolom yang sama dengan tabel batch. Perlu diperhatikan bahwa Anda mungkin memiliki kolom dalam baris yang mewakili peristiwa yang tidak memiliki stack trace.
Kolom dalam ekspor tercantum dalam tabel ini:
Nama kolom | Jenis data | Deskripsi |
---|---|---|
platform |
STRING | Platform aplikasi seperti yang terdaftar di project Firebase
(nilai yang valid: IOS atau ANDROID )
|
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. |
event_id |
STRING | ID unik untuk peristiwa |
is_fatal |
BOOLEAN | Apakah aplikasi mengalami error |
error_type |
STRING | Jenis error peristiwa (misalnya, FATAL ,
NON_FATAL , ANR , dll.) |
issue_id |
STRING | Masalah yang terkait dengan peristiwa |
variant_id |
STRING | Varian masalah yang terkait dengan peristiwa ini Perhatikan bahwa tidak semua peristiwa memiliki varian masalah terkait. |
event_timestamp |
TIMESTAMP | Kapan peristiwa terjadi |
device |
RECORD | Perangkat tempat peristiwa terjadi |
device.manufacturer |
STRING | Produsen perangkat |
device.model |
STRING | Model perangkat |
device.architecture |
STRING | Misalnya, X86_32 , X86_64 , ARMV7 ,
ARM64 , ARMV7S , atau ARMV7K |
memory |
RECORD | Status memori perangkat |
memory.used |
INT64 | Byte memori terpakai |
memory.free |
INT64 | Byte memori tersisa |
storage |
RECORD | Penyimpanan persisten perangkat |
storage.used |
INT64 | Byte penyimpanan terpakai |
storage.free |
INT64 | Byte penyimpanan tersisa |
operating_system |
RECORD | Detail OS di perangkat |
operating_system.display_version |
STRING | Versi OS di perangkat |
operating_system.name |
STRING | Nama 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.type |
STRING | (Khusus aplikasi Apple) Jenis OS yang berjalan di perangkat (misalnya,
IOS , MACOS , dll.) |
operating_system.device_type |
STRING | Jenis perangkat (misalnya, MOBILE , TABLET ,
TV , dll.); juga disebut dengan "kategori perangkat" |
application |
RECORD | Aplikasi yang menimbulkan peristiwa |
application.build_version |
STRING | Versi build aplikasi |
application.display_version |
STRING | |
user |
RECORD | (Opsional) Info yang dikumpulkan tentang pengguna aplikasi |
user.name |
STRING | (Opsional) Nama pengguna |
user.email |
STRING | (Opsional) Alamat email pengguna |
user.id |
STRING | (Opsional) ID khusus aplikasi yang terkait dengan pengguna |
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 |
installation_uuid |
STRING | ID yang mengidentifikasi penginstalan aplikasi dan perangkat unik |
crashlytics_sdk_versions |
STRING | Versi Crashlytics SDK yang menimbulkan peristiwa |
app_orientation |
STRING | Misalnya, PORTRAIT , LANDSCAPE ,
FACE_UP , FACE_DOWN , dll. |
device_orientation |
STRING | Misalnya, PORTRAIT , LANDSCAPE ,
FACE_UP , FACE_DOWN , dll. |
process_state |
STRING | BACKGROUND atau FOREGROUND |
logs |
REPEATED RECORD | Pesan log berstempel waktu yang dihasilkan oleh pencatat log Crashlytics, jika diaktifkan |
logs.timestamp |
TIMESTAMP | Kapan log dibuat |
logs.message |
STRING | Pesan yang dicatat dalam log |
breadcrumbs |
REPEATED RECORD | Breadcrumb Google Analytics berstempel waktu, jika diaktifkan |
breadcrumbs.timestamp |
TIMESTAMP | Stempel waktu yang terkait dengan breadcrumb |
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 | Nilai parameter yang terkait dengan breadcrumb |
blame_frame |
RECORD | Frame yang diidentifikasi sebagai akar penyebab crash atau error |
blame_frame.line |
INT64 | Nomor baris file frame |
blame_frame.file |
STRING | Nama file frame |
blame_frame.symbol |
STRING | Simbol terhidrasi, atau simbol mentah jika tidak dapat dihidrasi |
blame_frame.offset |
INT64 | Offset byte ke image biner yang berisi kode Tidak disetel untuk pengecualian Java |
blame_frame.address |
INT64 | Alamat dalam image biner yang berisi kode Tidak disetel untuk frame Java |
blame_frame.library |
STRING | Nama tampilan library yang menyertakan frame |
blame_frame.owner |
STRING | Misalnya, DEVELOPER , VENDOR ,
RUNTIME , PLATFORM , atau SYSTEM |
blame_frame.blamed |
BOOLEAN | Apakah Crashlytics menentukan bahwa frame ini adalah penyebab crash atau error |
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.type |
STRING | Jenis pengecualian
(misalnya, java.lang.IllegalStateException) |
exceptions.exception_message |
STRING | Pesan yang terkait dengan pengecualian |
exceptions.nested |
BOOLEAN | True untuk semua kecuali pengecualian yang terakhir kali ditampilkan (yaitu data pertama) |
exceptions.title |
STRING | Judul thread |
exceptions.subtitle |
STRING | Subjudul thread |
exceptions.blamed |
BOOLEAN | True jika Crashlytics menentukan bahwa pengecualian menyebabkan error atau crash |
exceptions.frames |
REPEATED RECORD | Frame yang terkait dengan pengecualian |
exceptions.frames.line |
INT64 | Nomor baris file frame |
exceptions.frames.file |
STRING | Nama file frame |
exceptions.frames.symbol |
STRING | Simbol terhidrasi, atau simbol mentah jika tidak dapat dihidrasi |
exceptions.frames.offset |
INT64 | Offset byte ke image biner yang berisi kode Tidak disetel untuk pengecualian Java |
exceptions.frames.address |
INT64 | Alamat dalam image biner yang berisi kode Tidak disetel untuk frame Java |
exceptions.frames.library |
STRING | Nama tampilan library yang menyertakan frame |
exceptions.frames.owner |
STRING | Misalnya, DEVELOPER , VENDOR ,
RUNTIME , PLATFORM , atau SYSTEM |
exceptions.frames.blamed |
BOOLEAN | Apakah Crashlytics menentukan bahwa frame ini adalah penyebab crash atau error |
error |
REPEATED RECORD | (Khusus aplikasi Apple) error non-fatal |
error.queue_name |
STRING | Antrean tempat thread berjalan |
error.code |
INT64 | Kode error yang terkait dengan NSError yang dicatat khusus pada aplikasi |
error.title |
STRING | Judul thread |
error.subtitle |
STRING | Subjudul thread |
error.blamed |
BOOLEAN | Apakah Crashlytics menentukan bahwa frame ini adalah penyebab error |
error.frames |
REPEATED RECORD | Frame stacktrace |
error.frames.line |
INT64 | Nomor baris file frame |
error.frames.file |
STRING | Nama file frame |
error.frames.symbol |
STRING | Simbol terhidrasi, atau simbol mentah jika tidak dapat dihidrasi |
error.frames.offset |
INT64 | Offset byte ke image biner yang berisi kode |
error.frames.address |
INT64 | Alamat dalam image biner yang berisi kode |
error.frames.library |
STRING | Nama tampilan library yang menyertakan frame |
error.frames.owner |
STRING | Misalnya, DEVELOPER , VENDOR ,
RUNTIME , PLATFORM , atau SYSTEM |
error.frames.blamed |
BOOLEAN | Apakah Crashlytics menentukan bahwa frame ini adalah penyebab error |
threads |
REPEATED RECORD | Thread yang ada pada saat peristiwa |
threads.crashed |
BOOLEAN | Apakah thread error |
threads.thread_name |
STRING | Nama thread |
threads.queue_name |
STRING | (Khusus aplikasi Apple) Antrean tempat thread berjalan |
threads.signal_name |
STRING | Nama sinyal yang menyebabkan aplikasi error, hanya ada di thread native yang error |
threads.signal_code |
STRING | Kode sinyal yang menyebabkan aplikasi error; hanya ada di thread native yang error |
threads.crash_address |
INT64 | Alamat sinyal yang menyebabkan aplikasi error; hanya ada di thread native yang error |
threads.code |
INT64 | (Khusus aplikasi Apple) Kode error NSError yang dicatat khusus pada aplikasi |
threads.title |
STRING | Judul thread |
threads.subtitle |
STRING | Subjudul thread |
threads.blamed |
BOOLEAN | Apakah Crashlytics menentukan bahwa frame ini adalah penyebab crash atau error |
threads.frames |
REPEATED RECORD | Frame thread |
threads.frames.line |
INT64 | Nomor baris file frame |
threads.frames.file |
STRING | Nama file frame |
threads.frames.symbol |
STRING | Simbol terhidrasi, atau simbol mentah jika tidak terhidrasi |
threads.frames.offset |
INT64 | Offset byte ke image biner yang berisi kode |
threads.frames.address |
INT64 | Alamat dalam image biner yang berisi kode |
threads.frames.library |
STRING | Nama tampilan library yang menyertakan frame |
threads.frames.owner |
STRING | Misalnya, DEVELOPER , VENDOR ,
RUNTIME , PLATFORM , atau SYSTEM |
threads.frames.blamed |
BOOLEAN | Apakah Crashlytics menentukan bahwa frame ini adalah penyebab error |
unity_metadata.unity_version |
STRING | Versi Unity yang berjalan di perangkat ini |
unity_metadata.debug_build |
BOOLEAN | Jika ini adalah build debug |
unity_metadata.processor_type |
STRING | Jenis prosesor |
unity_metadata.processor_count |
INT64 | Jumlah prosesor (core) |
unity_metadata.processor_frequency_mhz |
INT64 | Frekuensi prosesor dalam MHz |
unity_metadata.system_memory_size_mb |
INT64 | Ukuran memori sistem dalam Mb |
unity_metadata.graphics_memory_size_mb |
INT64 | Memori grafis dalam MB |
unity_metadata.graphics_device_id |
INT64 | ID perangkat grafis |
unity_metadata.graphics_device_vendor_id |
INT64 | ID vendor prosesor grafis |
unity_metadata.graphics_device_name |
STRING | Nama perangkat grafis |
unity_metadata.graphics_device_vendor |
STRING | Vendor perangkat grafis |
unity_metadata.graphics_device_version |
STRING | Versi perangkat grafis |
unity_metadata.graphics_device_type |
STRING | Jenis perangkat grafis |
unity_metadata.graphics_shader_level |
INT64 | Tingkat shader grafis |
unity_metadata.graphics_render_target_count |
INT64 | Jumlah target rendering grafis |
unity_metadata.graphics_copy_texture_support |
STRING | Dukungan untuk menyalin tekstur grafis seperti yang dijelaskan dalam Unity API |
unity_metadata.graphics_max_texture_size |
INT64 | Ukuran maksimum yang didedikasikan untuk rendering tekstur |
unity_metadata.screen_size_px |
STRING | Ukuran layar dalam piksel, yang diformat sebagai lebar x tinggi |
unity_metadata.screen_resolution_dpi |
STRING | DPI layar sebagai angka floating point |
unity_metadata.screen_refresh_rate_hz |
INT64 | Kecepatan refresh layar dalam Hz |
Memvisualisasikan data Crashlytics yang diekspor dengan Data Studio
Google Data 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 Data Studio, lihat panduan memulai Data Studio, Selamat datang di Data Studio.
Menggunakan template laporan Crashlytics
Data 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 Data Studio. Anda dapat menggunakan contoh ini sebagai template untuk membuat laporan dan visualisasi baru dengan cepat berdasarkan data error mentah aplikasi Anda sendiri:
Klik Use Template di sudut kanan atas.
Di dropdown New Data Source, pilih Create New Data Source.
Klik Select pada kartu BigQuery.
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.
Pada Configuration, setel Crashlytics Template level ke Default.
Klik Connect untuk membuat sumber data baru.
Klik Add to Report untuk kembali ke template Crashlytics.
Terakhir, klik Create Report untuk membuat salinan template Dasbor Data Studio Crashlytics Anda.
Mengupgrade ke infrastruktur ekspor baru
Pada pertengahan Oktober 2024, Crashlytics meluncurkan infrastruktur baru untuk mengekspor data Crashlytics ke BigQuery. Untuk saat ini, upgrade ke infrastruktur baru ini bersifat opsional.
Infrastruktur baru ini mendukung lokasi set data Crashlytics di luar Amerika Serikat.
Jika Anda mengaktifkan ekspor sebelum pertengahan Oktober 2024, Anda kini dapat secara opsional mengubah lokasi untuk ekspor data ke lokasi set data yang didukung BigQuery.
Jika Anda mengaktifkan ekspor pada pertengahan Oktober 2024 atau yang lebih baru, Anda dapat memilih lokasi set data yang didukung BigQuery selama penyiapan.
Perbedaan lain pada infrastruktur baru ini adalah infrastruktur tersebut tidak mendukung pengisian ulang data dari sebelum Anda mengaktifkan ekspor. (Dengan infrastruktur lama, Anda dapat mengisi ulang hingga 30 hari sebelum tanggal pengaktifan.) Infrastruktur baru mendukung pengisian ulang hingga 30 hari terakhir atau untuk tanggal terbaru saat Anda mengaktifkan ekspor ke BigQuery (mana saja yang terbaru).
Prasyarat untuk melakukan upgrade
Sebelum mengupgrade ke infrastruktur baru, pastikan Anda memenuhi prasyarat berikut: Tabel BigQuery batch saat ini memiliki ID yang cocok dengan ID paket atau nama paket yang ditetapkan untuk Aplikasi Firebase Anda yang terdaftar.
Contoh:
Jika memiliki tabel BigQuery bernama
com_yourcompany_yourproject_IOS
, Anda harus memiliki Aplikasi iOS+ Firebase yang terdaftar di project Firebase dengan ID paketcom.yourcompany.yourproject
.Jika memiliki tabel BigQuery bernama
com_yourcompany_yourproject_ANDROID
, Anda harus memiliki Aplikasi Android Firebase yang terdaftar di project Firebase dengan nama paketcom.yourcompany.yourproject
.
Berikut cara menemukan semua Aplikasi Firebase yang terdaftar di project Firebase Anda:
Di Firebase console, buka Project settings.
Scroll ke bawah ke kartu Your apps, lalu klik Aplikasi Firebase yang ingin dilihat informasi aplikasinya, termasuk ID-nya.
Infrastruktur ekspor baru akan mengekspor data setiap aplikasi berdasarkan nama paket atau ID paket yang ditetapkan untuk Aplikasi Firebase yang terdaftar. Agar tidak mengganggu alur kerja BigQuery, pastikan tabel batch saat ini sudah memiliki nama yang benar sehingga infrastruktur baru dapat menambahkan semua data baru ke tabel yang ada. Jika Anda memiliki nama tabel batch yang tidak cocok dengan Aplikasi Firebase terdaftar, tetapi Anda masih ingin mengupgrade, hubungi Dukungan Firebase.
Cara mengupgrade ke infrastruktur baru
Jika sudah mengaktifkan ekspor, Anda dapat mengupgrade ke infrastruktur baru cukup dengan menonaktifkan ekspor data Crashlytics, lalu mengaktifkannya lagi di Firebase console.
Berikut adalah langkah-langkah detailnya:
Di Firebase console, buka tab Integrations.
Di kartu BigQuery, klik Manage.
Nonaktifkan penggeser Crashlytics untuk menonaktifkan ekspor. Jika diminta, pastikan bahwa Anda ingin ekspor data dihentikan.
Segera aktifkan lagi penggeser Crashlytics untuk mengaktifkan kembali ekspor. Saat diminta, pastikan bahwa Anda ingin mengekspor data.
Ekspor data Crashlytics Anda ke BigQuery kini menggunakan infrastruktur ekspor baru.