Exporta los datos de Performance Monitoring a BigQuery

Puedes exportar datos de Performance Monitoring desde apps para Apple y Android a BigQuery para realizar un análisis más detallado. BigQuery te permite analizar los datos con BigQuery SQL, exportarlos a otro proveedor de servicios en la nube o usarlos en tus modelos de AA personalizados.

Habilita la exportación de BigQuery

  1. Ve a la página Integraciones de Firebase console y haz clic en Vincular en la tarjeta BigQuery.

  2. Sigue las instrucciones que aparecen en la pantalla para habilitar BigQuery.

    Cuando habilitas la exportación de BigQuery para Performance Monitoring, ocurre lo siguiente:

    • Firebase exporta una copia de tus datos existentes a BigQuery. La propagación inicial de los datos que se van a exportar puede demorar hasta 48 horas en completarse.

    • Después de crear el conjunto de datos, no se puede cambiar la ubicación, pero puedes copiar el conjunto de datos en una ubicación diferente o moverlo manualmente (volver a crearlo) a otra ubicación. Para obtener más información, consulta Cambia la ubicación del conjunto de datos.

    • Firebase configura sincronizaciones frecuentes de los datos del proyecto de Firebase con BigQuery. Por lo general, estas operaciones de exportación diaria finalizan 24 horas después de su programación.

    • De forma predeterminada, todas las apps de tu proyecto están vinculadas a BigQuery. Todas las apps que agregues al proyecto se vincularán automáticamente a BigQuery. Puedes administrar qué apps envían datos.

Para desactivar la exportación a BigQuery, desvincula el proyecto en Firebase console.

¿Qué datos se exportan a BigQuery?

La exportación crea una tabla en cada app del proyecto que incluye todos los eventos de rendimiento captados. Cada fila de la tabla es un evento de rendimiento único que puede ser alguno de los que se presentan a continuación:

  • Seguimiento de duración: Seguimiento que recopila, de forma predeterminada, la métrica “duración”, que incluye el inicio de la app, el de inicio de la app y el uso de la app en segundo plano como seguimientos de código personalizado instrumentados del desarrollador

    • event_type es DURATION_TRACE
    • event_name es el mismo que el nombre del seguimiento
  • Métrica de seguimiento: Métricas personalizadas asociadas con seguimientos de código personalizado instrumentados por el desarrollador.

    • event_type es TRACE_METRIC
    • event_name es el nombre de la métrica
    • parent_trace_name es el nombre del seguimiento que contiene esta métrica
  • Seguimiento de pantalla: Seguimientos que abarcan la duración de una pantalla (seguimiento de procesamiento de pantalla)

    • event_type es SCREEN_TRACE
    • event_name es el prefijo _st_ junto con el nombre real de la pantalla
  • Solicitud de red: Seguimientos que abarcan la vida útil de una solicitud de red (seguimientos de solicitudes de red HTTP).

    • event_type es NETWORK_REQUEST
    • event_name es el patrón clasificado de la URL de la solicitud de red.

Cada evento de rendimiento contiene atributos como el país y el proveedor del dispositivo del cliente, así como información específica del evento, como se muestra a continuación:

  • Los seguimientos de duración, las métricas de seguimiento y los seguimientos de pantalla contienen trace_info.
  • Las métricas de seguimiento contienen trace_info.metric_info
  • Los seguimientos de la pantalla contienen trace_info.screen_info
  • Los seguimientos de la red contienen network_info

Esquema detallado de datos

Nombre del campo Tipo Descripción
event_timestamp timestamp Marca de tiempo desde el punto de inicio cuando comenzó el evento en el dispositivo del cliente (inicio del seguimiento, inicio de red, etcétera.)
app_display_version string La versión de la pantalla de la aplicación (por ejemplo, “4.1.7”)
  • Para Android — VersionName
  • Para iOS — CFBundleShortVersionString
app_build_version string La versión compilada de la aplicación (por ejemplo, “1523456”)
  • Para Android — VersionCode
  • Para iOS — CFBundleVersion
os_version string La versión del SO del dispositivo del cliente
  • Para Android: El nivel de API de Android (por ejemplo, “26”)
  • Para iOS: La versión de iOS (por ejemplo, “11.4”)
device_name string Nombre del dispositivo del cliente (por ejemplo, “Google Pixel”)
País string Código de país de dos letras del lugar donde ocurrió el evento (por ejemplo, “US”, o “ZZ” para un país desconocido)
proveedor string Proveedor del dispositivo del cliente
radio_type string Tipo de radio activa cuando ocurrió el evento (por ejemplo, “Wi-Fi”)
custom_attributes ARREGLO<RECORD> Todos los atributos personalizados adjuntados a este evento
custom_attributes.key string Clave del atributo personalizado
custom_attributes.value string Valor del atributo personalizado
event_type string Valores posibles según el tipo de evento:
  • DURATION_TRACE: Seguimientos que recopilan, de forma predeterminada, la métrica “duración”, que incluye el inicio de la app, el inicio de la app en primer plano y la app en segundo plano, así como cualquier seguimientos de código personalizado por el desarrollador
  • SCREEN_TRACE: Seguimientos que abarcan la duración de una pantalla (seguimientos de procesamiento de pantalla)
  • TRACE_METRIC: Métricas personalizadas asociadas con seguimientos de código personalizados instrumentados por el desarrollador
  • NETWORK_REQUEST: Seguimientos que abarcan la duración de una solicitud de red (seguimientos de solicitudes de red HTTP)
