Sie können Performance Monitoring-Daten aus Apple- und Android-Apps zur weiteren Analyse in BigQuery exportieren. Mit BigQuery können Sie die Daten mit BigQuery-SQL analysieren, sie zu einem anderen Cloud-Anbieter exportieren und sogar für Ihre benutzerdefinierten ML-Modelle verwenden.
BigQuery-Export aktivieren
Rufen Sie in der Firebase-Konsole die Seite Integrationen auf und klicken Sie dann auf der Karte BigQuery auf Verknüpfen.
Folgen Sie der Anleitung auf dem Bildschirm, um BigQuery zu aktivieren.
Wenn Sie den BigQuery-Export für Performance Monitoring aktivieren, geschieht Folgendes:
Firebase exportiert eine Kopie Ihrer vorhandenen Daten nach BigQuery. Die erste Übertragung von Daten für den Export kann bis zu 48 Stunden dauern.
- Sie können Daten-Backfills manuell für die letzten 30 Tage oder für das Datum planen, an dem Sie den BigQuery-Export aktiviert haben (je nachdem, welches Datum aktueller ist).
Nachdem das Dataset erstellt wurde, kann der Standort nicht mehr geändert werden. Sie können aber das Dataset an einen anderen Standort kopieren oder es manuell verschieben, d. h. an einem anderen Standort neu erstellen. Weitere Informationen finden Sie unter Dataset-Speicherort ändern.
Firebase richtet regelmäßige Synchronisierungen Ihrer Daten aus Ihrem Firebase-Projekt mit BigQuery ein. Diese täglichen Exportvorgänge werden in der Regel innerhalb von 24 Stunden nach ihrer Planung abgeschlossen.
Standardmäßig sind alle Apps in Ihrem Projekt mit BigQuery verknüpft. Alle Apps, die Sie dem Projekt später hinzufügen, werden automatisch mit BigQuery verknüpft. Sie können festlegen, welche Apps Daten senden.
Wenn Sie den BigQuery-Export deaktivieren möchten, heben Sie die Verknüpfung Ihres Projekts in der Firebase-Konsole auf.
Welche Daten werden nach BigQuery exportiert?
Für jede App im Projekt wird beim Export eine Tabelle mit allen erfassten Leistungsereignissen erstellt. Jede Zeile in der Tabelle ist ein einzelnes Leistungsereignis, das eines der folgenden sein kann:
Dauer-Trace: Traces, die standardmäßig den Messwert „Dauer“ erfassen, einschließlich App-Start, App im Vordergrund und App im Hintergrund sowie alle vom Entwickler instrumentierten benutzerdefinierten Code-Traces.
event_typeistDURATION_TRACEevent_nameist mit dem Trace-Namen identisch.
Trace-Messwert: Benutzerdefinierte Messwerte, die mit von Entwicklern instrumentierten benutzerdefinierten Code-Traces verknüpft sind.
event_typeistTRACE_METRICevent_nameist der Name des Messwerts.parent_trace_nameist der Trace-Name, der diesen Messwert enthält.
Bildschirm-Trace: Traces, die die Lebensdauer eines Bildschirms umfassen (Bildschirm-Rendering-Traces)
event_typeistSCREEN_TRACEevent_nameist das Präfix_st_plus der tatsächliche Bildschirmname
Netzwerkanfrage: Traces, die die Lebensdauer einer Netzwerkanfrage umfassen (HTTP-Netzwerkanfrage-Traces)
event_typeistNETWORK_REQUESTevent_nameist das kategorisierte Muster der URL der Netzwerkanfrage.
Jedes Leistungsereignis enthält Attribute des Ereignisses (z. B. Land und Mobilfunkanbieter des Clientgeräts) sowie ereignisspezifische Informationen:
- Dauer-Traces, Trace-Messwerte und Bildschirm-Traces enthalten
trace_info - Trace-Messwerte enthalten
trace_info.metric_info - Bildschirm-Traces enthalten
trace_info.screen_info - Netzwerk-Traces enthalten
network_info
Detailliertes Datenschema
| Feldname | Typ | Beschreibung |
|---|---|---|
| event_timestamp | timestamp | Zeitstempel seit der Epoche, zu dem das Ereignis auf dem Clientgerät gestartet wurde (Trace-Start, Netzwerkstart usw.) |
| app_display_version | String | Anzeigeversion der Anwendung (z. B. „4.1.7“)
|
| app_build_version | String | Build-Version der Anwendung (z. B. „1523456“)
|
| os_version | String | Betriebssystemversion des Clientgeräts
|
| device_name | String | Name des Clientgeräts (z. B. „Google Pixel“) |
| country | String | Zweistelliger Ländercode des Landes, in dem das Ereignis stattgefunden hat (z. B. „US“ oder „ZZ“ für ein unbekanntes Land) |
| Transportunternehmen | String | Mobilfunkanbieter des Clientgeräts |
| radio_type | String | Aktiver Funktyp, als das Ereignis stattfand (z. B. „WIFI“) |
| custom_attributes | ARRAY<RECORD> | Alle benutzerdefinierten Attribute, die diesem Ereignis zugeordnet sind |
| custom_attributes.key | String | Schlüssel des benutzerdefinierten Attributs |
| custom_attributes.value | String | Wert des benutzerdefinierten Attributs |
| event_type | String | Typ des Ereignisses; mögliche Werte:
|
| event_name | String | Name des Ereignisses
|
| parent_trace_name | String | Name des übergeordneten Trace, der den Trace-Messwert enthält Nur für TRACE_METRIC vorhanden |
| trace_info | DATENSATZ | Nur für DURATION_TRACE, SCREEN_TRACE und TRACE_METRIC vorhanden |
| trace_info.duration_us | int64 |
|
| trace_info.screen_info | DATENSATZ | Nur für SCREEN_TRACE vorhanden |
| trace_info.screen_info.slow_frame_ratio | float64 | Verhältnis der langsamen Frames für diesen Bildschirm-Trace, zwischen 0 und 1 (ein Wert von 0,05 bedeutet beispielsweise, dass das Rendering für 5% der Frames für diese Bildschirm-Instanz mehr als 16 ms dauerte) |
| trace_info.screen_info.frozen_frame_ratio | float64 | Verhältnis der eingefrorenen Frames für diesen Bildschirm-Trace, zwischen 0 und 1 (ein Wert von 0,05 bedeutet beispielsweise, dass 5% der Frames für diese Bildschirm-Instanz länger als 700 ms zum Rendern benötigt haben) |
| trace_info.metric_info | DATENSATZ | Nur für TRACE_METRIC vorhanden |
| trace_info.metric_info.metric_value | int64 | Wert des Trace-Messwerts |
| network_info | DATENSATZ | Nur für NETWORK_REQUEST vorhanden |
| network_info.response_code | int64 | HTTP-Antwortcode für die Netzwerkantwort (z. B. 200, 404) |
| network_info.response_mime_type | String | MIME-Typ der Netzwerkantwort (z. B. „text/html“) |
| network_info.request_http_method | String | HTTP-Methode der Netzwerkanfrage (z. B. „GET“ oder „POST“) |
| network_info.request_payload_bytes | int64 | Größe der Nutzlast der Netzwerkanfrage Einheit: Byte |
| network_info.response_payload_bytes | int64 | Größe der Nutzlast der Netzwerkantwort Einheit: Byte |
| network_info.request_completed_time_us | int64 | Mikrosekunden nach event_timestamp, wenn das Senden der Netzwerkanfrage abgeschlossen istEinheit: Mikrosekunde |
| network_info.response_initiated_time_us | int64 | Mikrosekunden nach event_timestamp, wenn die Netzwerkantwort initiiert wirdEinheit: Mikrosekunde |
| network_info.response_completed_time_us | int64 | Mikrosekunden nach event_timestamp, wenn die Netzwerkantwort abgeschlossen istEinheit: Mikrosekunde |
Was können Sie mit den exportierten Daten tun?
In den folgenden Abschnitten finden Sie Beispiele für Abfragen, die Sie in BigQuery für Ihre exportierten Performance Monitoring-Daten ausführen können.
Mit den in der Konsole angezeigten Daten übereinstimmen
Im Firebase-Dashboard werden die täglichen Daten in der Zeitzone America/Los_Angeles zusammengefasst.
Damit die Ergebnisse mit denen in der Console übereinstimmen, sollten Datumsfunktionen explizit America/Los_Angeles als Zeitzone festlegen. Andernfalls wird standardmäßig UTC verwendet.
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;
Aufschlüsselung der durchschnittlichen Latenz beim App-Start nach Land ansehen
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;
Verhältnis eingefrorener Frames unter verschiedenen Bedingungen prüfen
Du kannst beispielsweise das Verhältnis von eingefrorenen Frames zur Zeit, die Nutzer auf den einzelnen Bildschirmen deiner App verbringen, bei verschiedenen Funktypen (WLAN, 4G usw.) prüfen.
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;
Cache-Trefferquote für das Laden bestimmter Dateitypen vom Laufwerk berechnen
Bei dieser Analyse wird davon ausgegangen, dass Sie einen benutzerdefinierten Code-Trace für das Laden von der Festplatte mit einem benutzerdefinierten Attribut namens file-extension und einem benutzerdefinierten Messwert (einem TRACE_METRIC) namens cache-hit instrumentiert haben, der bei einem Cache-Treffer auf 1 und bei einem Cache-Fehler auf 0 gesetzt wird.
Sie können beispielsweise die Cache-Trefferquote für das Laden von PNG-Dateien vom Laufwerk berechnen:
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);
Prüfen, zu welcher Tageszeit Nutzer Netzwerkanfragen senden
Sie können beispielsweise prüfen, zu welcher Tageszeit Nutzer aus den USA Netzwerkanfragen über Ihre App senden:
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;
Performance Monitoring-Daten überallhin mitnehmen
Manchmal möchten Sie serverseitig auf Ihre Performance Monitoring-Daten zugreifen oder sie an eine andere Drittanbieterlösung senden. Für den Export von Daten fallen derzeit keine Gebühren an.
Sie können Ihre Daten so exportieren:
BigQuery-Web-UI verwenden
Führen Sie den Befehlszeilenbefehl
bq extractaus.Durch Senden eines Extraktionsjobs über die API oder die Clientbibliotheken
Preise
Für den Export von Daten aus Performance Monitoring fallen keine Gebühren an und BigQuery bietet großzügige kostenlose Nutzungslimits. Ausführliche Informationen finden Sie unter BigQuery-Preise oder in der BigQuery-Sandbox.