Możesz wyeksportować dane z Crashlytics do BigQuery na potrzeby dalszej analizy. BigQuery umożliwia analizowanie danych za pomocą BigQuery SQL, eksportowanie ich do innego dostawcy chmury oraz używanie ich do wizualizacji i paneli niestandardowych w Studiu danych Google.
Włącz funkcję eksportowania BigQuery
- Otwórz stronę Integracje w konsoli Firebase.
- Na karcie BigQuery kliknij Połącz.
- Aby włączyć BigQuery, postępuj zgodnie z instrukcjami wyświetlanymi na ekranie.
Po połączeniu projektu z BigQuery:
- Firebase konfiguruje codzienne synchronizacje danych z projektu Firebase w BigQuery.
- Domyślnie wszystkie aplikacje w projekcie są połączone z BigQuery. Wszystkie aplikacje, które dodasz później do projektu, zostaną automatycznie połączone z BigQuery. Możesz określić, które aplikacje mają wysyłać dane.
- Firebase eksportuje kopię istniejących danych do BigQuery. Dla każdej połączonej aplikacji obejmuje to tabelę wsadową zawierającą dane z codziennej synchronizacji.
- Jeśli włączysz eksport strumieniowy BigQuery z Crashlytics, wszystkie połączone aplikacje będą też miały tabelę w czasie rzeczywistym zawierającą stale aktualizowane dane.
Aby wyłączyć eksportowanie danych do BigQuery, odłącz projekt w konsoli Firebase.
Jakie dane są eksportowane do BigQuery?
Dane Firebase Crashlytics są eksportowane do zbioru danych BigQuery o nazwie firebase_crashlytics
. Domyślnie poszczególne tabele dla każdej aplikacji w projekcie są tworzone w zbiorze danych Crashlytics. Firebase nadaje nazwy tabelom na podstawie identyfikatora pakietu aplikacji, przy czym kropki są konwertowane na podkreślenia i dodają nazwę platformy na końcu.
Na przykład dane aplikacji o identyfikatorze com.google.test
znajdą się w tabeli o nazwie com_google_test_ANDROID
. Ta tabela zbiorcza jest aktualizowana raz dziennie. Jeśli włączysz eksport strumieniowy BigQuery z Crashlytics, dane z Firebase Crashlytics będą też przesyłane w czasie rzeczywistym do usługi com_google_test_ANDROID_REALTIME
.
Każdy wiersz w tabeli odpowiada zdarzeniu, które wystąpiło w aplikacji, m.in. awarii, błędów niekrytycznych i błędów ANR.
Włącz eksport strumieniowy BigQuery z Crashlytics
Dane z Crashlytics możesz przesyłać strumieniowo w czasie rzeczywistym dzięki funkcji BigQueryStreaming. Możesz go używać do dowolnych celów, które wymagają aktualnych danych, np. do prezentowania informacji w panelu transmisji na żywo, obserwowania wdrożenia na żywo lub monitorowania problemów z aplikacją, które wywołują alerty i niestandardowe przepływy pracy.
Eksport strumieniowy BigQuery z usługi Crashlytics nie jest dostępny w przypadku piaskownicy BigQuery.
Gdy włączysz eksport strumieniowy BigQuery w Crashlytics, oprócz tabeli wsadowej będziesz mieć tabelę czasu rzeczywistego. Oto różnice między tabelami:
Tabela zbiorcza | Tabela czasu rzeczywistego |
---|---|
|
|
Tabela wsadowa doskonale nadaje się do analizy długoterminowej i identyfikowania trendów na przestrzeni czasu, ponieważ trwale przechowujemy zdarzenia przed ich zapisaniem i można je uzupełniać w tabeli przez maksymalnie 30 dni. Dane, które zapisujemy w Twojej tabeli w czasie rzeczywistym, są natychmiast zapisywane w BigQuery, dzięki czemu doskonale sprawdzają się w przypadku aktywnych paneli i alertów niestandardowych. Te 2 tabele można połączyć za pomocą zapytania łączenia, aby korzystać z zalet obu. Zobacz zapytanie Przykład 9 poniżej.
Domyślnie czas wygaśnięcia partycji w tabeli czasu rzeczywistego to 30 dni. Aby dowiedzieć się, jak to zmienić, przeczytaj sekcję o aktualizowaniu daty wygaśnięcia partycji.
Włącz strumieniowe przesyłanie danych BigQuery w Crashlytics
Aby włączyć strumieniowe przesyłanie danych, otwórz sekcję Crashlytics na stronie Integracje z BigQuery i zaznacz pole wyboru Uwzględnij strumieniowanie.
Szablon Studia danych
Aby włączyć w szablonie Studia danych dane w czasie rzeczywistym, postępuj zgodnie z instrukcjami podanymi w artykule Wizualizacja wyeksportowanych danych z Crashlytics przy użyciu Studia danych.
Widoki
Przykładowe zapytania możesz przekształcić w widoki, korzystając z interfejsu BigQuery. Szczegółowe instrukcje znajdziesz w artykule Tworzenie widoków.
Co można zrobić z wyeksportowanymi danymi?
Eksporty BigQuery zawierają nieprzetworzone dane o awariach, w tym typ urządzenia, system operacyjny, wyjątki (aplikacje na Androida) i błędy (aplikacje Apple) oraz logi Crashlytics, a także inne dane.
Praca z danymi Firebase Crashlytics w BigQuery
Poniższe przykłady pokazują zapytania, które można wykonywać na danych Crashlytics. Te zapytania generują raporty, które nie są dostępne w panelu Crashlytics.
Przykłady zapytań Crashlytics
Podane niżej przykłady pokazują, jak generować raporty, które łączą dane o zdarzeniach awarii w bardziej przystępny sposób.
Przykład 1. Awarie według dnia
Po naprawieniu jak największej liczby błędów jeden z głównych programistów sądzi, że jej zespół jest w końcu gotowy do opublikowania nowej aplikacji do udostępniania zdjęć. Zanim to zrobi, chce sprawdzić liczbę awarii dziennie w poprzednim miesiącu, aby mieć pewność, że błąd w wyniku błędu poprawił stabilność aplikacji.
SELECT COUNT(DISTINCT event_id) AS number_of_crashes, FORMAT_TIMESTAMP("%F", event_timestamp) AS date_of_crashes FROM `projectId.firebase_crashlytics.package_name_ANDROID` GROUP BY date_of_crashes ORDER BY date_of_crashes DESC LIMIT 30;
Przykład 2. Wyszukiwanie najczęstszych awarii
Aby odpowiednio nadać priorytet planom produkcyjnym, kierownik projektu zastanawia się, jak wskazać 10 najczęstszych awarii w jego usłudze. Tworzą zapytanie, które wskazuje odpowiednie punkty danych:
SELECT DISTINCT issue_id, COUNT(DISTINCT event_id) AS number_of_crashes, COUNT(DISTINCT installation_uuid) AS number_of_impacted_user, blame_frame.file, blame_frame.line FROM `projectId.firebase_crashlytics.package_name_ANDROID` WHERE event_timestamp >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(),INTERVAL 168 HOUR) AND event_timestamp < CURRENT_TIMESTAMP() GROUP BY issue_id, blame_frame.file, blame_frame.line ORDER BY number_of_crashes DESC LIMIT 10;
Przykład 3. 10 urządzeń, na których najczęściej występują awarie
Jesień to nowy sezon na telefony! Deweloper wie, że to oznacza również nowy sezon problemów z konkretnymi urządzeniami. Aby wyprzedzić rosnące problemy ze zgodnością, zespół utworzył zapytanie identyfikujące 10 urządzeń, na których w ciągu ostatniego tygodnia wystąpiły najwięcej awarii:
SELECT device.model, COUNT(DISTINCT event_id) AS number_of_crashes FROM `projectId.firebase_crashlytics.package_name_ANDROID` WHERE event_timestamp >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 168 HOUR) AND event_timestamp < CURRENT_TIMESTAMP() GROUP BY device.model ORDER BY number_of_crashes DESC LIMIT 10;
Przykład 4. Filtrowanie według klucza niestandardowego
Deweloper chce wiedzieć, na którym poziomie w grze występuje najwięcej awarii. Aby ułatwić im śledzenie tych statystyk, ustawili niestandardowy klucz Crashlytics current_level
i aktualizowali go za każdym razem, gdy użytkownik osiągnie nowy poziom.
Objective-C
CrashlyticsKit setIntValue:3 forKey:@"current_level";
Swift
Crashlytics.sharedInstance().setIntValue(3, forKey: "current_level");
Java
Crashlytics.setInt("current_level", 3);
Mając ten klucz w eksporcie BigQuery, tworzy zapytanie, które raportuje rozkład wartości current_level
powiązanych z każdym zdarzeniem awarii:
SELECT COUNT(DISTINCT event_id) AS num_of_crashes, value FROM `projectId.firebase_crashlytics.package_name_ANDROID` UNNEST(custom_keys) WHERE key = "current_level" GROUP BY key, value ORDER BY num_of_crashes DESC
Przykład 5: wyodrębnianie identyfikatora użytkownika
Deweloper ma aplikację w ramach wcześniejszego dostępu. Większość użytkowników ją uwielbia, ale u 3 użytkowników wystąpiło niezwykła liczba awarii. Aby dotrzeć do sedna problemu, zespół tworzy zapytanie, które pobiera wszystkie zdarzenia awarii tych użytkowników, korzystając z ich identyfikatorów:
SELECT * FROM `projectId.firebase_crashlytics.package_name_ANDROID` WHERE user.id IN ("userid1", "userid2", "userid3") ORDER BY user.id
Przykład 6. Znajdź wszystkich użytkowników, u których występuje określony problem
Deweloper opublikował krytyczny błąd grupie beta-testerów. Na podstawie zapytania z przykładu 2 powyżej udało nam się zidentyfikować identyfikator konkretnego problemu. Teraz chce uruchomić zapytanie, aby wyodrębnić listę użytkowników aplikacji, których dotyczyła ta awaria:
SELECT user.id as user_id FROM `projectId.firebase_crashlytics.package_name_ANDROID` WHERE issue_id = "YOUR_ISSUE_ID" AND application.display_version = "" AND user.id != "" ORDER BY user.id;
Przykład 7. Liczba użytkowników, których dotyczył błąd, z podziałem na kraje
Teraz podczas wdrażania nowej wersji zespół wykrył błąd krytyczny. Udało im się zidentyfikować konkretny identyfikator problemu z awarią, korzystając z zapytania z przykładu 2 powyżej. Zespół chce sprawdzić, czy awaria objął użytkowników w różnych krajach na całym świecie.
Aby utworzyć to zapytanie, zespół musi:
Włącz eksporty BigQuery dla Google Analytics. Zobacz Eksportowanie danych projektu do BigQuery.
Zaktualizuj aplikację tak, aby przekazywała identyfikator użytkownika zarówno do pakietu SDK Google Analytics, jak i do Crashlytics SDK.
Objective-C
CrashlyticsKit setUserIdentifier:@"123456789"; FIRAnalytics setUserID:@"12345678 9";
Swift
Crashlytics.sharedInstance().setUserIdentifier("123456789"); Analytics.setUserID("123456789");
Java
Crashlytics.setUserIdentifier("123456789"); mFirebaseAnalytics.setUserId("123456789");
Utwórz zapytanie, które wykorzysta pole identyfikatora użytkownika, aby złączyć zdarzenia w zbiorze danych BigQuery w Google Analytics z awariami w zbiorze danych BigQuery Crashlytics:
SELECT DISTINCT c.issue_id, a.geo.country, COUNT(DISTINCT c.user.id) as num_users_impacted FROM `projectId.firebase_crashlytics.package_name_ANDROID` c INNER JOIN `projectId.analytics_YOUR_TABLE.events_*` a on c.user.id = a.user_id WHERE c.issue_id = "YOUR_ISSUE_ID" AND a._TABLE_SUFFIX BETWEEN '20190101' AND '20200101' GROUP BY c.issue_id, a.geo.country, c.user.id
Przykład 8. 5 najważniejszych problemów dzisiaj
Wymaga włączenia eksportu strumieniowego BigQuery do Crashlytics
SELECT issue_id, COUNT(DISTINCT event_id) AS events FROM `your_project.firebase_crashlytics.package_name_ANDROID_REALTIME` WHERE DATE(event_timestamp) = CURRENT_DATE() GROUP BY issue_id ORDER BY events DESC LIMIT 5;
Przykład 9. 5 najważniejszych problemów od DATE, w tym dzisiaj
Wymaga włączenia eksportu strumieniowego BigQuery do Crashlytics.
W tym przykładzie połączyliśmy tabele wsadowe i tabele czasu rzeczywistego, aby dodać informacje w czasie rzeczywistym do rzetelnych danych wsadowych. event_id
jest kluczem podstawowym, więc możemy za pomocą DISTINCT event_id
usunąć duplikaty typowych zdarzeń z tych 2 tabel.
SELECT issue_id, COUNT(DISTINCT event_id) AS events FROM ( SELECT issue_id, event_id, event_timestamp FROM `your_project.firebase_crashlytics.package_name_ANDROID_REALTIME` UNION ALL SELECT issue_id, event_id, event_timestamp FROM `your_project.firebase_crashlytics.package_name_ANDROID`) WHERE event_timestamp >= "2020-01-13" GROUP BY issue_id ORDER BY events DESC LIMIT 5;
Schemat Firebase Crashlytics w BigQuery
Gdy połączysz Crashlytics z BigQuery, Firebase eksportuje ostatnie zdarzenia (awarie, błędy niekrytyczne i błędy ANR), w tym zdarzenia do 2 dni przed połączeniem, umożliwiając uzupełnienie do 30 dni.
Od tego momentu, dopóki nie wyłączysz połączenia, Firebase codziennie eksportuje zdarzenia z Crashlytics. Po każdym eksporcie dane mogą być dostępne w BigQuery po kilku minutach.
Zbiory danych
Firebase Crashlytics tworzy w BigQuery nowy zbiór danych dla danych z Crashlytics. Zbiór danych obejmuje cały projekt, nawet jeśli obejmuje on wiele aplikacji.
Tabele
Firebase Crashlytics tworzy w zbiorze danych tabelę dla każdej aplikacji w projekcie, chyba że masz wyłączoną opcję eksportowania danych z tej aplikacji. Firebase nadaje nazwy tabelom na podstawie identyfikatora pakietu aplikacji, z kropkami przekształcanymi na podkreślenia i dodaje na końcu nazwę platformy.
Na przykład dane aplikacji na Androida o identyfikatorze com.google.test
znajdą się w tabeli o nazwie com_google_test_ANDROID
, a dane w czasie rzeczywistym (jeśli ta opcja jest włączona) – w tabeli o nazwie com_google_test_ANDROID_REALTIME
Tabele zawierają standardowy zestaw danych z Crashlytics oraz wszelkie niestandardowe klucze Crashlytics zdefiniowane przez deweloperów.
Wiersze
Każdy wiersz w tabeli oznacza błąd napotkany przez aplikację.
Kolumny
Kolumny w tabeli są identyczne w przypadku awarii, błędów niekrytycznych i błędów ANR. Jeśli włączony jest eksport strumieniowy BigQuery w Crashlytics, tabela czasu rzeczywistego będzie zawierać te same kolumny co tabela wsadowa. Poniżej wymienione są kolumny eksportowane.
Bez zrzutów stosu
Kolumny występujące w wierszach reprezentujących zdarzenia bez zrzutów stosu.
Nazwa pola | Typ danych | Opis |
---|---|---|
platform | CIĄG ZNAKÓW | W aplikacjach Apple lub na Androida |
identyfikator_pakietu | CIĄG ZNAKÓW | Identyfikator pakietu, np. com.google.gmail |
identyfikator_zdarzenia | CIĄG ZNAKÓW | Unikalny identyfikator wydarzenia. |
jest_krytyczny | WARTOŚĆ LOGICZNA | czy aplikacja uległa awarii; |
typ_błędu | CIĄG ZNAKÓW | Typ błędu zdarzenia (FATAL, NON_FATAL, ANR) |
identyfikator_problemu | CIĄG ZNAKÓW | Problem związany ze zdarzeniem |
identyfikator_wersji | CIĄG ZNAKÓW | Wariant problemu powiązany z tym zdarzeniem. Pamiętaj, że nie wszystkie zdarzenia mają powiązany wariant problemu. |
event_timestamp | SYGNATURA CZASOWA | Termin wystąpienia zdarzenia |
device | REKORD | Urządzenie, na którym wystąpiło zdarzenie. |
device.producent | CIĄG ZNAKÓW | Producent urządzenia |
urządzenie.model | CIĄG ZNAKÓW | Model urządzenia |
device.architecture, | CIĄG ZNAKÓW | X86_32, X86_64, ARMV7, ARM64, ARMV7S lub ARMV7K |
pamięć | REKORD | Stan pamięci urządzenia |
pamięć.używana | INT64 | Wykorzystane bajty pamięci |
Pamięć.wolna | INT64 | Pozostało bajtów pamięci |
magazynowanie | REKORD | Pamięć trwała urządzenia |
pamięć.używana | INT64 | Zajęte bajty miejsca na dane |
Storage.free | INT64 | Pozostało bajtów miejsca na dane |
system_operacyjny | REKORD | Informacje o systemie operacyjnym na urządzeniu |
system_operacyjny.wersja_wyświetlania | CIĄG ZNAKÓW | Wersja systemu operacyjnego zainstalowanego na urządzeniu. |
operating_system.name | CIĄG ZNAKÓW | Nazwa systemu operacyjnego zainstalowanego na urządzeniu. |
system_operacyjny.stan_modyfikacji | CIĄG ZNAKÓW | Określa, czy urządzenie zostało zmodyfikowane, na przykład po jailbreaku lub z dostępem do roota (ZMODYFIKOWANE lub BEZMODYFIKOWANE) |
system_operacyjny.typ | CIĄG ZNAKÓW | Typ systemu operacyjnego działającego na urządzeniu (np. IOS, MACOS); dostępny tylko w przypadku aplikacji na platformach Apple |
system_operacyjny.typ_urządzenia | CIĄG ZNAKÓW | Typ urządzenia (np. MOBILNY, TABLET, TV itp.); nazywany też „kategorią urządzenia” |
aplikacja | REKORD | Aplikacja, która wygenerowała wydarzenie |
aplikacja.kompilacja_wersji | CIĄG ZNAKÓW | Wersja kompilacji aplikacji |
aplikacja.wyświetlana_wersja | CIĄG ZNAKÓW | |
użytkownik | REKORD | Opcjonalnie: zbierane informacje o użytkowniku aplikacji |
user.name | CIĄG ZNAKÓW | Opcjonalnie: nazwa użytkownika |
e-mail.uzytkownika | CIĄG ZNAKÓW | Opcjonalnie: adres e-mail użytkownika |
user.id | CIĄG ZNAKÓW | Opcjonalnie: identyfikator aplikacji powiązany z użytkownikiem |
klucze_niestandardowe | POWTÓRZONE REKORD | Pary klucz-wartość zdefiniowane przez dewelopera |
klucze_niestandardowe.klucz | CIĄG ZNAKÓW | Klucz zdefiniowany przez dewelopera |
klucz_niestandardowy.wartość | CIĄG ZNAKÓW | wartość zdefiniowaną przez dewelopera; |
identyfikator_instalacyjny | CIĄG ZNAKÓW | Identyfikator, który identyfikuje unikalną instalację aplikacji i urządzenia |
Crashlytics_sdk_versions | CIĄG ZNAKÓW | Wersja pakietu SDK Crashlytics, która wygenerowała zdarzenie. |
app_orientation, | CIĄG ZNAKÓW | PORTRAIT, LANDSCAPE, FACE_UP lub FACE_DOWN |
orientacja_urządzenia | CIĄG ZNAKÓW | PORTRAIT, LANDSCAPE, FACE_UP lub FACE_DOWN |
stan_procesu | CIĄG ZNAKÓW | WPROWADZENIE lub PIERWSZE KROKI |
logi | POWTÓRZONE REKORD | Komunikaty logu z sygnaturami czasowymi wygenerowane przez rejestrator Crashlytics (jeśli są włączone) |
logi.timestamp | SYGNATURA CZASOWA | data utworzenia dziennika. |
logi.message | CIĄG ZNAKÓW | Zapisany komunikat |
menu nawigacyjne | POWTÓRZONE REKORD | Sygnatura czasowa menu nawigacyjnego Google Analytics, jeśli jest włączona |
menu nawigacyjne.sygnatura czasowa | SYGNATURA CZASOWA | Sygnatura czasowa związana z menu nawigacyjnym |
breadcrumbs.name | CIĄG ZNAKÓW | Nazwa powiązana z menu nawigacyjnym |
menu nawigacyjne.params | POWTÓRZONE REKORD | Parametry powiązane z menu nawigacyjnym |
menu nawigacyjne.params.key | CIĄG ZNAKÓW | Klucz parametru powiązany z menu nawigacyjnym |
menu nawigacyjne.params.value | CIĄG ZNAKÓW | Wartość parametru powiązana z menu nawigacyjnym. |
obwinianie_ramki | REKORD | Ramka zidentyfikowana jako główna przyczyna awarii lub błędu |
blame_frame.line | INT64 | Numer wiersza pliku ramki |
blame_frame.file | CIĄG ZNAKÓW | Nazwa pliku ramki |
blame_frame.symbol | CIĄG ZNAKÓW | Symbol nawodnienia lub symbol surowego organizmu, jeśli nie jest nawodniony |
blame_frame.offset | INT64 | Przesunięcie w bajtach do obrazu binarnego zawierającego kod, wyłączone dla wyjątków Java |
blame_frame.address | INT64 | Adres w obrazie binarnym zawierającym kod, nieskonfigurowany w przypadku ramek Java |
blame_frame.library | CIĄG ZNAKÓW | Wyświetlana nazwa biblioteki, która zawiera ramkę |
blame_frame.owner | CIĄG ZNAKÓW | DEWELOPER, VENDOR, RUNTIME, PLATFORM lub SYSTEM |
blame_frame.blamed | WARTOŚĆ LOGICZNA | Czy analiza Crashlytics wykryła, że ta ramka jest przyczyną awarii lub błędu |
wyjątki | POWTÓRZONE REKORD | Tylko Android: wyjątki, które wystąpiły podczas tego zdarzenia. Zagnieżdżone wyjątki są przedstawiane w odwrotnej kolejności chronologicznej (odczyt: ostatni rekord jest pierwszym zgłoszonym wyjątkiem) |
wyjątek.typ | CIĄG ZNAKÓW | Typ wyjątku, np. java.lang.IllegalStateException |
exception.exception_message. | CIĄG ZNAKÓW | Wiadomość powiązana z wyjątkiem |
wyjątki.zagnieżdżone | WARTOŚĆ LOGICZNA | Prawda w przypadku wszystkich oprócz ostatniego wyjątku (tj. pierwszego rekordu) |
wyjątki.tytuł | CIĄG ZNAKÓW | Tytuł wątku |
wyjątki.napis | CIĄG ZNAKÓW | podtytuł wątku; |
wyjątki.blamed | WARTOŚĆ LOGICZNA | Prawda, jeśli Crashlytics ustali, że wyjątek jest odpowiedzialny za błąd lub awarię |
wyjątki.ramki | POWTÓRZONE REKORD | Ramki powiązane z wyjątkiem |
ecommerce.frames.line | INT64 | Numer wiersza pliku ramki |
wyjątek.frames.file | CIĄG ZNAKÓW | Nazwa pliku ramki |
ecommerce.frames.symbol | CIĄG ZNAKÓW | Symbol nawodnienia lub symbol surowego organizmu, jeśli nie jest nawodniony |
ecommerce.frames.offset | INT64 | Przesunięcie w bajtach do obrazu binarnego zawierającego kod, wyłączone dla wyjątków Java |
wyjątki.ramki.adres | INT64 | Adres w obrazie binarnym zawierającym kod, nieskonfigurowany w przypadku ramek Java |
ecommerce.frames.library | CIĄG ZNAKÓW | Wyświetlana nazwa biblioteki, która zawiera ramkę |
ecommerce.frames.owner | CIĄG ZNAKÓW | DEWELOPER, VENDOR, RUNTIME, PLATFORM lub SYSTEM |
wyjątki.frames.blamed | WARTOŚĆ LOGICZNA | Czy analiza Crashlytics wykryła, że ta ramka jest przyczyną awarii lub błędu |
error | POWTÓRZONE REKORD | Tylko aplikacje Apple: błędy niekrytyczne |
error.queue_name [nazwa_kolejki] | CIĄG ZNAKÓW | Kolejka, w której uruchomiono wątek |
kod_błędu | INT64 | Kod błędu powiązany z niestandardowym rejestrowanym błędem NSError aplikacji |
błąd.tytuł | CIĄG ZNAKÓW | Tytuł wątku |
błąd.podtytuł | CIĄG ZNAKÓW | podtytuł wątku; |
error.blamed | WARTOŚĆ LOGICZNA | Czy analiza Crashlytics wykryła, że ta ramka jest przyczyną błędu, |
error.frames | POWTÓRZONE REKORD | Ramki zrzutu stosu |
error.frames.line | INT64 | Numer wiersza pliku ramki |
error.frames.file | CIĄG ZNAKÓW | Nazwa pliku ramki |
error.frames.symbol | CIĄG ZNAKÓW | Symbol nawodnienia lub symbol surowego organizmu, jeśli nie jest nawodniony |
error.frames.offset | INT64 | Przesunięcie bajtów w obrazie binarnym, który zawiera kod |
error.frames.address | INT64 | Adres obrazu binarnego, który zawiera kod |
error.frames.library | CIĄG ZNAKÓW | Wyświetlana nazwa biblioteki, która zawiera ramkę |
error.frames.owner | CIĄG ZNAKÓW | DEWELOPER, VENDOR, RUNTIME, PLATFORM lub SYSTEM |
error.frames.blamed | WARTOŚĆ LOGICZNA | Czy analiza Crashlytics wykryła, że ta ramka jest przyczyną błędu, |
wątki | POWTÓRZONE REKORD | Wątki obecne w momencie wystąpienia zdarzenia |
threads.crashed; | WARTOŚĆ LOGICZNA | czy wątek uległ awarii; |
threads.thread_name | CIĄG ZNAKÓW | nazwa wątku; |
threads.queue_name | CIĄG ZNAKÓW | Tylko aplikacje Apple: kolejka, w której uruchomiono wątek |
threads.signal_name | CIĄG ZNAKÓW | Nazwa sygnału, który spowodował awarię aplikacji, widoczny tylko w przypadku awarii |
threads.signal_code | CIĄG ZNAKÓW | Kod sygnału, który spowodował awarię aplikacji. Występuje tylko w przypadku awarii |
threads.crash_address | INT64 | Adres sygnału, który spowodował awarię aplikacji. Widoczny tylko w przypadku awarii |
threads.code | INT64 | Tylko aplikacje Apple: kod błędu niestandardowego zarejestrowanego błędu NSError |
threads.title | CIĄG ZNAKÓW | Tytuł wątku |
threads.podtytuł | CIĄG ZNAKÓW | podtytuł wątku; |
threads.blamed | WARTOŚĆ LOGICZNA | Czy analiza Crashlytics wykryła, że ta ramka jest przyczyną awarii lub błędu |
threads.frames | POWTÓRZONE REKORD | ramki wątku. |
threads.frames.line | INT64 | Numer wiersza pliku ramki |
threads.frames.file | CIĄG ZNAKÓW | Nazwa pliku ramki |
threads.frames.symbol | CIĄG ZNAKÓW | Symbol nawodnienia lub surowy symbol, jeśli nie jest uwodniony |
threads.frames.offset | INT64 | Przesunięcie bajtów w obrazie binarnym, który zawiera kod |
threads.frames.address | INT64 | Adres obrazu binarnego, który zawiera kod |
threads.frames.library | CIĄG ZNAKÓW | Wyświetlana nazwa biblioteki, która zawiera ramkę |
threads.frames.owner | CIĄG ZNAKÓW | DEWELOPER, VENDOR, RUNTIME, PLATFORM lub SYSTEM |
threads.frames.blamed | WARTOŚĆ LOGICZNA | Czy analiza Crashlytics wykryła, że ta ramka jest przyczyną błędu, |
unity_metadata.unity_version | CIĄG ZNAKÓW | Wersja Unity działająca na tym urządzeniu |
unity_metadata.debug_build | WARTOŚĆ LOGICZNA | Jeśli jest to kompilacja do debugowania |
unity_metadata.processor_type | CIĄG ZNAKÓW | Typ procesora |
unity_metadata.processor_count | INT64 | Liczba procesorów (rdzeni) |
unity_metadata.processor_frequency_mhz | INT64 | Częstotliwość procesorów w MHz |
jednolita_metadane.rozmiar_pamięci_systemu_mb | INT64 | Rozmiar pamięci systemu w MB |
jednolita_metadane.rozmiar_pamięci_mb | INT64 | Pamięć karty graficznej w MB |
Unity_metadata.graphics_device_id | INT64 | Identyfikator urządzenia graficznego |
unity_metadata.graphics_identyfikator_dostawcy_urządzenia | INT64 | Identyfikator dostawcy procesora graficznego |
unity_metadata.graphics_device_name [nazwa_urządzenia] | CIĄG ZNAKÓW | Nazwa urządzenia graficznego |
unity_metadata.graphics_dostawca_urządzenia | CIĄG ZNAKÓW | Dostawca urządzenia graficznego |
Unity_metadata.graphics_device_version | CIĄG ZNAKÓW | Wersja urządzenia graficznego. |
Unity_metadata.graphics_device_type | CIĄG ZNAKÓW | Typ urządzenia graficznego. |
poziom_jednostki_metadanych.grafika_shader | INT64 | Poziom cieniowania grafiki |
Unity_metadata.graphics_render_target_count | INT64 | Liczba celów renderowania graficznego |
jednolita_metadane.grafika_kopia_tekstura_obsługa | CIĄG ZNAKÓW | Obsługa kopiowania tekstur graficznych zdefiniowanych w interfejsie Unity API |
unity_metadata.graphics_max_texture_size | INT64 | Maksymalny rozmiar przeznaczony do renderowania tekstury |
unity_metadata.screen_size_px | CIĄG ZNAKÓW | Rozmiar ekranu w pikselach, podany jako szerokość x wysokość. |
Unity_metadata.screen_resolution_dpi | CIĄG ZNAKÓW | Wartość DPI ekranu w postaci liczby zmiennoprzecinkowej |
jednolita_metadane.współczynnik_odświeżania_hz | INT64 | Częstotliwość odświeżania ekranu w Hz |
Wizualizacja wyeksportowanych danych Crashlytics w Studiu danych
Studio danych Google przekształca zbiory danych Crashlytics w BigQuery w raporty, które można łatwo odczytywać, udostępniać i dostosowywać do własnych potrzeb.
Więcej informacji o korzystaniu ze Studia danych znajdziesz w krótkim przewodniku po Studiu danych Witamy w Studiu danych.
Korzystanie z szablonu raportu Crashlytics
W Studiu danych znajduje się przykładowy raport na temat Crashlytics, który zawiera pełny zestaw wymiarów i danych z wyeksportowanego schematu BigQuery Crashlytics. Jeśli włączysz eksport strumieniowy BigQuery z Crashlytics, możesz wyświetlić te dane na stronie Trendy w czasie rzeczywistym w szablonie Studia danych.Możesz użyć przykładowego szablonu jako szablonu do szybkiego tworzenia nowych raportów i wizualizacji na podstawie nieprzetworzonych danych o awariach Twojej aplikacji:
- Otwórz szablon panelu Studia danych Crashlytics.
- W prawym górnym rogu kliknij Użyj szablonu.
- W menu Nowe źródło danych wybierz Utwórz nowe źródło danych.
- Na karcie BigQuery kliknij Wybierz.
- Wybierz tabelę zawierającą dane z Crashlytics, klikając Moje projekty > [nazwa-projektu] > firebase_crashlytics > [nazwa-twojej-tabeli]. Zawsze możesz wybrać tabelę wsadową. Jeśli masz włączony eksport strumieniowy BigQuery w Crashlytics, możesz zamiast niego wybrać tabelę w czasie rzeczywistym.
- W sekcji Konfiguracja ustaw Poziom szablonu Crashlytics na Domyślny.
- Kliknij Połącz, aby utworzyć nowe źródło danych.
- Kliknij Dodaj do raportu, by wrócić do szablonu Crashlytics.
- Na koniec kliknij Utwórz raport, aby utworzyć kopię szablonu panelu Studia danych Crashlytics.