Eksportowanie danych z Monitorowania wydajności do BigQuery

Możesz eksportować dane Performance Monitoring z aplikacji na Apple i Androida do BigQuery, aby przeprowadzić dalszą analizę. BigQuery umożliwia analizowanie danych za pomocą BigQuery SQL, eksportowanie ich do innego dostawcy chmury, a nawet używanie ich 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. Postępuj zgodnie z instrukcjami wyświetlanymi na ekranie, aby włączyć BigQuery.

    Gdy włączysz eksportowanie danych z usługi BigQuery do Performance Monitoring, nastąpią te zmiany:

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

    • 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 Zmiana lokalizacji zbioru danych.

    • Firebase konfiguruje regularną synchronizację danych z projektu w Firebase z 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 dezaktywować eksportowanie do 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 dotyczące wydajności, które może być jednym z tych:

  • Ślady czasu trwania – ślady, które domyślnie zbierają dane o „czasie trwania”, w tym o uruchomieniu aplikacji, aplikacji na pierwszym planie i aplikacji w tle, a także wszelkie ślady kodu niestandardowego instrumentowane przez dewelopera.

    • event_type: DURATION_TRACE
    • event_name jest taka sama jak nazwa śledzenia
  • Wskaźnik logu czasu – wskaźniki niestandardowe powiązane z niestandardowymi logami czasu kodu dodanymi przez dewelopera.

    • event_type: TRACE_METRIC
    • event_name to nazwa rodzaju danych,
    • parent_trace_name to nazwa logu czasu oczekiwania, który zawiera ten wskaźnik.
  • Ślad ekranu – ślady obejmujące czas działania ekranu (ślady renderowania ekranu).

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

    • event_type: NETWORK_REQUEST
    • event_name to 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 o zdarzeniu:

  • Ślady czasu trwania, dane śladów i ślady ekranu zawierają trace_info
  • Dane logów czasu zawierają trace_info.metric_info
  • Ślady ekranu zawierają: trace_info.screen_info
  • Ślady śledzenia 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 (rozpoczęcie śledzenia, rozpoczęcie sieci itp.)
app_display_version tekst Wersja aplikacji (np. „4.1.7”).
  • Na urządzeniu z Androidem – VersionName
  • Na urządzeniu z iOS – CFBundleShortVersionString
app_build_version tekst Wersja kompilacji aplikacji (np. „1523456”)
  • Na urządzeniu z Androidem – VersionCode
  • Na urządzeniu z iOS – CFBundleVersion
os_version tekst Wersja systemu operacyjnego urządzenia klienta
  • Android – poziom interfejsu API Androida (np. „26”)
  • iOS – wersja iOS (np. „11.4”)
device_name tekst Nazwa urządzenia klienta (np. „Google Pixel”)
kraj tekst Dwuliterowy kod kraju, w którym miało miejsce zdarzenie (np. „US” lub „ZZ” w przypadku nieznanego kraju)
przewoźnik tekst Operator urządzenia klienta
radio_type tekst Typ aktywnego połączenia radiowego w momencie wystąpienia zdarzenia (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:
  • DURATION_TRACE – logi, które domyślnie zbierają dane o „czasie trwania”, w tym o uruchomieniu aplikacji, aplikacji na pierwszym planie i aplikacji w tle, a także wszelkie logi niestandardowego kodu instrumentowanego przez dewelopera.
  • SCREEN_TRACE – logi obejmujące czas działania ekranu (logi renderowania ekranu);
  • TRACE_METRIC – wskaźniki niestandardowe powiązane ze śladami niestandardowego kodu dodanymi przez dewelopera.
  • NETWORK_REQUEST – logi czasu obejmujące czas życia żądania sieciowego (logi czasu żądań sieciowych HTTP).
event_name tekst Nazwa zdarzenia
  • DURATION_TRACE – nazwa logu czasu
  • TRACE_METRIC – nazwa danych niestandardowych,
  • W przypadku SCREEN_TRACE – _st_, po którym następuje nazwa logu czasu
  • NETWORK_REQUEST – wzorzec adresu URL żądania sieciowego
parent_trace_name tekst Nazwa śladu nadrzędnego, który zawiera dane śladu
Występuje tylko w przypadku TRACE_METRIC
trace_info REKORD Występuje tylko w przypadku tych usług: DURATION_TRACE, SCREEN_TRACE i TRACE_METRIC
trace_info.duration_us int64
  • W przypadku DURATION_TRACE i SCREEN_TRACE – czas trwania od początku do końca śladu.
  • W przypadku TRACE_METRIC – czas trwania od początku do końca nadrzędnego logu czasu
Jednostka: mikrosekunda
trace_info.screen_info REKORD Występuje tylko w przypadku: SCREEN_TRACE
trace_info.screen_info.slow_frame_ratio float64 Współczynnik powolnych klatek dla tego śladu ekranu, od 0 do 1 (np.wartość 0,05 oznacza, że 5% klatek dla tej instancji ekranu renderowało się dłużej niż 16 ms)
trace_info.screen_info.frozen_frame_ratio float64 Współczynnik zawieszonych klatek dla tego śladu ekranu, od 0 do 1 (np.wartość 0,05 oznacza, że 5% klatek dla 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 dla odpowiedzi sieciowej (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 Liczba mikrosekund, które upłynęły od event_timestamp do momentu zakończenia wysyłania żądania sieciowego
Jednostka: mikrosekunda
network_info.response_initiated_time_us int64 Mikrosekundy po event_timestamp, gdy inicjowana jest odpowiedź sieci
Jednostka: mikrosekunda
network_info.response_completed_time_us int64 Mikrosekundy po event_timestamp, gdy odpowiedź sieci jest zakończona
Jednostka: mikrosekunda

Co można zrobić z wyeksportowanymi danymi?

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

dopasowywać dane widoczne w konsoli,

Panel Firebase agreguje dane dzienne w strefie czasowej America/Los_Angeles. Aby dopasować dane do tych widocznych w konsoli, funkcje daty powinny wyraźnie ustawiać America/Los_Angeles jako strefę czasową. W przeciwnym razie funkcja daty będzie domyślnie używać czasu 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 zestawienia ś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 współczynnika zamrożonych klatek w różnych warunkach

Możesz na przykład sprawdzić współczynnik zawieszonych klatek oraz czas spędzony przez użytkowników na każdym ekranie aplikacji przy różnych typach połączenia (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

W tej analizie zakładamy, że masz niestandardowy ślad kodu 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 w przypadku trafienia w pamięci podręcznej i 0 w przypadku braku trafienia.

Możesz na przykład obliczyć współczynnik trafień w pamięci podręcznej dla 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;

Zabierz dane z usługi Performance Monitoring ze sobą

Czasami chcesz uzyskać dostęp do danych Performance Monitoring po stronie serwera lub przesłać je do innego rozwiązania innej firmy. Obecnie nie pobieramy opłat za eksportowanie danych.

Dane możesz wyeksportować:

  • Korzystanie z interfejsu internetowego BigQuery

  • Uruchamianie polecenia interfejsu wiersza poleceń bq extract

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

Ceny

Eksportowanie danych z Performance Monitoring jest bezpłatne, a BigQuery zapewnia wysokie limity wykorzystania bez opłat. Szczegółowe informacje znajdziesz w cenniku BigQuery lub w środowisku testowym BigQuery.