Eksportowanie danych z Monitorowania wydajności do BigQuery

Możesz eksportować Performance Monitoring dane z aplikacji na Androida i iOS do BigQuery, aby przeprowadzić dalszą analizę. BigQuery umożliwia analizowanie danych za pomocą BigQuerySQL, eksportowanie ich do innego dostawcy usług w chmurze, a nawet używanie ich w niestandardowych modelach uczenia maszynowego.

Włącz eksportowanie BigQuery

  1. Otwórz stronę Integracje w konsoli Firebase, a potem kliknij Połącz na karcie BigQuery.

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

    Gdy włączysz eksportowanie BigQuery na potrzeby Performance Monitoring, nastąpią te zmiany:

    • Firebase eksportuje kopię Twoich dotychczasowych danych do BigQuery. Początkowe rozpowszechnianie danych na potrzeby eksportu może potrwać do 48 godzin.

      • Możesz ręcznie zaplanować uzupełnianie danych z okresu do 30 dni wstecz lub z najnowszej daty, w której włączono eksport BigQuery (w zależności od tego, która z tych dat jest późniejsza).
    • Gdy zbiór danych zostanie 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 Zmiana lokalizacji zbioru danych.

    • Firebase konfiguruje regularne synchronizacje danych z projektu Firebase z BigQuery. 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, zostaną automatycznie połączone z BigQuery. Możesz określić, które aplikacje mają wysyłać dane.

Aby dezaktywować eksportowanie BigQuery, odłą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 związane z wydajnością. Każdy wiersz w tabeli to pojedyncze zdarzenie związane ze skutecznością, które może być jednym z tych typów:

  • Log czasu trwania – logi, które domyślnie zbierają dane o „czasie trwania”, w tym o uruchamianiu aplikacji, działaniu aplikacji na pierwszym planie i w tle, a także wszelkie logi czasu z niestandardowego kodu, które zostały zaimplementowane przez dewelopera.

    • event_type to DURATION_TRACE
    • event_name jest taka sama jak nazwa śledzenia
  • Dane logów czasu – dane niestandardowe powiązane z logami czasu niestandardowego kodu dodanymi przez programistę.

    • event_type to TRACE_METRIC
    • event_name to nazwa rodzaju danych
    • parent_trace_name to nazwa logu czasu, który zawiera ten wskaźnik.
  • Ślad ekranu – ślady obejmujące cały okres istnienia ekranu (ślady renderowania ekranu).

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

    • event_type to NETWORK_REQUEST
    • event_name to skategoryzowany wzorzec adresu URL żądania sieciowego.

Każde zdarzenie związane z wydajnością zawiera atrybuty zdarzenia (np. kraj i operator urządzenia klienta), a także informacje specyficzne dla zdarzenia:

  • Logi czasu trwania, dane logu czasu i logi ekranu zawierają trace_info
  • Dane śledzenia zawierają trace_info.metric_info
  • Logi ekranu zawierają trace_info.screen_info
  • Logi sieci zawierają network_info

Szczegółowy schemat danych

Nazwa pola Typ Opis
event_timestamp sygnatura czasowa Sygnatura czasowa od początku epoki, kiedy zdarzenie rozpoczęło się na urządzeniu klienta (początek śledzenia, początek sieci itp.).
app_display_version ciąg znaków Wyświetl wersję aplikacji (np. „4.1.7”).
  • Android – VersionName
  • iOS – CFBundleShortVersionString
app_build_version ciąg znaków Wersja kompilacji aplikacji (np. „1523456”).
  • Android – VersionCode
  • iOS – CFBundleVersion
os_version ciąg znaków Wersja systemu operacyjnego urządzenia klienta
  • Android – poziom interfejsu API Androida (np. „26”)
  • iOS – wersja systemu iOS (np. „11.4”)
device_name ciąg znaków Nazwa urządzenia klienta (np. „Google Pixel”).
kraj ciąg znaków Dwuliterowy kod kraju, z którego pochodzi zdarzenie (np. „US” lub „ZZ” w przypadku nieznanego kraju).
przewoźnik ciąg znaków Operator urządzenia klienta
radio_type ciąg znaków Aktywny typ radia w momencie wystąpienia zdarzenia (np. „WIFI”).
custom_attributes ARRAY<RECORD> Wszystkie atrybuty niestandardowe dołączone do tego wydarzenia
custom_attributes.key ciąg znaków Klucz atrybutu niestandardowego
custom_attributes.value 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ą dane „czas trwania”, w tym czas uruchamiania aplikacji, czas, w którym aplikacja jest na pierwszym planie, i czas, w którym aplikacja działa w tle, a także wszelkie logi czasu z niestandardowego kodu, które zostały zaimplementowane przez dewelopera.
  • SCREEN_TRACE – ślady obejmujące cały okres istnienia ekranu (ślady renderowania ekranu);
  • TRACE_METRIC – dane niestandardowe, które są powiązane z logami czasu z niestandardowego kodu dodanego przez programistę.
  • NETWORK_REQUEST – logi czasu obejmujące cały okres istnienia żądania sieciowego (logi czasu żądań sieciowych HTTP);
