Eksportowanie danych z Monitorowania wydajności do BigQuery

Dane Performance Monitoring z aplikacji Apple i Androida możesz wyeksportować do 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 wyeksportuje kopię Twoich dotychczasowych danych do 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 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ć 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:

  • Śledzenie czasu trwania – śledzenie, które domyślnie zbiera dane o „czasie trwania” i obejmujące uruchamianie aplikacji, aplikację na pierwszym planie i aplikację w tle, a także dowolne ścieżki kodu niestandardowego z użyciem narzędzia dewelopera.

    • 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 okresu Epoch, gdy zdarzenie zaczęło się na urządzeniu klienta (rozpoczęcie śledzenia, rozpoczęcie działania 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 klienta (np. „Google Pixel”)
country ciąg znaków Dwuliterowy kod kraju, z którego pochodziło 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 sieci komórkowej w momencie wystąpienia zdarzenia (np. „WIFI”)
custom_attributes ARRAY<RECORD> Wszystkie atrybuty niestandardowe powiązane z tym zdarzeniem
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 – ścieżki, które domyślnie zbierają dane „duration” (czas trwania), obejmujące uruchamianie aplikacji, aplikację na pierwszym planie i aplikację w tle, a także dowolne ścieżki kodu niestandardowego z instrumentacją dewelopera.
  • SCREEN_TRACE – obejmujące cały czas trwania ekranu (logi czasu renderowania ekranu)
  • TRACE_METRIC – dane niestandardowe powiązane z logami kodu niestandardowego z dodatkiem kodu dla programistów
  • 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
  • W przypadku TRACE_METRIC – długość czasu („czas trwania”) od początku do końca głównego śladu.
Jednostka: mikrosekunda
trace_info.screen_info REKORD Tylko w przypadku SCREEN_TRACE
trace_info.screen_info.slow_frame_ratio float64 Stosunek liczby klatek o wolnym renderowaniu w tym śladzie ekranu (wartość od 0 do 1). (Na przykład wartość 0, 05 oznacza, że w przypadku tego śladu ekranu renderowanie 5% klatek trwało ponad 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)
trace_info.metric_info REKORD Tylko w przypadku TRACE_METRIC
trace_info.metric_info.metric_value int64 Wartość danych śledzonych
network_info REKORD Tylko w przypadku NETWORK_REQUEST
network_info.response_code int64 Kod odpowiedzi HTTP dla odpowiedzi sieci (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 sieci
Jednostka: bajt
network_info.response_payload_bytes 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
network_info.response_initiated_time_us int64 Mikrosekundy po event_timestamp, gdy rozpoczyna się odpowiedź sieci
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 do 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 domyślnie będzie używać 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;

Obliczanie współczynnika trafień w pamięci podręcznej w przypadku 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, i 0, jeśli nie.

Możesz na przykład obliczyć współczynnik trafień do 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);

Sprawdź, o której porze dnia użytkownicy wysyłają żądania sieciowe.

Możesz np. sprawdzić, o której godzinie użytkownicy z USA wysyłają żądania sieci 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 innego rozwiązania zewnętrznego. 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.