De forma predeterminada, el agente de New Relic React Native captura errores de JavaScript y rechazos de promesas no controlados y los reporta como eventosMobileJSError . Puede ver estos errores en la UI, consultarlos con NRQL y graficarlos en dashboards.
Para que el rastreo del stack en los eventos de MobileJSError sea legible para los humanos, el agente necesita el mapa de origen que corresponde al paquete de JavaScript que se ejecuta en la aplicación. Cuando configura correctamente la clave de API de usuario de New Relic y el token de la aplicación, el agente carga el mapa de origen automáticamente después de cada compilación. Si no puede realizar la carga automáticamente, o si envía actualizaciones solo de JavaScript con CodePush u otro servicio inalámbrico (OTA), puede cargar los mapas de origen manualmente.
Importante
La carga del mapa de origen utiliza una clave de API de usuario además del token de la aplicación. El token de la aplicación identifica su aplicación, pero no autentica a un usuario específico, por lo que no puede autorizar de forma segura una carga por sí solo. La clave de API de usuario vincula la solicitud a un usuario autenticado de New Relic, lo que evita que cualquier persona que solo tenga el token de la aplicación (menos confidencial) cargue o sobrescriba sus mapas de origen. La clave de API de usuario y el token de la aplicación deben pertenecer a la misma cuenta de New Relic.
Sugerencia
El reporte de errores de JavaScript está habilitado de forma predeterminada. Establezca la opción de configuración jsErrorReportingEnabled en false para deshabilitar por completo el registro de eventos MobileJSError.
Configurar la carga automática de mapas de origen
Para cargar los source maps automáticamente, proporcione la clave de API de usuario de New Relic y el token de la aplicación. Debido a que una aplicación de React Native se compila por separado para cada plataforma, debe configurar la clave de manera diferente en Android e iOS. Configúrelo para cada plataforma que distribuya.
Antes de comenzar, obtenga lo siguiente de la misma cuenta de New Relic:
- Una clave de API de usuario.
- El token de la aplicación móvil (el mismo token que pasa a
NewRelic.startAgent()).
Android
Agregue su clave de API de usuario al archivo newrelic.properties en su proyecto:
com.newrelic.api_key=<YOUR_USER_API_KEY>Reemplace <YOUR_USER_API_KEY> con la clave de API de usuario. El agente ya conoce el token de la aplicación de NewRelic.startAgent(). Cuando ambos valores son válidos, el agente genera y carga el mapa de origen de Android a New Relic automáticamente después de cada compilación de lanzamiento.
Sugerencia
La carga automática solo se ejecuta para las compilaciones de lanzamiento de forma predeterminada. Para obtener la carga automática de mapas de origen también para las compilaciones de depuración, agregue Debug al ajuste uploadMapsForVariant en la configuración del plug-in de New Relic Gradle, por ejemplo, uploadMapsForVariant("Release", "Debug"). De lo contrario, cargue el mapa de origen de la compilación de depuración manualmente.
iOS
En iOS, un script (upload-react-native-sourcemap) de fase de compilación incluido en la carpeta dsym-upload-tools —la misma carpeta utilizada para cargas de dSYM — sube el mapa de origen. Pase la clave de API de usuario y el token de aplicación como argumentos a ese script.
Si aún no ha configurado las cargas de dSYM, copie la carpeta
dsym-upload-toolsen elSRCROOTdel proyecto (generalmente la carpetaios).En Xcode, seleccione su objetivo, abra la pestaña Build Phases y agregue un New Run Script Build Phase. Arrástrelo para que se ejecute después de la fase “Bundle React Native code and images”.
Agregue lo siguiente al script de ejecución, reemplazando los marcadores de posición con la clave de API de usuario y el token de la aplicación:
bash$ARTIFACT_DIR="${BUILD_DIR%Build/*}"$SCRIPT=`/usr/bin/find "${SRCROOT}" "${ARTIFACT_DIR}" -type f -name upload-react-native-sourcemap | head -n 1`$/bin/sh "${SCRIPT}" "YOUR_USER_API_KEY" "YOUR_APP_TOKEN"
Sugerencia
No confirme credenciales en el control de versiones. Almacene la clave de API del usuario y el token de la aplicación en un archivo .xcconfig o en los secretos del sistema CI/CD, y luego haga referencia a ellos en el script de ejecución (por ejemplo, "${NR_USER_API_KEY}" "${NR_APP_TOKEN}"). Agregue --debug como tercer argumento para escribir la salida detallada en upload_sourcemap_results.log.
El script de iOS se ejecuta solo para las compilaciones de Release y omite las compilaciones del simulador. Si falta alguno de los valores o no es válido, el agente no cargará el mapa de origen y los rastreos del stack de errores de JavaScript permanecerán sin simbolizar. En ese caso, cargue el mapa de origen manualmente.
Cargar manualmente un mapa de origen
Puede cargar un source map directamente en la API de ingesta de símbolos de New Relic. Esto es útil cuando la carga automática no es posible, o cuando lanza actualizaciones solo de JavaScript a través de CodePush u otros servicios OTA.
Utilice la siguiente plantilla de cURL:
$curl -X POST "https://symbol-ingest-api.service.newrelic.com/v1/react-native/sourcemaps" \> -H "Api-Key: $NR_USER_API_KEY" \> -H "X-APP-LICENSE-KEY: $NR_APP_TOKEN" \> -F "sourcemap=@./index.android.bundle.map" \> -F "jsBundleId=<JS_BUNDLE_ID>" \> -F "appVersion=1.0.5" \> -F "sourcemapName=index.android.bundle.map"Reemplace lo siguiente:
$NR_USER_API_KEYes una clave de API de usuario de New Relic válida.$NR_APP_TOKENes su token de aplicación de monitoreo de móviles.<JS_BUNDLE_ID>es el identificador de compilación único reportado por el agente para la sesión de JavaScript (consulte Retrieve the jsBundleId).appVersiones la versión de la aplicación nativa que el paquete tiene como objetivo (por ejemplo,1.0.5).
Sugerencia
Para las cuentas en el centro de datos de la UE de New Relic, use el extremo de la UE en su lugar: https://symbol-ingest-api.service.eu.newrelic.com/v1/react-native/sourcemaps.
Para las cuentas en el centro de datos de Japón de New Relic, use el extremo de Japón en su lugar: https://symbol-ingest-api.service.jp.newrelic.com/v1/react-native/sourcemaps.
Referencia de la API de carga
Extremo
Propiedad | Valor |
|---|---|
Método |
|
URL |
|
Content-Type |
|
Encabezados
Encabezamiento | Requerido | Descripción |
|---|---|---|
| Sí | Una de New Relic válida. Debe pertenecer a la misma cuenta que el token de la aplicación. |
| Sí | El token de aplicación para la aplicación móvil. |
| No | Información de telemetría sobre el empaquetador, los nombres de los mapas de origen y los tamaños. Cuando un mapa de origen supera los 200 MB descomprimido, el agente no envía el archivo y, en su lugar, transmite solo este encabezado. |
| Sí | Debe ser
. |
Cuerpo de la solicitud (datos de formulario multiparte)
Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
| Archivo | No | El archivo de mapa de origen (
o
). Puede comprimirse con gzip. Máximo 200 MB sin comprimir (consulte Limitaciones de tamaño de archivo ). |
| Cadena | No | Nombre del archivo de mapa de origen. Máximo 255 caracteres. |
| Cadena | Sí | Identificador de compilación único (por ejemplo, un SHA o ID). Máximo 255 caracteres. |
| Cadena | Sí | Versión de la aplicación (por ejemplo,
). Máximo 255 caracteres. |
Importante
Si el archivo de mapa de origen supera los 200 MB descomprimido, el agente no enviará el archivo. En su lugar, transmite el encabezado X-Telemetry-Data para que New Relic aún pueda rastrear que se produjo una compilación. Para obtener más detalles, consulte Limitaciones de tamaño de archivo.
Respuestas
Las respuestas utilizan Content-Type: application/json.
Estado HTTP | Descripción |
|---|---|
| La carga se realizó correctamente. El cuerpo de la respuesta contiene los metadatos del source map: |
| Error de validación, por ejemplo, campos faltantes, un esquema JSON no válido en el archivo o una solicitud mal formada. Ejemplo:
|
| La clave de API es válida, pero el
pertenece a una cuenta diferente (protección entre cuentas). Ejemplo:
|
| El
no tiene la capacidad requerida. Asegúrese de que la clave de API de usuario pertenezca a un usuario con permisos de visualización de entidad móvil. Ejemplo:
|
| El token de aplicación proporcionado en el encabezado no existe. Ejemplo:
|
| El archivo de mapa de origen descomprimido supera los 200 MB. Ejemplo:
|
| Se produjo un error genérico e irrecuperable en el lado del servidor. Ejemplo:
|
Cargar mapas de origen para actualizaciones de CodePush y OTA
Cuando utiliza CodePush u otro servicio de actualización OTA, la versión del paquete de JavaScript difiere de la versión binaria nativa. Cada vez que envíe una actualización de JavaScript, cargue el nuevo mapa de origen para que los eventos MobileJSError sigan siendo legibles en New Relic.
Para simbolizar una actualización OTA, la carga debe utilizar:
- Un
jsBundleIdúnico que coincide con el ID que informa el agente durante la sesión de JavaScript. - El
appVersioncorrecto, que es la versión nativa que tiene como objetivo el paquete.
Puede cargar el mapa de origen con un script en el pipeline de CI/CD o manualmente con cURL.
Método 1: carga automatizada mediante script
New Relic proporciona un script auxiliar de Node.js que puede ejecutar en su pipeline de CI/CD inmediatamente después del comando appcenter codepush release-react.
$# Example integration$appcenter codepush release-react -a <Owner>/<App>$node upload-nr-sourcemap.js --bundle android/index.android.bundle --map android/index.android.bundle.map --bundleId <NEW_ID>Método 2: carga manual a través de cURL
Si prefiere no usar el script, cargue el mapa de origen (descomprimido o comprimido) a la API de ingesta de símbolos con cURL:
$curl -X POST "https://symbol-ingest-api.service.newrelic.com/v1/react-native/sourcemaps" \> -H "Api-Key: $NR_USER_API_KEY" \> -H "X-APP-LICENSE-KEY: $NR_APP_TOKEN" \> -F "sourcemap=@./index.android.bundle.map" \> -F "jsBundleId=CODE_PUSH_ID_HERE" \> -F "appVersion=1.0.5" \> -F "sourcemapName=index.android.bundle.map"Para obtener la lista completa de encabezados, campos del cuerpo y respuestas, consulte la referencia de la API de carga.
Recuperar el jsBundleId
El jsBundleId utilizado para la carga debe coincidir con el ID del paquete que el agente reporta para la sesión de JavaScript. Para los lanzamientos de CodePush, utilice el despliegue de CodePush o el identificador de lanzamiento como jsBundleId para que el mapa de origen cargado se asigne al paquete que se ejecuta en las aplicaciones de los usuarios.
Sugerencia
Para verificar, auditar o eliminar los mapas de origen que ha cargado, consulte Listar y eliminar mapas de origen de React Native.
Limitaciones de tamaño de archivo
Los archivos de mapa de origen deben tener menos de 200 MB descomprimidos para almacenarse para la simbolización.
Nuestros scripts de compilación comprimen automáticamente en gzip el archivo .map antes de la carga para reducir el tamaño de transferencia, pero la compilación verifica el límite de 200 MB con el archivo descomprimido. Si el archivo .map descomprimido supera los 200 MB, el agente no carga el archivo, lo que evita tiempos de espera de compilación y errores de ingesta.
En estos casos, el script envía telemetría (metadatos) de compilación en lugar del archivo. Esto permite a New Relic rastrear que se produjo una compilación, aunque la simbolización no esté disponible para esa versión específica. Como resultado, los eventos MobileJSError para esa compilación muestran rastreos del stack no simbolizados (minificados).
Si el source map supera los 200 MB una vez descomprimido, comuníquese con el soporte de New Relic o envíe una solicitud de característica. No hay forma de aumentar este límite por su cuenta.
Solucionar problemas de carga de mapas de origen
Si sus rastreos del stack de MobileJSError no están simbolizados, es posible que su source map haya superado el límite de tamaño sin comprimir de 200 MB. Siga los siguientes pasos para confirmar la causa y solicitar ayuda. Para obtener más consejos de resolución de problemas y preguntas frecuentes, consulte Resolución de problemas de source maps de React Native y errores de JavaScript.
Confirmar si se cargó el archivo o la telemetría
Una compilación exitosa no siempre significa una carga de archivo exitosa. Si el script de compilación se completa con un mensaje Success pero el mapa de origen tiene más de 200 MB sin comprimir, revise los logs de la consola. Verá un mensaje que indica que el agente envió telemetría en lugar del archivo de mapa de origen.
Compruebe el tamaño del archivo descomprimido
Compruebe el tamaño del archivo de mapa de origen para verificar si está cerca o por encima del límite:
$# Check the size of the unzipped source map$ls -lh index.android.bundle.mapSi el archivo se acerca o supera los 200 MB, el mapa de origen no se puede cargar para la simbolización.
Solicitar soporte para mapas de origen grandes
Si el mapa de origen descomprimido supera el límite de 200 MB, no hay forma de reducirlo por su cuenta ni de aumentar el límite. Haga lo siguiente para informarnos que este límite le afecta:
- Contacte al Soporte de New Relic.
- Envíe una solicitud de característica para aumentar el límite de tamaño del mapa de origen.