Dane z Performance Monitoring z aplikacji na Androida i iOS możesz eksportować do BigQuery w celu dalszej analizy. BigQuery umożliwia analizowanie danych za pomocą BigQuery SQL, eksportowanie ich do innego dostawcy chmury, a nawet wykorzystywanie danych w niestandardowych modelach ML.
Włączanie BigQuery eksportu
W konsoli Firebase otwórz stronę Integracje, a potem kliknij Połącz na karcie BigQuery.
Postępuj zgodnie z instrukcjami wyświetlanymi na ekranie, aby włączyć BigQuery.
Gdy włączysz eksport BigQuery w przypadku Performance Monitoring, nastąpią te zmiany:
Firebase wyeksportuje kopię Twoich dotychczasowych danych do BigQuery. Początkowe rozpropagowanie danych na potrzeby eksportu może potrwać do 48 godzin.
- Możesz ręcznie zaplanować uzupełnianie danych z ostatnich 30 dni lub z najnowszej daty, w której włączono BigQuery eksport (w zależności od tego, która z tych dat jest późniejsza).
Gdy zostanie on utworzony, jego lokalizacji nie można już zmienić. Możesz natomiast skopiować zbiór danych do innej lokalizacji lub go ręcznie przenieść przez ponowne utworzenie tego zbioru w innej lokalizacji. Więcej informacji znajdziesz w artykule Zmienianie lokalizacji zbioru danych.
Firebase skonfiguruje regularną synchronizację danych z projektu w Firebase do BigQuery. Te codzienne operacje eksportu zwykle kończą się w ciągu 24 godzin od zaplanowania.
Domyślnie wszystkie aplikacje w projekcie są połączone z BigQuery. Wszystkie aplikacje, które dodasz do projektu później, także zostaną automatycznie połączone z BigQuery. Możesz określić, które aplikacje mają wysyłać dane.
Aby wyłączyć BigQuery eks0port, odłącz projekt w konsoli Firebase.
Jakie dane są eksportowane do BigQuery?
W przypadku każdej aplikacji w projekcie eksport tworzy tabelę, która zawiera wszystkie zarejestrowane zdarzenia związane z wydajnością. Każdy wiersz w tabeli to pojedyncze zdarzenie związane z wydajnością, które może być jednym z tych typów:
Log czasu – logi czasu, które domyślnie zbierają dane „czasu trwania”, w tym czas uruchamiania aplikacji, czas działania aplikacji na pierwszym planie i w tle, a także wszelkie logi czasu z niestandardowego kodu zaimplementowane przez dewelopera.
event_typetoDURATION_TRACEevent_namejest taka sama jak nazwa logu czasu
Dane logu czasu – dane niestandardowe powiązane z logami czasu z niestandardowego kodu zaimplementowanego przez dewelopera.
event_typetoTRACE_METRICevent_nameto nazwa danychparent_trace_nameto nazwa logu czasu, który zawiera te dane
Log czasu ekranu – logi czasu obejmujące cały okres istnienia ekranu (logi czasu renderowania ekranu).
event_typetoSCREEN_TRACEevent_nameto prefiks_st_oraz rzeczywista nazwa ekranu
Żądanie sieciowe – logi czasu obejmujące cały okres istnienia żądania sieciowego (logi czasu żądań sieciowych HTTP).
event_typetoNETWORK_REQUESTevent_nameto skategoryzowany wzorzec adresu URL żądania sieciowego
Każde zdarzenie związane z wydajnością zawiera atrybuty zdarzenia (takie jak kraj i operator urządzenia klienta), a także informacje specyficzne dla zdarzenia:
- Logi czasu, dane logu czasu i logi czasu ekranu zawierają
trace_info. - Dane logu czasu zawierają
trace_info.metric_info. - Logi czasu ekranu zawierają
trace_info.screen_info. - Logi czasu sieci zawierają
network_info.
Szczegółowy schemat danych
| Nazwa pola | Typ | Opis |
|---|---|---|
| event_timestamp | sygnatura czasowa | Sygnatura czasowa od początku epoki, gdy zdarzenie rozpoczęło się na urządzeniu klienta (początek logu czasu, początek sieci itp.). |
| app_display_version | tekst | Wersja wyświetlana aplikacji (np. „4.1.7”).
|
| app_build_version | tekst | Wersja kompilacji aplikacji (np. „1523456”).
|
| os_version | tekst | Wersja systemu operacyjnego urządzenia klienta.
|
| device_name | tekst | Nazwa urządzenia klienta (np. „Google Pixel”). |
| kraj | tekst | Dwuliterowy kod kraju, w którym wystąpiło zdarzenie wystąpiło (np. „US” lub „ZZ” w przypadku nieznanego kraju). |
| przewoźnik | tekst | Operator urządzenia klienta. |
| radio_type | tekst | Aktywny typ radia, gdy wystąpiło zdarzenie (np. „WIFI”). |
| custom_attributes | ARRAY<RECORD> | Wszystkie atrybuty niestandardowe dołączone do tego zdarzenia. |
| custom_attributes.key | tekst | Klucz atrybutu niestandardowego. |
| custom_attributes.value | tekst | Wartość atrybutu niestandardowego. |
| event_type | tekst | Typ zdarzenia. Możliwe wartości:
|
| event_name | tekst | Nazwa zdarzenia.
|
| parent_trace_name | tekst | Nazwa nadrzędnego logu czasu, który zawiera dane logu czasu Występuje tylko w przypadku TRACE_METRIC |
| trace_info | REKORD | Występuje tylko w przypadku DURATION_TRACE,
SCREEN_TRACE, i TRACE_METRIC. |
| trace_info.duration_us | int64 |
|
| trace_info.screen_info | REKORD | Występuje tylko w przypadku SCREEN_TRACE. |
| trace_info.screen_info.slow_frame_ratio | float64 | Odsetek wolnych klatek w tym logu czasu ekranu, od 0 do 1 (np. wartość 0,05 oznacza, że 5% klatek w tej instancji ekranu renderowało się dłużej niż 16 ms). |
| trace_info.screen_info.frozen_frame_ratio | float64 | Odsetek zablokowanych klatek w tym logu czasu ekranu, od 0 do 1 (np. wartość 0,05 oznacza, że 5% klatek w tej instancji ekranu renderowało się dłużej niż 700 ms). |
| trace_info.metric_info | REKORD | Występuje tylko w przypadku TRACE_METRIC. |
| trace_info.metric_info.metric_value | int64 | Wartość danych logu czasu. |
| network_info | REKORD | Występuje tylko w przypadku NETWORK_REQUEST. |
| network_info.response_code | int64 | Kod odpowiedzi HTTP na odpowiedź sieciową (np. 200, 404). |
| network_info.response_mime_type | tekst | Typ MIME odpowiedzi sieciowej (np. „text/html”). |
| network_info.request_http_method | tekst | Metoda HTTP żądania sieciowego (np. „GET” lub „POST”). |
| network_info.request_payload_bytes | int64 | Rozmiar ładunku żądania sieciowego Jednostka: bajt. |
| network_info.response_payload_bytes | int64 | Rozmiar ładunku odpowiedzi sieciowej Jednostka: bajt. |
| network_info.request_completed_time_us | int64 | Mikrosekundy po event_timestamp, gdy wysyłanie żądania sieciowego zostało zakończoneJednostka: mikrosekunda. |
| network_info.response_initiated_time_us | int64 | Mikrosekundy po event_timestamp, gdy rozpoczęła się odpowiedź sieciowa
Jednostka: mikrosekunda. |
| network_info.response_completed_time_us | int64 | Mikrosekundy po event_timestamp gdy odpowiedź sieciowa
została zakończonaJednostka: mikrosekunda. |
Co można zrobić z wyeksportowanymi danymi?
W sekcjach poniżej znajdziesz przykłady zapytań, które możesz uruchomić w BigQuery w odniesieniu do wyeksportowanych Performance Monitoring danych.
Dopasowywanie danych widocznych w konsoli
Panel Firebase agreguje dane dzienne w strefie czasowej America/Los_Angeles.
Aby dopasować dane widoczne w konsoli, funkcje daty powinny wyraźnie ustawiać
America/Los_Angeles jako strefę czasową. W przeciwnym razie funkcja daty
domyślnie użyje strefy czasowej UTC.
SELECT DATE(event_timestamp, 'America/Los_Angeles') AS daily_date, APPROX_QUANTILES(trace_info.duration_us, 100)[OFFSET(90)] / 1000000 AS p90_seconds, FROM `TABLE_NAME` WHERE DATE(event_timestamp, 'America/Los_Angeles') >= DATE_SUB( PARSE_DATE('%Y%m%d', 'YYYY-MM-DD'), INTERVAL 7 DAY) AND DATE(event_timestamp, 'America/Los_Angeles') <= PARSE_DATE('%Y%m%d', 'YYYY-MM-DD') AND event_name = '_app_start' GROUP BY 1 ORDER BY 1 DESC;
Wyświetlanie średniego opóźnienia uruchamiania aplikacji według kraju
SELECT AVG(trace_info.duration_us), country FROM `TABLE_NAME` WHERE _PARTITIONTIME > TIMESTAMP("YYYY-MM-DD") AND event_type = "DURATION_TRACE" AND event_name = "_app_start" GROUP BY 2;
Sprawdzanie odsetka zablokowanych klatek w różnych warunkach
Możesz na przykład sprawdzić odsetek zablokowanych klatek oraz czas, jaki użytkownicy spędzają na poszczególnych ekranach aplikacji, gdy korzystają z różnych typów radia (Wi-Fi, 4G itp.).
SELECT AVG(trace_info.duration_us / 1000000) AS seconds_on_screen, AVG(trace_info.screen_info.frozen_frame_ratio) AS frozen_frame_ratio, event_name, radio_type FROM `TABLE_NAME` WHERE _PARTITIONTIME > TIMESTAMP("YYYY-MM-DD") AND event_type = "SCREEN_TRACE" GROUP BY event_name, radio_type ORDER BY event_name, radio_type;
Obliczanie współczynnika trafień w pamięci podręcznej podczas wczytywania określonych typów plików z dysku
Ta analiza zakłada, że zaimplementowano log czasu z niestandardowego kodu wczytywania z dysku z atrybutem niestandardowym o nazwie file-extension oraz danymi niestandardowymi (TRACE_METRIC) o nazwie cache-hit, które są ustawione na 1, jeśli wystąpiło trafienie w pamięci podręcznej, i na 0, jeśli nie.
Możesz na przykład obliczyć współczynnik trafień w pamięci podręcznej podczas wczytywania plików PNG z dysku:
SELECT AVG(trace_info.metric_info.metric_value) AS cache_hit_rate FROM `TABLE_NAME` WHERE _PARTITIONTIME > TIMESTAMP("YYYY-MM-DD") AND event_type = "TRACE_METRIC" AND event_name = "cache-hit" AND parent_trace_name = "loadFromDisk" AND STRUCT("file-extension", "png") IN UNNEST(custom_attributes);
Sprawdzanie, o której porze dnia użytkownicy wysyłają żądania sieciowe
Możesz na przykład sprawdzić, o której godzinie użytkownicy z Polski wysyłają żądania sieciowe z Twojej aplikacji:
SELECT count(1) AS hourly_count, EXTRACT(HOUR FROM event_timestamp) AS hour_of_day FROM `TABLE_NAME` WHERE _PARTITIONTIME > TIMESTAMP("YYYY-MM-DD") AND event_type = "NETWORK_REQUEST" AND country = "US" GROUP BY 2 ORDER BY 2;
Przenoszenie danych z Performance Monitoring w dowolne miejsce
Czasami chcesz uzyskać dostęp do danych Performance Monitoring po stronie serwera lub przesłać je do innego rozwiązania innej firmy. Eksportowanie danych jest obecnie bezpłatne.
Dane możesz eksportować:
za pomocą interfejsu internetowego BigQuery,
uruchamiając polecenie CLI
bq extractprzesyłając zadanie wyodrębniania za pomocą interfejsu API lub bibliotek klienckich.
Ceny
Eksportowanie danych z Performance Monitoring jest bezpłatne, a BigQuery oferuje duże limity bezpłatnego użytkowania. Szczegółowe informacje znajdziesz w BigQuery cenniku lub w BigQuery piaskownicy.