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 eksportuBigQuery
W konsoli Firebase otwórz stronę Integracje, a potem na karcie BigQuery kliknij Połącz.
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 propagowanie 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ć eks0port, odłącz projekt w konsoli Firebase.BigQuery
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 czas działania aplikacji w tle, a także wszelkie logi czasu z niestandardowego kodu, które zostały 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, które zostały zaimplementowane 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 działania ekranu (logi czasu renderowania ekranu).
event_typetoSCREEN_TRACEevent_nameto prefiks_st_oraz rzeczywista nazwa ekranu
Żądanie sieciowe – logi czasu obejmujące cały okres działania żą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 dotyczące 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 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, z którego pochodzi zdarzenie (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 logu czasu nadrzędnego, 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 | Współczynnik 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 | Współczynnik 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 kolejnych sekcjach znajdziesz przykłady zapytań, które możesz uruchomić w BigQuery w odniesieniu do wyeksportowanych danych z Performance Monitoring.
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 będzie używać 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 współczynnika zablokowanych klatek w różnych warunkach
Możesz na przykład sprawdzić współczynnik 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 na potrzeby 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 pory dnia, w której 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 możesz chcieć uzyskać dostęp do danych z 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.