@sentry/node
4.6.3
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.
/// 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
/// 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.
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');
}
});
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.
Comentario más útil
Existe la posibilidad de que se elimine la duplicación.
Puede usar
debug: true
en su llamadainit
para ver qué está pasando.Si de hecho se está deduciendo, puede eliminar esta integración usando:
https://docs.sentry.io/platforms/node/default-integrations/