Leistungsüberwachungsdaten nach BigQuery exportieren

Sie können Performance Monitoring-Daten aus Apple- und Android-Apps in BigQuery exportieren, um sie weiter zu analysieren. Mit BigQuery können Sie die Daten mit BigQuery SQL analysieren, zu einem anderen Cloud-Anbieter exportieren und sogar für Ihre benutzerdefinierten ML-Modelle verwenden.

BigQuery-Export aktivieren

  1. Rufen Sie in der Firebase-Konsole die Seite Integrationen auf und klicken Sie auf der Karte BigQuery auf Verknüpfen.

  2. 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 planen für die letzten 30 Tage oder für das letzte Datum, 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 das Dataset aber 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 sind in der Regel innerhalb von 24 Stunden nach der 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 erstellt, die alle erfassten Leistungsereignisse enthält. Jede Zeile in der Tabelle entspricht einem einzelnen Leistungsereignis, das eines der folgenden sein kann:

  • Dauer-Trace: Traces, für die standardmäßig der Messwert „Dauer“ erfasst wird. Dazu gehören App-Start, App im Vordergrund und App im Hintergrund sowie alle benutzerdefinierten Code-Traces, die vom Entwickler instrumentiert wurden.

    • event_type ist DURATION_TRACE
    • event_name entspricht dem Namen des Traces.
  • Trace-Messwert: benutzerdefinierte Messwerte, die mit benutzerdefinierten Code-Traces verknüpft sind, die von Entwicklern instrumentiert wurden

    • event_type ist TRACE_METRIC
    • event_name ist der Name des Messwerts.
    • parent_trace_name ist der Name des Traces, der diesen Messwert enthält.
  • Screen-Trace: Traces, die die gesamte Lebensdauer eines Bildschirms umfassen (Bildschirm-Rendering-Traces)

    • event_type ist SCREEN_TRACE
    • event_name ist das Präfix _st_ plus der tatsächliche Bildschirmname.
  • Netzwerkanfrage: Traces, die den gesamten Lebenszyklus einer Netzwerkanfrage abdecken (HTTP-Netzwerkanfrage-Traces)

    • event_type ist NETWORK_REQUEST
    • event_name ist 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, als das Ereignis auf dem Clientgerät begonnen hat (z. B. Beginn des Traces, Beginn der Netzwerkaktivität).
app_display_version String Die Version der Anwendung, z. B. „4.1.7“.
  • Für Android – VersionName
  • Für iOS: CFBundleShortVersionString
app_build_version String Build-Version der Anwendung (z. B. „1523456“)
  • Für Android – VersionCode
  • Für iOS: CFBundleVersion
os_version String Betriebssystemversion des Clientgeräts
  • Für Android: Android-API-Level (z. B. „26“)
  • Für iOS: iOS-Version (z. B. „11.4“)