event_name ciąg znaków Nazwa zdarzenia
  • W przypadku DURATION_TRACE – nazwa logu czasu
  • W przypadku TRACE_METRIC – nazwa danych niestandardowych
  • W przypadku SCREEN_TRACE – _st_, a następnie nazwa śledzenia
  • W przypadku NETWORK_REQUEST – wzorzec adresu URL żądania sieciowego
parent_trace_name ciąg znaków Nazwa śladu nadrzędnego, który zawiera dane śladu.
Występuje tylko w przypadku TRACE_METRIC
trace_info REKORD Występuje tylko w przypadku DURATION_TRACE, SCREEN_TRACETRACE_METRIC
trace_info.duration_us int64
  • W przypadku DURATION_TRACESCREEN_TRACE – czas trwania od początku do końca śladu.
  • W przypadku TRACE_METRIC – czas trwania od początku do końca śledzenia nadrzędnego.
Jednostka: mikrosekunda
trace_info.screen_info REKORD Występuje tylko w przypadku parametru SCREEN_TRACE
trace_info.screen_info.slow_frame_ratio float64 Odsetek wolnych klatek w tym śladzie ekranu (wartość od 0 do 1). Na przykład wartość 0, 05 oznacza, że wyrenderowanie 5% klatek w tym przypadku ekranu trwało ponad 16 ms.
trace_info.screen_info.frozen_frame_ratio float64 Odsetek zablokowanych klatek w tym śladzie ekranu (wartość od 0 do 1). Przykład: wartość 0, 05 oznacza, że renderowanie 5% klatek w tym przypadku ekranu trwało ponad 700 ms.
trace_info.metric_info REKORD Występuje tylko w przypadku parametru TRACE_METRIC
trace_info.metric_info.metric_value int64 Wartość danych śledzenia
network_info REKORD Występuje tylko w przypadku parametru NETWORK_REQUEST
network_info.response_code int64 Kod odpowiedzi HTTP dla odpowiedzi sieciowej (np. 200, 404).
network_info.response_mime_type ciąg znaków Typ MIME odpowiedzi sieci (np. „text/html”).
network_info.request_http_method ciąg znaków 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ńczone
Jednostka: mikrosekunda
network_info.response_initiated_time_us int64 Mikrosekundy po event_timestamp, gdy zainicjowana zostanie odpowiedź sieci
Jednostka: mikrosekunda
network_info.response_completed_time_us int64 Mikrosekundy po event_timestamp zakończeniu odpowiedzi sieci
Jednostka: mikrosekunda

Co można zrobić z wyeksportowanymi danymi?

W sekcjach poniżej znajdziesz przykłady zapytań, które możesz uruchomić w BigQuery na wyeksportowanych danych Performance Monitoring.

Dopasowywanie danych widocznych w konsoli

Panel Firebase agreguje dane dzienne w strefie czasowej America/Los_Angeles. Aby dopasować wyniki do tych wyświetlanych w konsoli, funkcje daty powinny jawnie ustawiać strefę czasową America/Los_Angeles. W przeciwnym razie domyślnie będą 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 średniego czasu oczekiwania na uruchomienie aplikacji z podziałem na kraje

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 zamrożonych klatek w różnych warunkach

Możesz na przykład sprawdzić odsetek zamrożonych klatek oraz czas, jaki użytkownicy spędzają na poszczególnych ekranach aplikacji, gdy korzystają z różnych rodzajów połączeń radiowych (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 masz instrumentowany niestandardowy log czasu kodu wczytywania z dysku z atrybutem niestandardowym o nazwie file-extension i danymi niestandardowymi (TRACE_METRIC) o nazwie cache-hit, które mają wartość 1 w przypadku trafienia w pamięci podręcznej i 0 w przypadku nietrafienia w pamięci podręcznej.

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;

Zabierz swoje dane z Performance Monitoring wszędzie

Czasami chcesz uzyskać dostęp do danych Performance Monitoring po stronie serwera lub przesłać je do innego rozwiązania innej firmy. Obecnie eksportowanie danych jest bezpłatne.

Dane możesz wyeksportować:

  • Korzystanie z interfejsu internetowego BigQuery

  • Uruchamianie polecenia interfejsu 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 zapewnia duże bezpłatne limity wykorzystania. Szczegółowe informacje znajdziesz w cenniku lub w BigQuerypiaskownicy.BigQuery