@sentry/node
4.6.3
Estou tentando integrar o novo SDK do sentry em nossa arquitetura sem servidor, temos um try-catch geral em torno de cada manipulador, que chama captureException. Em poucas palavras, é assim que nosso código se parece (eu deixei de fora nossa lógica de negócios e muitos métodos utilitários).
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
}
}
Eu fiz o manipulador sempre lançar um erro. Quando eu faço a primeira solicitação, tudo acaba bem no Sentinela. No segundo pedido, nada acontece. Quando eu olho no CloudWatch, é isso que encontro. Eu adicionei comentários por conveniência.
/// 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 você pode ver, ele nunca atinge o middleware beforeSend
na segunda solicitação, então acho que nunca é enviado ao Sentinela.
Devo observar que quando faço Sentry.getCurrentHub().getClient().captureException(error)
, ele envia a exceção para o Sentinela todas as vezes, mas o escopo configurado em Sentry.configureScope
nunca é aplicado ao evento.
Tentei reproduzir isso localmente, mas isso só acontece quando implantado no AWS Lambda.
Há uma chance de que ele esteja sendo desduplicado.
Você pode usar debug: true
em sua chamada init
para ver o que está acontecendo.
Se ele realmente estiver sendo desduplicado, você pode remover essa integração usando:
Sentry.init({
integrations: integrations => {
return integrations.filter(integration => integration.name !== 'Dedupe');
}
});
Interessante. Encontrei isso procurando por um problema semelhante. A deduplicação de remoção corrigiu isso para mim.
Fechando isso porque não é um bug.
Além disso, a próxima versão principal torna Dedupe
opcional, o que significa que não há desduplicação por padrão.
Comentários muito úteis
Há uma chance de que ele esteja sendo desduplicado.
Você pode usar
debug: true
em sua chamadainit
para ver o que está acontecendo.Se ele realmente estiver sendo desduplicado, você pode remover essa integração usando:
https://docs.sentry.io/platforms/node/default-integrations/