Esporta i dati di Performance Monitoring in BigQuery

Puoi esportare i dati di Performance Monitoring dalle app per Apple e Android in BigQuery per ulteriori analisi. BigQuery ti consente di analizzare i dati utilizzando SQL di BigQuery, esportarli in un altro provider cloud e persino utilizzarli per i tuoi modelli di ML personalizzati.

Attiva l'esportazione di BigQuery

  1. Vai alla pagina Integrazioni nella console Firebase, quindi fai clic su Collega nella scheda BigQuery.

  2. Segui le istruzioni sullo schermo per attivare BigQuery.

    Quando attivi l'esportazione di BigQuery per Performance Monitoring, si verifica quanto segue:

    • Firebase esporta una copia dei tuoi dati esistenti in BigQuery. La propagazione iniziale dei dati per l'esportazione può richiedere fino a 48 ore.

    • Dopo la creazione del set di dati, la località non può essere modificata, ma puoi copiarlo in un'altra posizione o spostarlo (ricrearlo) manualmente in un'altra posizione. Per saperne di più, consulta Modificare la posizione del set di dati.

    • Firebase configura sincronizzazioni regolari dei dati dal progetto Firebase a BigQuery. Queste operazioni di esportazione giornaliere di solito vengono completate entro 24 ore dalla loro pianificazione.

    • Per impostazione predefinita, tutte le app del progetto sono collegate a BigQuery. Eventuali app aggiunte in un secondo momento al progetto vengono collegate automaticamente a BigQuery. Puoi gestire le app che inviano dati.

Per disattivare l'esportazione di BigQuery, scollega il progetto nella console Firebase.

Quali dati vengono esportati in BigQuery?

Per ogni app del progetto, l'esportazione crea una tabella che include tutti gli eventi relativi alle prestazioni acquisiti. Ogni riga della tabella è un singolo evento di rendimento che può essere uno dei seguenti:

  • Traccia durata: tracce che raccolgono, per impostazione predefinita, la metrica "durata", che include l'avvio dell'app, l'app in primo piano e l'app in background, nonché eventuali tracce di codice personalizzato sottoposte a ispezione da parte dello sviluppatore

    • event_type è DURATION_TRACE
    • event_name è uguale al nome della traccia
  • Metrica traccia: metriche personalizzate associate alle tracce di codice personalizzato instrumentate dallo sviluppatore

    • event_type è TRACE_METRIC
    • event_name è il nome della metrica
    • parent_trace_name è il nome della traccia che contiene questa metrica
  • Traccia schermo: tracce che coprono l'intera vita di una schermata (tracce di rendering della schermata).

    • event_type è SCREEN_TRACE
    • event_name è il prefisso _st_ più il nome effettivo della schermata
  • Richiesta di rete: tracce che coprono l'intera durata di una richiesta di rete (tracce richiesta di rete HTTP)

    • event_type è NETWORK_REQUEST
    • event_name è il pattern classificato dell'URL della richiesta di rete

Ogni evento di rendimento contiene gli attributi dell'evento (ad esempio il paese e l'operatore del dispositivo client), nonché informazioni specifiche dell'evento:

  • Le tracce della durata, le metriche delle tracce e le tracce dello schermo contengono trace_info
  • Le metriche delle tracce contengono trace_info.metric_info
  • Le tracce dello schermo contengono trace_info.screen_info
  • Le tracce di rete contengono network_info

Schema dei dati dettagliati

Nome campo Tipo Descrizione
event_timestamp timestamp Timestamp dall'epoca di inizio dell'evento sul dispositivo client (inizio traccia, inizio rete e così via)
app_display_version stringa Versione dell'applicazione visualizzata (ad esempio "4.1.7")
  • Per Android: VersionName
  • Per iOS: CFBundleShortVersionString
app_build_version stringa Versione di compilazione dell'applicazione (ad esempio "1523456")
  • Per Android: VersionCode
  • Per iOS: CFBundleVersion
os_version stringa Versione del sistema operativo del dispositivo client
  • Per Android: livello API Android (ad esempio "26")
  • Per iOS: versione iOS (ad es. "11.4")
device_name stringa Nome del dispositivo client (ad esempio "Google Pixel")
country stringa Codice paese di due lettere del paese da cui si è verificato l'evento (ad esempio "US" o "ZZ" per paese sconosciuto)
corriere stringa Operatore del dispositivo client
radio_type stringa Tipo di radio attivo quando si è verificato l'evento (ad es. "WIFI")
custom_attributes ARRAY<RECORD> Tutti gli attributi personalizzati associati a questo evento
custom_attributes.key stringa Chiave dell'attributo personalizzato
custom_attributes.value stringa Valore dell'attributo personalizzato
event_type stringa Tipo di evento. Valori possibili:
  • DURATION_TRACE: tracce che raccolgono per impostazione predefinita la metrica "durata", che include l'avvio dell'app, l'app in primo piano e l'app in background, nonché eventuali tracce di codice personalizzato instrumentato dallo sviluppatore
  • SCREEN_TRACE: tracce che coprono l'intera vita utile di una schermata (tracce di rendering della schermata)
  • TRACE_METRIC: metriche personalizzate associate alle tracce di codice personalizzato instrumentate dallo sviluppatore
  • NETWORK_REQUEST: tracce che coprono l'intera durata di una richiesta di rete (tracce richiesta di rete HTTP)
