Sentry-javascript: Sentry.captureException solo envía el evento a Sentry una vez (AWS Lambda)

Creado en 26 feb. 2019  ·  3Comentarios  ·  Fuente: getsentry/sentry-javascript

Paquete + Versión

@sentry/node

Versión:

4.6.3

Descripción

Estoy tratando de integrar el nuevo SDK sentry en nuestra arquitectura sin servidor, tenemos un try-catch general para cada controlador, que llama a captureException. En pocas palabras, así es como se ve nuestro código (dejé fuera nuestra lógica empresarial y muchos métodos de utilidad).

Sentry.init({
  dsn: process.env.sentryUrl,
  environment: process.env.NODE_ENV,
  // debugging issue where we only get an event once
  beforeSend: (event, _) => { console.log(event.exception); return event }
});

async function wrapper(...) {
   try {
     handler(...)
   } catch(error) {
      Sentry.configureScope(scope => {
        scope.setTag("test", "Hello, world")
      })

      const eventId = Sentry.captureException(error)
      // debugging, log event id to see if captureException works
      console.log(eventId)

      const flushResult = await Sentry.flush(1000)
      console.log(flushResult) // see if flush succeeded
   }
}

Hice que el manejador siempre arrojara un error. Cuando hago la primera solicitud, todo termina bien en Sentry. En la segunda solicitud, no pasa nada. Cuando miro en CloudWatch, esto es lo que encuentro. He agregado comentarios por conveniencia.

Primera solicitud:

/// the eventId from captureException
2019-02-26T13:47:22.584Z: 8cf83e38081a4672841a6f795ce8105a 
/// the middleware defined in Sentry.init
2019-02-26T13:47:23.153Z: { values: [ { stacktrace: [Object], type: 'Error', value: 'This is an error' } ] } 
/// result of Sentry.flush
2019-02-26T13:47:23.294Z: true 

Segundo requisito:

/// the eventId from captureException
2019-02-26T13:47:24.761Z fbc2c8b2a4d5447380a0f92dd87896f6
/// result of Sentry.flush
2019-02-26T13:47:24.963Z: true 

Como puede ver, nunca llega al middleware beforeSend en la segunda solicitud, así que supongo que nunca se envía a Sentry.

Debo señalar que cuando hago Sentry.getCurrentHub().getClient().captureException(error) , envía la excepción a Sentry cada vez, pero el alcance configurado en Sentry.configureScope nunca se aplica al evento.

Intenté reproducir esto localmente, pero solo sucede cuando se implementa en AWS Lambda.

Comentario más útil

Existe la posibilidad de que se elimine la duplicación.
Puede usar debug: true en su llamada init para ver qué está pasando.

Si de hecho se está deduciendo, puede eliminar esta integración usando:

Sentry.init({
  integrations: integrations => {
    return integrations.filter(integration => integration.name !== 'Dedupe');
  }
});

https://docs.sentry.io/platforms/node/default-integrations/

Todos 3 comentarios

Existe la posibilidad de que se elimine la duplicación.
Puede usar debug: true en su llamada init para ver qué está pasando.

Si de hecho se está deduciendo, puede eliminar esta integración usando:

Sentry.init({
  integrations: integrations => {
    return integrations.filter(integration => integration.name !== 'Dedupe');
  }
});

https://docs.sentry.io/platforms/node/default-integrations/

Interesante. Encontré esto buscando un problema similar. La eliminación de dedupe me lo arregló.

Cerrando esto ya que no es un error.
Además, la próxima versión principal hace que Dedupe opcional, lo que significa que no hay deduplicación de forma predeterminada.

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

dimmduh picture dimmduh  ·  3Comentarios

rowlando picture rowlando  ·  3Comentarios

jaylinski picture jaylinski  ·  3Comentarios

grigored picture grigored  ·  3Comentarios

kamilogorek picture kamilogorek  ·  3Comentarios