event_name string Nombre del evento
  • Para DURATION_TRACE: El nombre del seguimiento
  • Para TRACE_METRIC: El nombre de métrica personalizada
  • Para SCREEN_TRACE: _st_ seguido del nombre del seguimiento
  • Para NETWORK_REQUEST: El patrón de URL de solicitud de red
parent_trace_name string Nombre del seguimiento superior que lleva la métrica de seguimiento
Presente únicamente para TRACE_METRIC
trace_info RECORD Presente únicamente para DURATION_TRACE, SCREEN_TRACE y TRACE_METRIC
trace_info.duration_us int64
  • Para DURATION_TRACE y SCREEN_TRACE: Duración del tiempo (“duración”) desde el principio hasta el final del seguimiento
  • Para TRACE_METRIC: La duración del tiempo (“duración”) desde el principio hasta el final del seguimiento superior
Unidad: microsegundo
trace_info.screen_info RECORD Presente únicamente para SCREEN_TRACE
trace_info.screen_info.slow_frame_ratio float64 La proporción de fotogramas lentos para este seguimiento de pantalla, entre 0 y 1 (por ejemplo, un valor de 0.05 significa que el 5% de los fotogramas de esta instancia de pantalla tomaron más de 16 ms en procesarse).
trace_info.screen_info.frozen_frame_ratio float64 La proporción de los fotogramas congelados para este seguimiento de pantalla, entre 0 y 1 (por ejemplo, un valor de 0.05 significa que el 5% de los fotogramas de esta instancia de pantalla tomaron más de 700 ms en procesarse).
trace_info.metric_info RECORD Presente únicamente para TRACE_METRIC
trace_info.metric_info.metric_value int64 Valor de la métrica de seguimiento
network_info RECORD Presente únicamente para NETWORK_REQUEST
network_info.response_code int64 Código de respuesta HTTP para la respuesta de red (por ejemplo, 200, 404)
network_info.response_mime_type string Tipo de respuesta de red MIME (por ejemplo, “text/html”)
network_info.request_http_method string Método HTTP de la solicitud de red (por ejemplo, “GET” o “POST”)
network_info.request_payload_bytes int64 Tamaño de la carga útil de la solicitud de red
Unidad: byte
network_info.response_payload_bytes int64 Tamaño de la carga útil de la respuesta de red
Unidad: byte
network_info.request_completed_time_us int64 Microsegundos luego de la event_timestamp cuando se completa el envío de la solicitud de red
Unidad: microsegundo
network_info.response_initiated_time_us int64 Microsegundos luego de la event_timestamp cuando se completa la respuesta de red
Unidad: microsegundo
network_info.response_completed_time_us int64 Microsegundos luego de event_timestamp cuando se completa la respuesta de red
Unidad: microsegundo

¿Qué puedes hacer con los datos exportados?

En las siguientes secciones, se ofrecen ejemplos de consultas que puedes ejecutar en BigQuery con tus datos de Performance Monitoring exportados.

Haz coincidir los datos que se ven en la consola

El panel de Firebase agrega datos diarios en la zona horaria de America/Los_Angeles. Para que coincida con lo que se vio en la consola, las funciones de fecha deben configurar America/Los_Angeles de forma explícita como la zona horaria; de lo contrario, la función de fecha usará UTC de forma predeterminada.

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;

Mira el desglose de la latencia de inicio promedio de la app por país

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;

Comprueba la proporción de los marcos congelados en relación con varios estados

Por ejemplo, puedes comprobar la proporción de los marcos congelados junto con el tiempo que los usuarios pasan en cada pantalla de tu app cuando están en diferentes tipos de radio (Wi-Fi, 4G, etc.) de la siguiente forma:

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;

Calcula la tasa de aciertos de caché para la descarga de algunos tipos de archivos desde el disco

En este análisis, se da por sentado que instrumentaste un seguimiento de código personalizado para cargar desde el disco con un atributo personalizado llamado file-extension y una métrica personalizada (una TRACE_METRIC) llamada cache-hit configurada como 1 si el acierto de caché y 0 si es un error de caché.

Por ejemplo, puedes calcular la tasa de aciertos de caché para descargar archivos PNG desde el disco de la siguiente forma:

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

Comprueba el momento del día en que los usuarios envían solicitudes de red

Por ejemplo, puedes comprobar el momento del día en que los usuarios de Estados Unidos envían solicitudes de red desde tu 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;

Lleva tus datos de Performance Monitoring a cualquier lugar

Se recomienda usar esta opción cuando quieras acceder a tus datos de Performance Monitoring en el servidor o cuando quieras enviarlos a otra solución de terceros. Actualmente, no se aplican cargos por exportar datos.

Puedes usar estos métodos para exportar los datos:

  • Usar la IU web de BigQuery

  • Ejecutar el comando bq extract de la CLI

  • Enviar un trabajo extract a través de la API o las bibliotecas cliente

Precios

No se aplican cargos por exportar datos de Performance Monitoring, y BigQuery ofrece límites de uso generosos sin costo. Para obtener información detallada, consulta los precios de BigQuery o la zona de pruebas de BigQuery.