Sentry-javascript: Sentry.captureException์€ Sentry์— ํ•œ ๋ฒˆ๋งŒ ์ด๋ฒคํŠธ๋ฅผ ๋ณด๋ƒ…๋‹ˆ๋‹ค(AWS Lambda).

์— ๋งŒ๋“  2019๋…„ 02์›” 26์ผ  ยท  3์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: getsentry/sentry-javascript

ํŒจํ‚ค์ง€ + ๋ฒ„์ „

@sentry/node

๋ฒ„์ „:

4.6.3

์„ค๋ช…

์ƒˆ๋กœ์šด Sentry SDK๋ฅผ ์„œ๋ฒ„๋ฆฌ์Šค ์•„ํ‚คํ…์ฒ˜์— ํ†ตํ•ฉํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. captureException์„ ํ˜ธ์ถœํ•˜๋Š” ๋ชจ๋“  ํ•ธ๋“ค๋Ÿฌ ์ฃผ์œ„์— ์ผ๋ฐ˜์ ์ธ try-catch๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ„๋‹จํžˆ ๋งํ•ด์„œ ์ด๊ฒƒ์ด ์šฐ๋ฆฌ ์ฝ”๋“œ์˜ ๋ชจ์Šต์ž…๋‹ˆ๋‹ค(์ €๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ ๋งŽ์€ ์œ ํ‹ธ๋ฆฌํ‹ฐ ๋ฉ”์†Œ๋“œ๋ฅผ ์ƒ๋žตํ–ˆ์Šต๋‹ˆ๋‹ค).

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

ํ•ธ๋“ค๋Ÿฌ๊ฐ€ ํ•ญ์ƒ ์˜ค๋ฅ˜๋ฅผ ๋˜์ง€๊ฒŒ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ์š”์ฒญ์„ ์ˆ˜ํ–‰ํ•˜๋ฉด ๋ชจ๋“  ๊ฒƒ์ด Sentry์—์„œ ์ •์ƒ์ ์œผ๋กœ ๋๋‚ฉ๋‹ˆ๋‹ค. ๋‘ ๋ฒˆ์งธ ์š”์ฒญ์—์„œ๋Š” ์•„๋ฌด ์ผ๋„ ์ผ์–ด๋‚˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. CloudWatch๋ฅผ ๋ณด๋ฉด ์ด๊ฒƒ์ด ๋‚ด๊ฐ€ ์ฐพ์€ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํŽธ์˜๋ฅผ ์œ„ํ•ด ์ฃผ์„์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ฒซ ๋ฒˆ์งธ ์š”์ฒญ:

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

๋ณด์‹œ๋‹ค์‹œํ”ผ ๋‘ ๋ฒˆ์งธ ์š”์ฒญ์—์„œ beforeSend ๋ฏธ๋“ค์›จ์–ด์— ๋„๋‹ฌํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ Sentry์— ์ „ํ˜€ ์ „์†ก๋˜์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

Sentry.getCurrentHub().getClient().captureException(error) ํ•˜๋ฉด ๋งค๋ฒˆ Sentry์— ์˜ˆ์™ธ๋ฅผ ๋ณด๋‚ด์ง€๋งŒ Sentry.configureScope ๊ตฌ์„ฑ๋œ ๋ฒ”์œ„๋Š” ์ด๋ฒคํŠธ์— ์ ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์„ ๋กœ์ปฌ์—์„œ ์žฌํ˜„ํ•ด ๋ณด์•˜์ง€๋งŒ AWS Lambda์— ๋ฐฐํฌํ•  ๋•Œ๋งŒ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์ค‘๋ณต ์ œ๊ฑฐ๋  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
init ํ˜ธ์ถœ์—์„œ debug: true ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ง„ํ–‰ ์ƒํ™ฉ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‹ค์ œ๋กœ ์ค‘๋ณต ์ œ๊ฑฐ๋˜๋Š” ๊ฒฝ์šฐ ๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด ํ†ตํ•ฉ์„ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

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

๋ชจ๋“  3 ๋Œ“๊ธ€

์ค‘๋ณต ์ œ๊ฑฐ๋  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
init ํ˜ธ์ถœ์—์„œ debug: true ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ง„ํ–‰ ์ƒํ™ฉ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‹ค์ œ๋กœ ์ค‘๋ณต ์ œ๊ฑฐ๋˜๋Š” ๊ฒฝ์šฐ ๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด ํ†ตํ•ฉ์„ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

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

ํฅ๋ฏธ๋กœ์šด. ๋น„์Šทํ•œ ๋ฌธ์ œ๋ฅผ ์ฐพ๊ณ  ์ด๊ฒƒ์„ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค. ์ œ๊ฑฐ ์ค‘๋ณต ์ œ๊ฑฐ๊ฐ€ ๋‚˜๋ฅผ ์œ„ํ•ด ๊ณ ์ณค์Šต๋‹ˆ๋‹ค.

๋ฒ„๊ทธ๊ฐ€ ์•„๋‹ˆ๋ฏ€๋กœ ๋‹ซ์Šต๋‹ˆ๋‹ค.
๋˜ํ•œ ๋‹ค์Œ ์ฃผ์š” ๋ฒ„์ „์—์„œ๋Š” Dedupe ์„ ํƒ ์‚ฌํ•ญ์œผ๋กœ ๋งŒ๋“ค๋ฉฐ, ์ด๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ค‘๋ณต ์ œ๊ฑฐ๊ฐ€ ์—†์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