Sentry-javascript: Sentry.captureException hanya mengirim acara ke Sentry sekali (AWS Lambda)

Dibuat pada 26 Feb 2019  ·  3Komentar  ·  Sumber: getsentry/sentry-javascript

Paket + Versi

@sentry/node

Versi: kapan:

4.6.3

Keterangan

Saya mencoba mengintegrasikan SDK penjaga baru ke dalam arsitektur tanpa server kami, kami memiliki try-catch umum di setiap handler, yang memanggil captureException. Singkatnya seperti inilah tampilan kode kami (saya mengabaikan logika bisnis kami dan banyak metode utilitas).

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

Saya membuat pawang selalu melakukan kesalahan. Ketika saya melakukan permintaan pertama, semuanya berakhir di Sentry dengan baik. Pada permintaan kedua, tidak ada yang terjadi. Ketika saya mencari di CloudWatch, inilah yang saya temukan. Saya telah menambahkan komentar untuk kenyamanan.

Permintaan pertama:

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

Permintaan kedua:

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

Seperti yang Anda lihat, itu tidak pernah menyentuh middleware beforeSend pada permintaan kedua, jadi saya kira itu tidak pernah dikirim ke Sentry sama sekali.

Saya harus mencatat bahwa ketika saya melakukannya Sentry.getCurrentHub().getClient().captureException(error) , itu mengirim pengecualian ke Sentry setiap kali, tetapi ruang lingkup yang dikonfigurasi dalam Sentry.configureScope tidak pernah diterapkan ke acara tersebut.

Saya telah mencoba mereproduksi ini secara lokal, tetapi itu hanya terjadi ketika digunakan di AWS Lambda.

Komentar yang paling membantu

Ada kemungkinan bahwa itu semakin tidak terduplikasi.
Anda dapat menggunakan debug: true dalam panggilan init untuk melihat apa yang terjadi.

Jika memang ditipu, Anda dapat menghapus integrasi ini menggunakan:

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

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

Semua 3 komentar

Ada kemungkinan bahwa itu semakin tidak terduplikasi.
Anda dapat menggunakan debug: true dalam panggilan init untuk melihat apa yang terjadi.

Jika memang ditipu, Anda dapat menghapus integrasi ini menggunakan:

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

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

Menarik. Menemukan ini mencari masalah serupa. Penghapusan dedupe memperbaikinya untuk saya.

Menutup ini karena ini bukan bug.
Selain itu, versi utama berikutnya menjadikan Dedupe opsional, yang berarti tidak ada pengurangan secara default.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat