Sentry-javascript: Sentry.captureException sendet Ereignis nur einmal an Sentry (AWS Lambda)

Erstellt am 26. Feb. 2019  ·  3Kommentare  ·  Quelle: getsentry/sentry-javascript

Paket + Version

@sentry/node

Ausführung:

4.6.3

Beschreibung

Ich versuche, das neue Sentry-SDK in unsere serverlose Architektur zu integrieren. Wir haben einen allgemeinen Try-Catch um jeden Handler, der captureException aufruft. Kurz gesagt, so sieht unser Code aus (ich habe unsere Geschäftslogik und viele Hilfsmethoden weggelassen).

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
   }
}

Ich habe dafür gesorgt, dass der Handler immer einen Fehler ausgibt. Wenn ich die erste Anfrage mache, landet alles gut in Sentry. Bei der zweiten Anfrage passiert nichts. Wenn ich in CloudWatch nachschaue, finde ich das. Der Einfachheit halber habe ich Kommentare hinzugefügt.

Erste Anfrage:

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

Zweite Anfrage:

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

Wie Sie sehen, trifft es beforeSend der zweiten Anfrage nie auf die

Ich sollte beachten, dass, wenn ich Sentry.getCurrentHub().getClient().captureException(error) mache, die Ausnahme jedes Mal an Sentry gesendet wird, aber der in Sentry.configureScope konfigurierte Bereich wird nie auf das Ereignis angewendet.

Ich habe versucht, dies lokal zu reproduzieren, aber es passiert nur, wenn es auf AWS Lambda bereitgestellt wird.

Hilfreichster Kommentar

Es besteht die Möglichkeit, dass es dedupliziert wird.
Sie können debug: true in Ihrem init Aufruf verwenden, um zu sehen, was los ist.

Wenn es tatsächlich dedupliziert wird, können Sie diese Integration mit folgenden Schritten entfernen:

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

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

Alle 3 Kommentare

Es besteht die Möglichkeit, dass es dedupliziert wird.
Sie können debug: true in Ihrem init Aufruf verwenden, um zu sehen, was los ist.

Wenn es tatsächlich dedupliziert wird, können Sie diese Integration mit folgenden Schritten entfernen:

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

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

Interessant. Habe dies auf der Suche nach einem ähnlichen Problem gefunden. Die Deduplizierung zum Entfernen hat es für mich behoben.

Schließe dies, da es kein Fehler ist.
Außerdem macht die nächste Hauptversion Dedupe optional, was bedeutet, dass standardmäßig keine Deduplizierung stattfindet.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen