Puedes exportar tus datos de Firebase Crashlytics a BigQuery para analizarlos en detalle. BigQuery te permite analizar los datos con BigQuery SQL, exportarlos a otro proveedor de servicios en la nube y usarlos en los paneles personalizados y de visualización con Google Data Studio.
Habilita la exportación a BigQuery
En Firebase console, ve a la página Integraciones.
En la tarjeta de BigQuery, haz clic en Vincular.
Sigue las instrucciones en pantalla para habilitar la exportación a BigQuery.
Si deseas obtener acceso casi en tiempo real a tus datos de Crashlytics en BigQuery, considera actualizar a la exportación mediante transmisión.
¿Qué sucede cuando habilitas la exportación?
Selecciona la ubicación del conjunto de datos. 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 de las exportaciones existentes.
Esta ubicación solo se aplica a los datos exportados a BigQuery y no afecta la ubicación de los datos almacenados para su uso en el panel Crashlytics de Firebase console o en Android Studio.
Según la configuración predeterminada, todas las apps de tu proyecto se vinculan a BigQuery y cualquier app que agregues al proyecto también se vinculará automáticamente a BigQuery. Puedes administrar qué apps envían datos.
Firebase configura sincronizaciones diarias de tus datos con BigQuery.
Después de vincular tu proyecto, por lo general, debes esperar hasta la sincronización del día siguiente para que tu primer conjunto de datos se exporte a BigQuery.
La sincronización diaria se realiza una vez al día, independientemente de cualquier exportación programada que hayas configurado en BigQuery. Ten en cuenta que el tiempo y la duración del trabajo de sincronización pueden cambiar, por lo que no recomendamos programar operaciones o tareas descendentes en función de un tiempo específico de la exportación.
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.
Para cada app vinculada, esta exportación incluye una tabla por lotes que contiene los datos de la sincronización diaria.
Puedes programar de forma manual el reabastecimiento de datos para la tabla por lotes hasta los últimos 30 días o para la fecha más reciente en la que habilitaste la exportación a BigQuery (la opción que sea más reciente).
Ten en cuenta que, si habilitaste la exportación de datos de Crashlytics antes de mediados de octubre de 2024, también puedes reabastecer los datos 30 días antes del día en que habilitaste la exportación.
Si habilitas la exportación de flujos de Crashlytics a BigQuery, todas las apps vinculadas también tendrán una tabla en tiempo real que contiene datos que se actualizan constantemente.
Para desactivar la exportación a BigQuery, desvincula el proyecto en Firebase console.
¿Qué datos se exportan a BigQuery?
Los datos de Firebase Crashlytics se exportan a un conjunto de datos BigQuery llamado
firebase_crashlytics
. De forma predeterminada, se crearán tablas individuales
en el conjunto de datos Crashlytics para cada app de tu proyecto. Firebase nombra las
tablas según el identificador de la app, convierte los puntos en guiones bajos y
agrega el nombre de la plataforma al final.
Por ejemplo, los datos de una app para Android que tenga el nombre de paquete com.google.test
estarían en una tabla llamada com_google_test_ANDROID
. Esta tabla por lotes se actualiza
una vez al día. Si habilitas la exportación de flujos de Crashlytics a
BigQuery, los datos de Crashlytics también se transmitirán en tiempo real
a una tabla llamada com_google_test_ANDROID_REALTIME
.
Cada fila de la tabla representa un evento que ocurrió en la app, incluidas las fallas, los errores recuperables y los ANR.
Exportación de flujos de Crashlytics a BigQuery
Puedes transmitir tus datos de Crashlytics en tiempo real con la transmisión de BigQuery. Puedes usarlo para cualquier propósito que requiera datos en vivo, como presentar información en un panel de transmisiones en vivo, mirar un lanzamiento en vivo o supervisar problemas de aplicaciones que activen alertas y flujos de trabajo personalizados.
Cuando habilitas la exportación de flujos de Crashlytics a BigQuery, además de la tabla por lotes, también tendrás una tabla en tiempo real. Las siguientes son las diferencias que debes tener en cuenta entre las tablas:
Tabla por lotes | Tabla en tiempo real |
---|---|
|
|
La tabla por lotes es ideal para el análisis a largo plazo y la identificación de tendencias en el tiempo, ya que se almacenan los eventos de forma duradera antes de escribirlos y se pueden reabastecer en la tabla por hasta 30 días.* Cuando se escriben datos en la tabla en tiempo real, también se escriben de inmediato en BigQuery, por lo que es ideal para los paneles de transmisiones en vivo y las alertas personalizadas. Ambas tablas se pueden combinar con una consulta de unión para obtener los beneficios de ambas.
De forma predeterminada, las particiones de las tablas en tiempo real tienen una fecha de vencimiento de 30 días. Para cambiar esta configuración, consulta Configura el vencimiento de la partición en la documentación de BigQuery.
* Consulta los detalles sobre la compatibilidad con el reabastecimiento en Actualiza a la nueva infraestructura de exportación.
Habilita la exportación de flujos de Crashlytics a BigQuery
En Firebase console, ve a la página Integraciones.
En la tarjeta de BigQuery, haz clic en Administrar.
Selecciona la casilla de verificación Incluir transmisión.
Esta acción habilita la transmisión para todas las aplicaciones vinculadas.
¿Qué puedes hacer con los datos exportados?
Las exportaciones a BigQuery contienen datos sin procesar sobre fallas que incluyen el tipo de dispositivo, el sistema operativo, las excepciones (apps para Android) o los errores (apps para Apple) y los registros de Crashlytics, entre otros datos.
Revisa exactamente qué datos de Crashlytics se exportan y su esquema de la tabla más adelante en esta página.
Usa una plantilla de Data Studio
Para habilitar los datos en tiempo real en tu plantilla de Data Studio, sigue las instrucciones de la sección Visualiza los datos exportados de Crashlytics con Data Studio.
Crea vistas
Puedes transformar las consultas en vistas con la IU de BigQuery. Para obtener instrucciones detalladas, consulta Crea vistas en la documentación de BigQuery.
Ejecuta consultas
En los siguientes ejemplos, se muestran las consultas que puedes ejecutar en tus datos de Crashlytics para generar informes que agregan datos de eventos de fallas a resúmenes más fáciles de comprender. Dado que estos tipos de informes no están disponibles en el panel de Crashlytics de Firebase console, pueden complementar tu análisis y comprensión de los datos de fallas.
Ejemplo 1: Fallas por día
Luego de resolver la mayor cantidad de errores posible, crees que tu equipo ya puede lanzar una app nueva para compartir fotos. Pero antes de hacerlo, quieres revisar la cantidad de fallas por día durante el último mes para asegurarte de que la búsqueda de errores haya hecho que la app sea más estable a lo largo del tiempo.
Esta es una consulta de ejemplo de una app para Android. En el caso de una app para iOS, usa su ID del paquete
y IOS
(en lugar del nombre del paquete y ANDROID
).
SELECT COUNT(DISTINCT event_id) AS number_of_crashes, FORMAT_TIMESTAMP("%F", event_timestamp) AS date_of_crashes FROM `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID` GROUP BY date_of_crashes ORDER BY date_of_crashes DESC LIMIT 30;
Ejemplo 2: Busca las fallas más generalizadas
Para priorizar adecuadamente los planes de producción, quieres encontrar las 10 fallas más generalizadas de tu app. Generas una consulta que proporciona los datos pertinentes.
Esta es una consulta de ejemplo de una app para Android. En el caso de una app para iOS, usa su ID del paquete
y IOS
(en lugar del nombre del paquete y ANDROID
).
SELECT DISTINCT issue_id, COUNT(DISTINCT event_id) AS number_of_crashes, COUNT(DISTINCT installation_uuid) AS number_of_impacted_user, blame_frame.file, blame_frame.line FROM `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID` WHERE event_timestamp >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(),INTERVAL 168 HOUR) AND event_timestamp < CURRENT_TIMESTAMP() GROUP BY issue_id, blame_frame.file, blame_frame.line ORDER BY number_of_crashes DESC LIMIT 10;
Ejemplo 3: Los 10 dispositivos con más fallas
El otoño es la temporada de los teléfonos nuevos Tu empresa sabe que esto también significa que durante esta temporada aparecen problemas específicos de cada teléfono, en especial para Android. Para adelantarte a los inminentes problemas de compatibilidad, crea una consulta que identifique los 10 dispositivos que presentaron la mayor cantidad de fallas en la semana anterior (168 horas).
Esta es una consulta de ejemplo de una app para Android. En el caso de una app para iOS, usa su ID del paquete
y IOS
(en lugar del nombre del paquete y ANDROID
).
SELECT device.model, COUNT(DISTINCT event_id) AS number_of_crashes FROM `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID` WHERE event_timestamp >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 168 HOUR) AND event_timestamp < CURRENT_TIMESTAMP() GROUP BY device.model ORDER BY number_of_crashes DESC LIMIT 10;
Ejemplo 4: Filtra por clave personalizada
Eres un desarrollador de videojuegos que quiere saber cuál de los niveles de su juego presenta la mayor cantidad de fallas.
Para hacer un seguimiento de esa estadística, configura
una clave Crashlytics personalizada
llamada current_level
y actualizarla cada vez que un usuario alcance un nivel nuevo.
Swift
Crashlytics.sharedInstance().setIntValue(3, forKey: "current_level");
Objective-C
CrashlyticsKit setIntValue:3 forKey:@"current_level";
Java
Crashlytics.setInt("current_level", 3);
Con esa clave en tu exportación a BigQuery, puedes escribir una consulta para
informar la distribución de los valores de current_level
asociados con cada evento
de falla.
Esta es una consulta de ejemplo de una app para Android. En el caso de una app para iOS, usa su ID del paquete
y IOS
(en lugar del nombre del paquete y ANDROID
).
SELECT COUNT(DISTINCT event_id) AS num_of_crashes, value FROM `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID` UNNEST(custom_keys) WHERE key = "current_level" GROUP BY key, value ORDER BY num_of_crashes DESC
Ejemplo 5: Extracción del ID de usuario
Tienes una app para Android en acceso anticipado. A la mayoría de sus usuarios les encanta, pero tres han experimentado una cantidad inusual de fallas. Para llegar a la raíz del problema, escribe una consulta que extrae todos los eventos de fallas de esos usuarios a través de sus ID de usuario.
Esta es una consulta de ejemplo de una app para Android. En el caso de una app para iOS, usa su ID del paquete
y IOS
(en lugar del nombre del paquete y ANDROID
).
SELECT * FROM `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID` WHERE user.id IN ("USER_ID_1", "USER_ID_2", "USER_ID_3") ORDER BY user.id
Ejemplo 6: Busca a todos los usuarios que experimentan una falla en particular
Tu equipo lanzó accidentalmente un error crítico a un grupo de verificadores beta. Tu equipo pudo usar la consulta del ejemplo "Busca fallas más generalizadas" anterior para identificar el ID de la falla específica. Ahora tu equipo desea ejecutar una consulta para extraer la lista de usuarios de la app que sufrieron esta falla.
Esta es una consulta de ejemplo de una app para Android. En el caso de una app para iOS, usa su ID del paquete
y IOS
(en lugar del nombre del paquete y ANDROID
).
SELECT user.id as user_id FROM `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID` WHERE issue_id = "ISSUE_ID" AND application.display_version = "APP_VERSION" AND user.id != "" ORDER BY user.id;
Ejemplo 7: Cantidad de usuarios afectados por una falla, desglosada por país
Tu equipo detectó un error crítico durante el lanzamiento de una versión nueva. Pudiste usar la consulta del ejemplo "Busca fallas más generalizadas" anterior para identificar el ID de la falla específica. Tu equipo quiere comprobar si esta falla se propagó a los usuarios de distintos países del mundo.
Para escribir esta consulta, tu equipo deberá hacer lo siguiente:
Habilitar la exportación de datos de Google Analytics a BigQuery. Consulta Exporta datos de proyectos a BigQuery.
Actualizar la app para que pase un ID de usuario al SDK de Google Analytics y al SDK de Crashlytics.
Swift
Crashlytics.sharedInstance().setUserIdentifier("123456789"); Analytics.setUserID("123456789");
Objective-C
CrashlyticsKit setUserIdentifier:@"123456789"; FIRAnalytics setUserID:@"12345678 9";
Java
Crashlytics.setUserIdentifier("123456789"); mFirebaseAnalytics.setUserId("123456789");
Escribir una consulta que use el campo ID de usuario para unir los eventos del conjunto de datos de Google Analytics con las fallas del conjunto de datos de Crashlytics.
Esta es una consulta de ejemplo de una app para Android. En el caso de una app para iOS, usa su ID del paquete y
IOS
(en lugar del nombre del paquete yANDROID
).SELECT DISTINCT c.issue_id, a.geo.country, COUNT(DISTINCT c.user.id) as num_users_impacted FROM `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID` c INNER JOIN `PROJECT_ID.analytics_TABLE_NAME.events_*` a on c.user.id = a.user_id WHERE c.issue_id = "ISSUE_ID" AND a._TABLE_SUFFIX BETWEEN '20190101' AND '20200101' GROUP BY c.issue_id, a.geo.country, c.user.id
Ejemplo 8: 5 problemas principales hasta el momento
Esta es una consulta de ejemplo de una app para Android. En el caso de una app para iOS, usa su ID del paquete
y IOS
(en lugar del nombre del paquete y ANDROID
).
SELECT issue_id, COUNT(DISTINCT event_id) AS events FROM `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID_REALTIME` WHERE DATE(event_timestamp) = CURRENT_DATE() GROUP BY issue_id ORDER BY events DESC LIMIT 5;
Ejemplo 9: 5 problemas principales desde DATE, incluido el día actual
También puedes combinar las tablas por lotes y en tiempo real con una consulta de unión para agregar
información en tiempo real a los datos por lotes confiables. Como event_id
es una clave
primaria, puedes usar DISTINCT event_id
para anular la duplicación de los eventos comunes de ambas
tablas.
Esta es una consulta de ejemplo de una app para Android. En el caso de una app para iOS, usa su ID del paquete
y IOS
(en lugar del nombre del paquete y ANDROID
).
SELECT issue_id, COUNT(DISTINCT event_id) AS events FROM ( SELECT issue_id, event_id, event_timestamp FROM `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID_REALTIME` UNION ALL SELECT issue_id, event_id, event_timestamp FROM `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID`) WHERE event_timestamp >= "YYYY_MM_DD" GROUP BY issue_id ORDER BY events DESC LIMIT 5;
Comprende el esquema de Crashlytics en BigQuery
Cuando configuras la exportación de datos de Crashlytics a BigQuery, Firebase exporta los eventos recientes (fallas, errores recuperables y de ANR), incluidos los eventos de hasta dos días antes de la vinculación, con la opción de reabastecer hasta 30 días.
Desde ese momento y hasta que desactives la exportación, Firebase exportará eventos de Crashlytics a diario. Es posible que los datos tarden algunos minutos en estar disponibles en BigQuery luego de cada exportación.
Conjuntos de datos
Crashlytics crea un conjunto de datos nuevo en BigQuery para los datos de Crashlytics. El conjunto de datos abarca el proyecto completo, incluso si tiene varias apps.
Tablas
Crashlytics crea una tabla en el conjunto de datos por cada app del proyecto, a menos que hayas inhabilitado la exportación de datos para alguna. Firebase nombra las tablas según el identificador de la app, convierte los puntos en guiones bajos y agrega el nombre de la plataforma al final.
Por ejemplo, los datos de una app para Android que tenga el nombre de paquete com.google.test
estarían en una tabla llamada com_google_test_ANDROID
, y los datos en tiempo real
(si se habilitaron) estarían en una tabla llamada com_google_test_ANDROID_REALTIME
.
Las tablas contienen un conjunto estándar de datos de Crashlytics, además de las claves personalizadas de Crashlytics que definas en tu app.
Filas
Cada fila de una tabla representa un error que encontró la aplicación.
Columnas
Las columnas de una tabla son idénticas para las fallas, los errores recuperables y los ANR. Si está habilitada la exportación de transmisiones de Crashlytics a BigQuery, la tabla en tiempo real tendrá las mismas columnas que la tabla por lotes. Ten en cuenta que es posible que tengas columnas en filas que representen eventos que no tienen seguimientos de pila.
Las columnas incluidas en la exportación se indican en esta tabla:
Nombre del campo | Tipo de datos | Descripción |
---|---|---|
platform |
STRING | La plataforma de la app tal como se registró en el proyecto de Firebase
(valores válidos: IOS o ANDROID )
|
bundle_identifier |
STRING | El identificador único de la app tal como se registró en el proyecto de Firebase
(por ejemplo, com.google.gmail En el caso de las apps de la plataforma de Apple, este es el ID del paquete de la app. En el caso de las apps para Android, este es el nombre del paquete de la app. |
event_id |
STRING | El ID único del evento |
is_fatal |
BOOLEAN | Determina si la app falló |
error_type |
STRING | El tipo de error del evento (por ejemplo, FATAL ,
NON_FATAL , ANR , etcétera). |
issue_id |
STRING | El problema asociado con el evento |
variant_id |
STRING | La variante del problema asociada con este evento Ten en cuenta que no todos los eventos tienen una variante de problema asociada. |
event_timestamp |
TIMESTAMP | Cuándo ocurrió el evento |
device |
RECORD | El dispositivo en el que ocurrió el evento |
device.manufacturer |
STRING | El fabricante del dispositivo |
device.model |
STRING | El modelo del dispositivo |
device.architecture |
STRING | Por ejemplo, X86_32 , X86_64 , ARMV7 ,
ARM64 , ARMV7S o ARMV7K |
memory |
RECORD | El estado de la memoria del dispositivo |
memory.used |
INT64 | Bytes de memoria utilizados |
memory.free |
INT64 | Bytes de memoria restantes |
storage |
RECORD | El almacenamiento continuo del dispositivo |
storage.used |
INT64 | Bytes de almacenamiento utilizados |
storage.free |
INT64 | Bytes de almacenamiento restantes |
operating_system |
RECORD | Los detalles del SO en el dispositivo |
operating_system.display_version |
STRING | La versión del SO en el dispositivo |
operating_system.name |
STRING | El nombre del SO en el dispositivo |
operating_system.modification_state |
STRING | Si el dispositivo se modificó
(por ejemplo, una app con jailbreak es MODIFIED y una app con permisos de administrador es
UNMODIFIED ) |
operating_system.type |
STRING | (Solo para apps de Apple) El tipo de SO que se ejecuta en el dispositivo (por ejemplo,
IOS , MACOS , etcétera). |
operating_system.device_type |
STRING | El tipo de dispositivo (por ejemplo, MOBILE , TABLET ,
TV , etcétera), también conocido como "categoría de dispositivo" |
application |
RECORD | La app que generó el evento |
application.build_version |
STRING | La versión de compilación de la app |
application.display_version |
STRING | |
user |
RECORD | (Opcional) Información recopilada sobre el usuario de la app |
user.name |
STRING | (Opcional) El nombre del usuario |
user.email |
STRING | (Opcional) La dirección de correo electrónico del usuario |
user.id |
STRING | (Opcional) Un ID específico de la app asociado con el usuario |
custom_keys |
REPEATED RECORD | Pares clave-valor definidos por el desarrollador |
custom_keys.key |
STRING | Una clave definida por el desarrollador |
custom_keys.value |
STRING | Un valor definido por el desarrollador |
installation_uuid |
STRING | Un ID que identifica una instalación única de una app y un dispositivo |
crashlytics_sdk_versions |
STRING | La versión del SDK de Crashlytics que generó el evento |
app_orientation |
STRING | Por ejemplo, PORTRAIT , LANDSCAPE ,
FACE_UP , FACE_DOWN , etcétera. |
device_orientation |
STRING | Por ejemplo, PORTRAIT , LANDSCAPE ,
FACE_UP , FACE_DOWN , etcétera. |
process_state |
STRING | BACKGROUND o FOREGROUND |
logs |
REPEATED RECORD | Mensajes de registro con marcas de tiempo que genera el registrador de Crashlytics, si se encuentra habilitado |
logs.timestamp |
TIMESTAMP | Cuándo se creó el registro |
logs.message |
STRING | El mensaje registrado |
breadcrumbs |
REPEATED RECORD | Rutas de navegación de Google Analytics con marcas de tiempo, si están habilitadas |
breadcrumbs.timestamp |
TIMESTAMP | La marca de tiempo asociada con la ruta de navegación |
breadcrumbs.name |
STRING | El nombre asociado con la ruta de navegación |
breadcrumbs.params |
REPEATED RECORD | Parámetros asociados con la ruta de navegación |
breadcrumbs.params.key |
STRING | Una clave de parámetro asociada con la ruta de navegación |
breadcrumbs.params.value |
STRING | Un valor de parámetro asociado con la ruta de navegación |
blame_frame |
RECORD | El marco identificado como la causa raíz de la falla o el error |
blame_frame.line |
INT64 | El número de línea del archivo del marco |
blame_frame.file |
STRING | El nombre del archivo del marco |
blame_frame.symbol |
STRING | El símbolo procesado, o sin procesar en caso de que no sea posible |
blame_frame.offset |
INT64 | El desplazamiento de bytes hacia la imagen binaria que contiene el código , no establecido para las excepciones de Java |
blame_frame.address |
INT64 | La dirección en la imagen binaria que contiene el código , no establecida para los marcos de Java |
blame_frame.library |
STRING | El nombre visible de la biblioteca que contiene el marco |
blame_frame.owner |
STRING | Por ejemplo, DEVELOPER , VENDOR ,
RUNTIME , PLATFORM o SYSTEM |
blame_frame.blamed |
BOOLEAN | Si Crashlytics determinó que este marco es la causa de la falla o el error |
exceptions |
REPEATED RECORD | (Solo para Android) Excepciones que ocurrieron durante este evento. Las excepciones anidadas se presentan en orden cronológico inverso, lo que significa que el último registro es la primera excepción que se lanza |
exceptions.type |
STRING | El tipo de excepción
(por ejemplo, java.lang.IllegalStateException) |
exceptions.exception_message |
STRING | Un mensaje asociado con la excepción |
exceptions.nested |
BOOLEAN | Verdadero para todas las excepciones, excepto la última que se lanza (es decir, el primer registro). |
exceptions.title |
STRING | El título del subproceso |
exceptions.subtitle |
STRING | El subtítulo del subproceso |
exceptions.blamed |
BOOLEAN | Verdadero si Crashlytics determina que la excepción es responsable del error o la falla |
exceptions.frames |
REPEATED RECORD | Los marcos asociados con la excepción |
exceptions.frames.line |
INT64 | El número de línea del archivo del marco |
exceptions.frames.file |
STRING | El nombre del archivo del marco |
exceptions.frames.symbol |
STRING | El símbolo procesado, o sin procesar en caso de que no sea posible |
exceptions.frames.offset |
INT64 | El desplazamiento de bytes hacia la imagen binaria que contiene el código , no establecido para las excepciones de Java |
exceptions.frames.address |
INT64 | La dirección en la imagen binaria que contiene el código , no establecida para los marcos de Java |
exceptions.frames.library |
STRING | El nombre visible de la biblioteca que contiene el marco |
exceptions.frames.owner |
STRING | Por ejemplo, DEVELOPER , VENDOR ,
RUNTIME , PLATFORM o SYSTEM |
exceptions.frames.blamed |
BOOLEAN | Si Crashlytics determinó que este marco es la causa de la falla o el error |
error |
REPEATED RECORD | (Solo para apps de Apple) Errores recuperables |
error.queue_name |
STRING | La cola en la que se ejecutaba el subproceso |
error.code |
INT64 | Código de error asociado con el NSError personalizado y registrado de la app |
error.title |
STRING | El título del subproceso |
error.subtitle |
STRING | El subtítulo del subproceso |
error.blamed |
BOOLEAN | Si Crashlytics determinó que este marco es la causa del error |
error.frames |
REPEATED RECORD | Los marcos del seguimiento de pila |
error.frames.line |
INT64 | El número de línea del archivo del marco |
error.frames.file |
STRING | El nombre del archivo del marco |
error.frames.symbol |
STRING | El símbolo procesado, o sin procesar en caso de que no sea posible |
error.frames.offset |
INT64 | El desplazamiento de bytes hacia la imagen binaria que contiene el código |
error.frames.address |
INT64 | La dirección en la imagen binaria que contiene el código |
error.frames.library |
STRING | El nombre visible de la biblioteca que contiene el marco |
error.frames.owner |
STRING | Por ejemplo, DEVELOPER , VENDOR ,
RUNTIME , PLATFORM o SYSTEM |
error.frames.blamed |
BOOLEAN | Si Crashlytics determinó que este marco es la causa del error |
threads |
REPEATED RECORD | Subprocesos presentes cuando ocurrió el evento |
threads.crashed |
BOOLEAN | Si el subproceso falló |
threads.thread_name |
STRING | El nombre del subproceso |
threads.queue_name |
STRING | (Solo para apps de Apple) La fila en la que se ejecutaba el subproceso |
threads.signal_name |
STRING | El nombre de la señal que provocó la falla en la app, solo presente en los subprocesos nativos con fallas |
threads.signal_code |
STRING | El código del indicador que provocó la falla en la app, solo presente en los subprocesos nativos con fallas |
threads.crash_address |
INT64 | La dirección del indicador que provocó la falla en la app, solo presente en los subprocesos nativos con fallas |
threads.code |
INT64 | (Solo para apps de Apple) Código de error del NSError personalizado y registrado de la aplicación |
threads.title |
STRING | El título del subproceso |
threads.subtitle |
STRING | El subtítulo del subproceso |
threads.blamed |
BOOLEAN | Si Crashlytics determinó que este marco es la causa de la falla o el error |
threads.frames |
REPEATED RECORD | Los marcos del subproceso |
threads.frames.line |
INT64 | El número de línea del archivo del marco |
threads.frames.file |
STRING | El nombre del archivo del marco |
threads.frames.symbol |
STRING | El símbolo procesado, o sin procesar en caso de que no sea posible |
threads.frames.offset |
INT64 | El desplazamiento de bytes hacia la imagen binaria que contiene el código |
threads.frames.address |
INT64 | La dirección en la imagen binaria que contiene el código |
threads.frames.library |
STRING | El nombre visible de la biblioteca que contiene el marco |
threads.frames.owner |
STRING | Por ejemplo, DEVELOPER , VENDOR ,
RUNTIME , PLATFORM o SYSTEM |
threads.frames.blamed |
BOOLEAN | Si Crashlytics determinó que este marco es la causa del error |
unity_metadata.unity_version |
STRING | Corresponde a la versión de Unity que se ejecuta en este dispositivo |
unity_metadata.debug_build |
BOOLEAN | Si se trata de una compilación de depuración |
unity_metadata.processor_type |
STRING | Corresponde al tipo de procesador |
unity_metadata.processor_count |
INT64 | Corresponde a la cantidad de procesadores (núcleos) |
unity_metadata.processor_frequency_mhz |
INT64 | Corresponde a la frecuencia de los procesadores en MHz |
unity_metadata.system_memory_size_mb |
INT64 | Corresponde al tamaño de la memoria del sistema en MB |
unity_metadata.graphics_memory_size_mb |
INT64 | Corresponde a la memoria gráfica en MB |
unity_metadata.graphics_device_id |
INT64 | Corresponde al identificador del dispositivo gráfico |
unity_metadata.graphics_device_vendor_id |
INT64 | Corresponde al identificador del proveedor del procesador de gráficos |
unity_metadata.graphics_device_name |
STRING | Corresponde al nombre del dispositivo gráfico |
unity_metadata.graphics_device_vendor |
STRING | Corresponde al proveedor del dispositivo gráfico |
unity_metadata.graphics_device_version |
STRING | Corresponde a la versión del dispositivo gráfico |
unity_metadata.graphics_device_type |
STRING | Corresponde al tipo de dispositivo gráfico |
unity_metadata.graphics_shader_level |
INT64 | Corresponde al nivel de sombreador de los gráficos |
unity_metadata.graphics_render_target_count |
INT64 | Corresponde a la cantidad de objetivos de renderización gráfica |
unity_metadata.graphics_copy_texture_support |
STRING | Corresponde a la compatibilidad con la copia de texturas gráficas, como se define en la API de Unity |
unity_metadata.graphics_max_texture_size |
INT64 | Corresponde al tamaño máximo dedicado a renderizar texturas |
unity_metadata.screen_size_px |
STRING | Corresponde al tamaño de la pantalla en píxeles, con el formato de ancho × alto |
unity_metadata.screen_resolution_dpi |
STRING | Corresponde al DPI de la pantalla como número de punto flotante |
unity_metadata.screen_refresh_rate_hz |
INT64 | Corresponde a la frecuencia de actualización de la pantalla en Hz |
Visualiza los datos exportados de Crashlytics con Data Studio
Google Data Studio convierte tus conjuntos de datos de Crashlytics en BigQuery en informes que son más fáciles de leer y compartir, y completamente personalizables.
Si deseas obtener más información para utilizar Data Studio, prueba la guía de inicio rápido Bienvenido a Data Studio.
Usa una plantilla de informe de Crashlytics
Data Studio cuenta con un informe de muestra para Crashlytics que incluye un conjunto completo de dimensiones y métricas del esquema de BigQuery de Crashlytics exportado. Si habilitaste la exportación de flujo de Crashlytics a BigQuery, puedes ver esos datos en la página Tendencias en tiempo real de la plantilla de Data Studio. Puedes usar la muestra como plantilla para crear con rapidez informes y visualizaciones nuevos en función de los datos de fallas sin procesar de tu propia app:
Haz clic en Utilizar plantilla, en la esquina superior derecha.
En el menú desplegable Fuente de datos nueva, selecciona Crear fuente de datos nueva.
Haz clic en Seleccionar en la tarjeta de BigQuery.
Selecciona una tabla que contenga los datos exportados de Crashlytics; para ello, elige Mis proyectos > PROJECT_ID > firebase_crashlytics > TABLE_NAME.
Tu tabla por lotes siempre está disponible para seleccionarla. Si está habilitada la exportación de flujos de Crashlytics a BigQuery, puedes seleccionar tu tabla en tiempo real.
Ve a Configuración y establece el nivel de la plantilla de Crashlytics como Predeterminado.
Haz clic en Conectar para crear la nueva fuente de datos.
Haz clic en Agregar al informe para volver a la plantilla de Crashlytics.
Finalmente, haz clic en Crear informe para crear una copia de la plantilla de Crashlytics del panel de Data Studio.
Actualiza a la nueva infraestructura de exportación
A mediados de octubre de 2024, Crashlytics lanzó una nueva infraestructura para exportar datos de Crashlytics a BigQuery. Por ahora, la actualización a esta nueva infraestructura es opcional.
Esta nueva infraestructura admite ubicaciones de conjuntos de datos de Crashlytics fuera de Estados Unidos.
Si habilitaste la exportación antes de mediados de octubre de 2024, ahora puedes cambiar la ubicación de la exportación de datos a cualquier ubicación de conjunto de datos compatible con BigQuery de forma opcional.
Si habilitaste la exportación a mediados de octubre de 2024 o después, puedes seleccionar cualquier ubicación de conjunto de datos compatible con BigQuery durante la configuración.
Otra diferencia de la nueva infraestructura es que no admite reabastecimientos de datos de antes de que habilitaras la exportación. (Con la infraestructura antigua, podías reabastecer hasta 30 días antes de la fecha de habilitación). La infraestructura nueva admite reabastecimientos hasta los últimos 30 días o la fecha más reciente en la que habilitaste la exportación a BigQuery (la opción que sea más reciente).
Requisitos para la actualización
Antes de actualizar a la nueva infraestructura, confirma que cumples con los siguientes requisitos: Tus tablas de BigQuery por lotes actuales tienen identificadores que coinciden con los IDs del paquete o los nombres de paquete establecidos para tus apps de Firebase registradas.
Por ejemplo:
Si tienes una tabla BigQuery llamada
com_yourcompany_yourproject_IOS
, deberías tener una app de iOS+ para Firebase registrada en tu proyecto de Firebase con el ID del paquetecom.yourcompany.yourproject
.Si tienes una tabla BigQuery llamada
com_yourcompany_yourproject_ANDROID
, deberías tener una app de Firebase para Android registrada en tu proyecto de Firebase con el nombre de paquetecom.yourcompany.yourproject
.
Sigue estos pasos para encontrar todas las apps de Firebase registradas en tu proyecto de Firebase:
En Firebase console, ve a Configuración del proyecto.
Desplázate hacia abajo hasta la tarjeta Tus apps y, luego, haz clic en la app de Firebase cuya información quieres ver, incluido el identificador.
La nueva infraestructura de exportación exportará los datos de cada app según el nombre del paquete o el ID del paquete establecido para la app de Firebase registrada. Para no interrumpir tu flujo de trabajo de BigQuery, es importante que te asegures de que tus tablas por lotes actuales ya tengan los nombres correctos para que la nueva infraestructura pueda agregar todos los datos nuevos a las tablas existentes. Si tienes nombres de tablas por lotes que no coinciden con tus apps de Firebase registradas, pero aún quieres actualizar, comunícate con el equipo de Asistencia de Firebase.
Cómo actualizar a la nueva infraestructura
Si ya habilitaste la exportación, puedes actualizar a la nueva infraestructura de manera sencilla; para ello, desactiva y vuelve a activar la exportación de datos de Crashlytics en Firebase console.
Estos son los pasos detallados:
En Firebase console, ve a la página Integraciones.
En la tarjeta de BigQuery, haz clic en Administrar.
Desactiva el control deslizante de Crashlytics para inhabilitar la exportación. Cuando se te solicite, confirma que quieres que se detenga la exportación de datos.
Vuelve a activar inmediatamente el control deslizante Crashlytics para volver a habilitar la exportación. Cuando se te solicite, confirma que quieres exportar datos.
La exportación de datos de Crashlytics a BigQuery ahora usa la nueva infraestructura de exportación.