Eksportowanie danych z Monitorowania wydajności do BigQuery

Dane Performance Monitoring z aplikacji Apple i Androida możesz wyeksportować do pliku BigQuery, aby przeanalizować je dokładniej. BigQuery umożliwia analizowanie danych za pomocą BigQuery SQL, eksportowanie ich do innego dostawcy usług w chmurze, a nawet wykorzystywanie tych danych w niestandardowych modelach ML.

Włącz eksport BigQuery

  1. W konsoli Firebase otwórz stronę Integracje, a następnie na karcie BigQuery kliknij Połącz.

  2. Aby włączyć BigQuery, postępuj zgodnie z instrukcjami wyświetlanymi na ekranie.

    Gdy włączysz eksport BigQuery w przypadku Performance Monitoring, nastąpi:

    • Firebase eksportuje kopię istniejących danych do usługi BigQuery. Początkowa propagacja danych na potrzeby eksportu może potrwać do 48 godzin.

    • Po utworzeniu zbioru danych jego lokalizacji nie można już zmienić. Możesz natomiast skopiować zbiór danych do innej lokalizacji lub ręcznie przenieść (ponownie utworzyć) zbiór danych w innej lokalizacji. Więcej informacji znajdziesz w artykule Zmiana lokalizacji zbioru danych.

    • Firebase skonfiguruje regularne synchronizowanie danych z Twojego projektu Firebase z kontem BigQuery. Te codzienne operacje eksportu kończą się zwykle w ciągu 24 godzin od zaplanowania procesu.

    • Domyślnie wszystkie aplikacje w projekcie są połączone z BigQuery. Wszystkie aplikacje, które dodasz do projektu później, zostaną automatycznie połączone z BigQuery. Możesz określić, które aplikacje mają wysyłać dane.

Aby dezaktywować eksport BigQuery, rozłącz projekt w konsoli Firebase.

Jakie dane są eksportowane do BigQuery?

W przypadku każdej aplikacji w projekcie eksport tworzy tabelę zawierającą wszystkie zarejestrowane zdarzenia dotyczące wydajności. Każdy wiersz w tabeli to pojedyncze zdarzenie związane z skutecznością, które może być jednym z tych:

  • Zrzut czasu trwania – logi czasu, które domyślnie zbierają dane czasu trwania „czasu trwania”, które obejmują uruchomienie aplikacji, działanie aplikacji w tle i w tle, a także wszelkie niestandardowe śledzenia kodu obsługiwane przez programistę

    • event_type to DURATION_TRACE
    • event_name jest taka sama jak nazwa śledzenia
  • Dane z wykrywania – dane niestandardowe powiązane z niestandardowymi logami kodu z dodatkiem kodu dla programistów.

    • event_type to TRACE_METRIC
    • event_name to nazwa danych
    • parent_trace_name to nazwa logu czasu zawierającego ten wskaźnik.
  • Ślad ekranu – ścieżki obejmujące cały czas trwania ekranu (ścieżki renderowania ekranu).

    • event_type to SCREEN_TRACE
    • event_name to prefiks _st_ plus rzeczywista nazwa ekranu
  • Żądanie sieciowe – logi obejmujące cały czas trwania żądania sieciowego (logi żądań sieciowych HTTP).

    • event_type to NETWORK_REQUEST
    • event_name to podział według wzoru adresu URL żądania sieciowego

Każde zdarzenie dotyczące wydajności zawiera atrybuty zdarzenia (takie jak kraj i operator urządzenia klienta), a także informacje dotyczące zdarzenia:

  • Tracingi czasu, dane z tracingu i tracingi ekranu zawierają trace_info
  • Dane z wykrywania zawierają trace_info.metric_info
  • Logs ekranu zawierają trace_info.screen_info
  • Ścieżki sieciowe zawierają network_info

Szczegółowy schemat danych

Nazwa pola Typ Opis
event_timestamp sygnatura czasowa Sygnatura czasowa od początku epoki, w której rozpoczęło się zdarzenie na urządzeniu klienckim (początek śledzenia, uruchomienie sieci itp.)
app_display_version ciąg znaków Wyświetlana wersja aplikacji (np. „4.1.7”)
  • Na urządzeniu z Androidem:VersionName
  • iOS – CFBundleShortVersionString
app_build_version ciąg znaków Wersja kompilacji aplikacji (np. „1523456”)
  • Na urządzeniu z Androidem:VersionCode
  • iOS – CFBundleVersion
os_version ciąg znaków Wersja systemu operacyjnego urządzenia klienta
  • Android – poziom interfejsu API Androida (np. „26”).
  • iOS – wersja iOS (np. „11.4”).
device_name ciąg znaków nazwa urządzenia klienckiego (np. „Google Pixel”),
country ciąg znaków Dwuliterowy kod kraju, w którym miało miejsce zdarzenie (na przykład „PL” lub „ZZ” w przypadku nieznanego kraju).
przewoźnik ciąg znaków Operator urządzenia klienta
radio_type ciąg znaków Aktywny typ sygnału radiowego, w którym doszło do zdarzenia (na przykład „WIFI”)
custom_attributes ARRAY<RECORD> Wszystkie atrybuty niestandardowe dołączone do tego zdarzenia
atrybuty_niestandardowe.klucz ciąg znaków Klucz atrybutu niestandardowego
atrybuty_niestandardowe.wartość ciąg znaków Wartość atrybutu niestandardowego
event_type ciąg znaków Typ zdarzenia. Możliwe wartości:
  • DURATION_TRACE – logi czasu, które domyślnie zbierają wskaźnik czasu trwania, który obejmuje uruchomienie aplikacji, aplikację na pierwszym planie i w tle, a także wszelkie niestandardowe śledzenia kodu wspomagane przez programistę.
  • SCREEN_TRACE – logi czasu z całego okresu wyświetlania ekranu (ślady renderowania ekranu)
  • TRACE_METRIC – niestandardowe wskaźniki powiązane z niestandardowymi logami czasu kodu obsługiwanymi przez programistę
  • NETWORK_REQUEST – logi obejmujące cały czas trwania żądania sieciowego (logi żądań sieciowych HTTP);
event_name ciąg znaków Nazwa zdarzenia
  • W przypadku DURATION_TRACE – nazwa ścieżki
  • TRACE_METRIC – nazwa danych niestandardowych
  • SCREEN_TRACE — _st_, a następnie nazwa śledzenia
  • NETWORK_REQUEST – wzorzec adresu URL żądania sieci
parent_trace_name ciąg znaków Nazwa ścieżki nadrzędnej, która zawiera dane ścieżki
Dostępna tylko w przypadku TRACE_METRIC
trace_info REKORD Dostępne tylko w przypadku aplikacji DURATION_TRACE, SCREEN_TRACETRACE_METRIC
trace_info.duration_us int64
  • W przypadku DURATION_TRACESCREEN_TRACE: — Długość czasu („czas trwania”) od początku do końca ścieżki
  • Dla TRACE_METRIC – długość czasu („duration”) od początku do końca logu czasu nadrzędnego
Jednostka: mikrosekunda
trace_info.screen_info REKORD Występuje tylko w przypadku domeny SCREEN_TRACE
trace_info.screen_info.slow_frame_ratio float64 Stosunek liczby spowolnionych klatek w przypadku tego zrzutu ekranu wynosi od 0 do 1 (na przykład wartość 0, 05 oznacza, że wyrenderowanie 5% klatek w tej instancji ekranu trwało dłużej niż 16 ms)
trace_info.screen_info.frozen_frame_ratio float64 Stosunek liczby zablokowanych klatek w tym śladzie ekranu (wartość od 0 do 1). (Na przykład wartość 0,05 oznacza, że renderowanie 5% klatek w tym przypadku trwało ponad 700 ms)
informacje_śledzenia.dane_informacje_o_danych REKORD Występuje tylko w przypadku domeny TRACE_METRIC
trace_info.metric_info.metric_value int64 Wartość danych śledzonych
network_info REKORD Tylko w przypadku NETWORK_REQUEST
informacje_o_sieci.kod_odpowiedzi int64 Kod odpowiedzi HTTP odpowiedzi sieciowej (np. 200 lub 404)
network_info.response_mime_type ciąg znaków Typ MIME odpowiedzi sieci (np. „text/html”).
metoda_info.żądania_http_metody_sieci ciąg znaków Metoda HTTP żądania sieciowego (np. „GET” lub „POST”).
network_info.request_payload_bytes int64 Rozmiar ładunku żądania sieci
Jednostka: bajt
informacje_o_sieci.bajty_ładunku_odpowiedzi int64 Rozmiar ładunku odpowiedzi sieci
Jednostka: bajt
network_info.request_completed_time_us int64 Mikrosekundy po event_timestamp, gdy wysłano żądanie sieciowe
Jednostka: mikrosekunda
informacje_o_sieci.odpowiedź_zainicjowana_w_czasie_pl int64 Mikrosekundy po zainicjowaniu odpowiedzi sieci (event_timestamp)
Jednostka: mikrosekunda
network_info.response_completed_time_us int64 Mikrosekundy po event_timestamp, gdy odpowiedź sieci została zakończona
Jednostka: mikrosekunda

Co można zrobić z wyeksportowanymi danymi?

W następnych sekcjach znajdziesz przykłady zapytań, które możesz wykonać w BigQuery na podstawie wyeksportowanych danych Performance Monitoring.

Dopasowanie danych widocznych w konsoli

Panel Firebase agreguje dane dzienne w strefie czasowej America/Los_Angeles. Aby dopasować to, co widać na konsoli, funkcje daty powinny wyraźnie ustawiać strefę czasową America/Los_Angeles. W przeciwnym razie funkcja daty będzie domyślnie używać strefy 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 podziału średniego czasu oczekiwania na uruchomienie 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 stosunku liczby zablokowanych klatek do różnych warunków

Możesz na przykład sprawdzić stosunek liczby zablokowanych klatek do czasu, jaki użytkownicy spędzają na poszczególnych ekranach aplikacji w różnych sieciach (Wi-Fi, 4G itd.).

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;

Współczynnik trafień w pamięci podręcznej Compute do wczytywania określonych typów plików z dysku

Ta analiza zakłada, że masz instrumentowany niestandardowy ślad kodu służący do wczytywania z dysku z atrybutem niestandardowym o nazwie file-extension i danymi niestandardowymi (TRACE_METRIC) o nazwie cache-hit, które mają wartość 1, jeśli wystąpiło trafienie do pamięci podręcznej, oraz 0, jeśli nie wystąpiło trafienie do pamięci podręcznej.

Możesz np. obliczyć współczynnik trafień w pamięci podręcznej przy wczytywaniu 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);

Sprawdź, o jakiej porze dnia użytkownicy wysyłają żądania sieciowe

Możesz np. sprawdzić, o jakiej porze dnia użytkownicy ze Stanów Zjednoczonych wysyłają żądania 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;

Zabieraj dane Performance Monitoring ze sobą wszędzie

Czasami możesz chcieć uzyskać dostęp do danych Performance Monitoring po stronie serwera lub przesłać je do innej usługi zewnętrznej. Obecnie eksportowanie danych jest bezpłatne.

Dane możesz wyeksportować w ten sposób:

  • Korzystanie z interfejsu internetowego BigQuery

  • Uruchamianie polecenia w interfejsie wiersza poleceńbq extract

  • Przesyłanie zadania wyodrębniania za pomocą interfejsu API lub bibliotek klienta.

Ceny

Eksportowanie danych z Performance Monitoring jest bezpłatne, a BigQuery oferuje duże bezpłatne limity użytkowania. Szczegółowe informacje znajdziesz w cenniku BigQuery lub w BigQuerysandboksie.