Sentry-javascript: Sentry.captureException só envia evento para Sentry uma vez (AWS Lambda)

Criado em 26 fev. 2019  ·  3Comentários  ·  Fonte: getsentry/sentry-javascript

Pacote + Versão

@sentry/node

Versão:

4.6.3

Descrição

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.

Primeiro pedido:

/// 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 pedido:

/// 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.

Comentários muito úteis

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');
  }
});

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

Todos 3 comentários

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');
  }
});

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

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.

Esta página foi útil?
0 / 5 - 0 avaliações