event_name stringa Nome dell'evento
  • Per DURATION_TRACE: nome traccia
  • Per TRACE_METRIC: nome della metrica personalizzata
  • Per SCREEN_TRACE - _st_ seguito dal nome della traccia
  • Per NETWORK_REQUEST: pattern URL della richiesta di rete
parent_trace_name stringa Nome della traccia principale che contiene la metrica della traccia
Presente solo per TRACE_METRIC
trace_info RECORD Presente solo per DURATION_TRACE, SCREEN_TRACE e TRACE_METRIC
trace_info.duration_us int64
  • Per DURATION_TRACE e SCREEN_TRACE - Durata ("duration") dall'inizio alla fine della traccia
  • Per TRACE_METRIC: durata ("duration") dall'inizio alla fine della traccia principale
Unità: microsecondo
trace_info.screen_info RECORD Presente solo per SCREEN_TRACE
trace_info.screen_info.slow_frame_ratio float64 Rapporto tra frame lenti per questa traccia dello schermo, compreso tra 0 e 1 (ad esempio, un valore di 0,05 indica che il 5% dei frame per questa istanza dello schermo ha richiesto più di 16 ms per il rendering)
trace_info.screen_info.frozen_frame_ratio float64 Rapporto tra frame bloccati per questa traccia dello schermo, compreso tra 0 e 1 (ad esempio, un valore di 0,05 indica che il 5% dei frame per questa istanza dello schermo ha richiesto più di 700 ms per il rendering)
trace_info.metric_info RECORD Presente solo per TRACE_METRIC
trace_info.metric_info.metric_value int64 Valore della metrica della traccia
network_info RECORD Presente solo per NETWORK_REQUEST
network_info.response_code int64 Codice di risposta HTTP per la risposta di rete (ad es. 200, 404)
network_info.response_mime_type stringa Tipo MIME della risposta di rete (ad es. "text/html")
network_info.request_http_method stringa Metodo HTTP della richiesta di rete (ad esempio "GET" o "POST")
network_info.request_payload_bytes int64 Dimensioni del payload della richiesta di rete
Unità di misura: byte
network_info.response_payload_bytes int64 Dimensioni del payload della risposta di rete
Unità: byte
network_info.request_completed_time_us int64 Microsecondi dopo event_timestamp al termine dell'invio della richiesta di rete
Unità: microsecondo
network_info.response_initiated_time_us int64 Microsecondi dopo event_timestamp quando viene avviata la risposta della rete
Unità: microsecondo
network_info.response_completed_time_us int64 Microsecondi dopo event_timestamp al termine della risposta della rete
Unità: microsecondo

Che cosa puoi fare con i dati esportati?

Le sezioni seguenti offrono esempi di query che puoi eseguire in BigQuery sui dati Performance Monitoring esportati.

Corrispondenza con i dati visualizzati nella console

La dashboard di Firebase aggrega i dati giornalieri nel fuso orario America/Los_Angeles. Per ottenere lo stesso risultato visualizzato nella console, le funzioni di data devono impostare esplicitamenteAmerica/Los_Angeles come fuso orario, altrimenti la funzione di data utilizzeràper impostazione predefinita 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;

Visualizza la suddivisione della latenza media di avvio dell'app per paese

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;

Controllare il rapporto tra frame bloccati e varie condizioni

Ad esempio, puoi controllare il rapporto tra frame bloccati e la quantità di tempo che gli utenti trascorrono in ogni schermata della tua app quando utilizzano diversi tipi di rete (Wi-Fi, 4G e così via).

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;

Calcola il tasso di hit della cache per il caricamento di determinati tipi di file dal disco

Questa analisi presuppone che tu abbia eseguito l'instrumentazione di una traccia di codice personalizzata per il caricamento dal disco con un attributo personalizzato denominato file-extension e una metrica personalizzata (TRACE_METRIC) denominata cache-hit impostata su 1 in caso di hit della cache e su 0 in caso di mancata corrispondenza della cache.

Ad esempio, puoi calcolare il tasso di hit della cache per il caricamento di file PNG dal disco:

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);

Controlla l'ora del giorno in cui gli utenti inviano richieste di rete

Ad esempio, puoi controllare a che ora del giorno gli utenti degli Stati Uniti inviano richieste di rete dalla tua app:

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;

Porta i tuoi dati di Performance Monitoring ovunque

A volte potresti voler accedere ai tuoi dati Performance Monitoring lato server o inviarli a un'altra soluzione di terze parti. Al momento non è previsto alcun addebito per l'esportazione dei dati.

Per esportare i tuoi dati:

  • Utilizzo dell'interfaccia utente web di BigQuery

  • Eseguire il comando dell'interfaccia a riga di comando bq extract

  • Invio di un job di estrazione tramite l'API o le librerie client.

Prezzi

L'esportazione dei dati da Performance Monitoring non prevede costi e BigQuery offre generosi limiti di utilizzo senza costi. Per informazioni dettagliate, consulta i prezzi di BigQuery o la sandbox BigQuery.