device_name String Name des Clientgeräts (z. B. „Google Pixel“)
country String Der aus zwei Buchstaben bestehende Ländercode des Landes, in dem das Ereignis stattgefunden hat (z. B. „US“ oder „ZZ“ für unbekanntes Land).
Transportunternehmen String Mobilfunkanbieter des Clientgeräts
radio_type String Aktiver Funktyp zum Zeitpunkt des Ereignisses (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:
  • DURATION_TRACE: Traces, für die standardmäßig der Messwert „duration“ erfasst wird. Dazu gehören App-Start, App im Vordergrund und App im Hintergrund sowie alle benutzerdefinierten Code-Traces, die vom Entwickler instrumentiert wurden.
  • SCREEN_TRACE – Traces, die die gesamte Lebensdauer eines Bildschirms umfassen (Bildschirm-Rendering-Traces)
  • TRACE_METRIC – benutzerdefinierte Messwerte, die mit benutzerdefinierten Code-Traces verknüpft sind, die vom Entwickler instrumentiert wurden
  • NETWORK_REQUEST – Traces, die die gesamte Lebensdauer einer Netzwerkanfrage umfassen (HTTP-Netzwerkanfrage-Traces)
event_name String Name des Ereignisses
  • Für DURATION_TRACE – Name des Traces
  • Für TRACE_METRIC – Name des benutzerdefinierten Messwerts
  • Für SCREEN_TRACE – _st_ gefolgt vom Tracename
  • Für NETWORK_REQUEST – URL-Muster für Netzwerkanfragen
parent_trace_name String Name des übergeordneten Traces, 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
  • Für DURATION_TRACE und SCREEN_TRACE: Dauer vom Beginn bis zum Ende des Traces
  • Für TRACE_METRIC: Zeitspanne („duration“) vom Beginn bis zum Ende des übergeordneten Traces
Einheit: Mikrosekunde
trace_info.screen_info DATENSATZ Nur für SCREEN_TRACE vorhanden
trace_info.screen_info.slow_frame_ratio float64 Verhältnis von langsamen Frames für diesen Screen-Trace zwischen 0 und 1 (ein Wert von 0, 05 bedeutet beispielsweise, dass das Rendern von 5% der Frames für diese Screen-Instanz länger als 16 ms gedauert hat)
trace_info.screen_info.frozen_frame_ratio float64 Verhältnis der eingefrorenen Frames für diesen Bildschirm-Trace zwischen 0 und 1 (z. B. bedeutet ein Wert von 0, 05, dass das Rendern von 5% der Frames für diese Bildschirm-Instanz länger als 700 ms gedauert hat)
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 Netzwerkantwortnutzlast
Einheit: Byte
network_info.request_completed_time_us int64 Mikrosekunden nach event_timestamp, wenn das Senden der Netzwerkanfrage abgeschlossen ist
Einheit: Mikrosekunde
network_info.response_initiated_time_us int64 Mikrosekunden nach event_timestamp, wenn die Netzwerkantwort initiiert wird
Einheit: Mikrosekunde
network_info.response_completed_time_us int64 Mikrosekunden nach event_timestamp, wenn die Netzwerkantwort abgeschlossen ist
Einheit: Mikrosekunde

Was kann ich 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.

Daten in der Console abgleichen

Im Firebase-Dashboard werden die Tagesdaten in der Zeitzone America/Los_Angeles zusammengefasst. Damit die Ergebnisse mit denen in der Konsole übereinstimmen, sollte für Datumsfunktionen explizit America/Los_Angeles als Zeitzone festgelegt werden. 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 App-Startlatenz 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

So können Sie beispielsweise das Verhältnis von eingefrorenen Frames zusammen mit der Zeit, die Nutzer auf den einzelnen Bildschirmen Ihrer App verbringen, für verschiedene 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;

Berechnen der Cache-Trefferrate für das Laden bestimmter Dateitypen von der Festplatte

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 (TRACE_METRIC) namens cache-hit instrumentiert haben, der bei einem Cache-Treffer auf 1 und bei einem Cache-Fehler auf 0 festgelegt ist.

Sie können beispielsweise die Cache-Trefferrate für das Laden von PNG-Dateien von der Festplatte 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);

Tageszeit prüfen, zu der 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 überall nutzen

Manchmal möchten Sie serverseitig auf Ihre Performance Monitoring-Daten zugreifen oder sie an eine andere Drittanbieterlösung senden. Derzeit fallen für den Export von Daten keine Gebühren an.

Sie können Ihre Daten auf folgende Weise exportieren:

  • BigQuery-Web-UI verwenden

  • CLI-Befehl bq extract ausführen

  • Durch Senden eines Extraktionsjobs über die API oder die Clientbibliotheken

Preise

Der Export von Daten aus Performance Monitoring ist kostenlos und BigQuery bietet großzügige kostenlose Nutzungslimits. Ausführliche Informationen finden Sie unter BigQuery-Preise oder in der BigQuery-Sandbox.