ããã«ã¡ã¯ããŒã ãã»ã³ããªãŒã倧奜ãã§ããããããšãïŒ
æ°ãããããžã§ã¯ãã«Typescriptä»ãã®GoogleCloudFunctionsã䜿çšããŠããŸãããSentryã䜿çšããŠãšã©ãŒããã£ããã£ããããšæããŸãã
ãã®ã³ã¡ã³ããããCloudFunctionsã¯ãµãŒãããŒãã£ãããŒãã®ã°ããŒãã«ãšã©ãŒãã³ãã©ãŒã«ããã¯ããããšãèš±å¯ããŠããªãããã§ãã
ããã§ãæ£ç¢ºã§ããïŒ SentryJSã©ã€ãã©ãªãGoogleCloudFunctionsã§åäœãããããšã¯ã§ããŸããïŒ
é¢é£ïŒ https ïŒ//forum.sentry.io/t/google-cloud-functions-client-setup/1970
ãããããããšãïŒ :)
ããã§ãæ£ç¢ºã§ããïŒ SentryJSã©ã€ãã©ãªãGoogleCloudFunctionsã§åäœãããããšã¯ã§ããŸããïŒ
https://github.com/googleapis/nodejs-error-reporting#catching-and-reporting-application-wide-uncaught-errorsããã³https://github.com/googleapis/nodejs-error-reporting#unhandled-ã«ãããšæåŠã¯ä»ã¯å¯èœã§ãããç§ã¯ãŸã ãããèªåã§ãã¹ãããŠããŸããã
ç§ã¯æ°æ¥ã§ããããããšãã§ããŸãããããããªããå°ãã®æãããã°ããªãã¯ããã«ã¹ãã³ãäžããããšãã§ããŸã:)
@kamilogorekã«æè¬ããŸãã é¢çœãïŒ
ãããGoogleCloudFunctionsãšã©ã®ããã«çžäºäœçšããã®ãããããŸããã ç§ã¯çŸåšæè¡èšç»ã®çã£æäžãªã®ã§ãããã«ãã¹ãããããšã¯ã§ããŸããã ããããç§ããããããã©ãã/ãã€ããããããããªãã«ç¥ãããŸãã :)
çŸåšããã¹ãŠã®ã¯ã©ãŠãé¢æ°ã次ã®ããã«ã©ããããŠããŸãã
try () {
...
} catch (e) {
Sentry.captureException(e);
}
ããããSentryã«ã¯ãœãŒã¹ã³ãŒãããã®ä»ã®ã³ã³ããã¹ãã衚瀺ãããŠããŸããã
ãã®çµ±åãè¡ãããã®ããè¯ãæ¹æ³ã¯ãããŸããïŒ
@vpontisã¯èªåã§ãã¹ããããšãããã³ã³ããã¹ã解決ã¯åé¡ãªãæ©èœããŠããããã§ãã ããªãã®æ©èœ/æ§æã¯äœã§ããïŒ
ããã«ã¡ã¯@kamilogorekå©ããŠãããŠããããšãïŒ
Hello Worldã§åŸããããã®ãè€è£œããã®ã§ãããã¯çŽ æŽãããããšã§ãã
ãã ããã³ã³ããã¹ãå€æ°ã¯ãããŸããã ã¹ã³ãŒãå ã®å€æ°ã®å€ã確èªã§ããªãããã«ïŒ ãããšããPythonã®æ©èœã ãã§ããïŒ
ãŸããããŒã¿ããŒã¹ãžã®æžã蟌ã¿/èªã¿åããè¡ã£ãŠãããšãã«çºçããããè€éãªãšã©ãŒã®ããã«èŠããŸãããã¹ããªãŒã /ã€ãã³ãã«ãšã©ãŒããããŸãã
ããšãã°ãäžã®ã¹ã¯ãªãŒã³ã·ã§ããã§ã¯ãã©ã®é¢æ°ããåŒã³åºãããã®ãããããããŸããã
ããªãã®æšèŠã¯äœã§ããïŒ å ã®é¢æ°ãã³ãã©ãŒããã®åŒã³åºããå«ããããé·ãStackTraceãååŸããæ¹æ³ã¯ãããŸããïŒ ãããšãããã³ãããªã¹ããè¿œå ããå¿ èŠããããŸããïŒ
ãŸãããããã®ãœãŒã¹ã³ãŒãã§äœãèµ·ãã£ãŠããã®ãããšã©ãŒãèŠã€ãããŸããã§ãããïŒ
ãã ããã³ã³ããã¹ãå€æ°ã¯ãããŸããã ã¹ã³ãŒãå ã®å€æ°ã®å€ã確èªã§ããªãããã«ïŒ ãããšããPythonã®æ©èœã ãã§ããïŒ
Pythonã®ã¿ã®æ©èœã§ãã æ®å¿µãªãããJSã¯ãã®æ©èœãå®è£ ããã¡ã«ããºã ãæäŸããŠããŸããã
ããšãã°ãäžã®ã¹ã¯ãªãŒã³ã·ã§ããã§ã¯ãã©ã®é¢æ°ããåŒã³åºãããã®ãããããããŸããã ããªãã®æšèŠã¯äœã§ããïŒ å ã®é¢æ°ãã³ãã©ãŒããã®åŒã³åºããå«ããããé·ãStackTraceãååŸããæ¹æ³ã¯ãããŸããïŒ ãããšãããã³ãããªã¹ããè¿œå ããå¿ èŠããããŸããïŒ
ãœã±ããã«ãã£ãŠããªã¬ãŒãããããããã®ç¹å®ã®é¢æ°ãäœãšåŒã°ããããå€æããæ¹æ³ã¯ãããŸããã ãããŠãããªããè¿°ã¹ãããã«ãããã远跡ããæè¯ã®æ¹æ³ã¯ãdbã¯ãšãªããããã·åŒã³åºãããŸãã¯å€éšãµãŒãã¹èŠæ±ãå®è¡ãããšãã«ãã¬ããã¯ã©ã ã䜿çšããããšã§ãã
ãŸãããµãŒããŒã¬ã¹ã€ã³ã¹ã¿ã³ã¹ã¯åç¶æéãé·ãããã次ã®ããã«åŒã³åºãããšãã§ããŸãã
Sentry.configureScope(scope => scope.clear())
// or
Sentry.configureScope(scope => scope.clearBreadcrumbs())
ããããªã¹ã¬ãŒããååŸããŸãã
ãŸãããããã®ãœãŒã¹ã³ãŒãã§äœãèµ·ãã£ãŠããã®ãããšã©ãŒãèŠã€ãããŸããã§ãããïŒ
ãããžã§ã¯ãèšå®ã§Enable JavaScript source fetching
ããªãã«ããŸãã https://sentry.io/settings/kamil-ogorek/projects/testing-project/
ãµãŒããŒã¬ã¹ããŒãã¢ããªãªã®ã§ããããè¡ãæå³ã¯ãããŸããã
Pythonã®ã¿ã®æ©èœã§ãã æ®å¿µãªãããJSã¯ãã®æ©èœãå®è£ ããã¡ã«ããºã ãæäŸããŠããŸããã
ããã ç§ã¯Pythonã«ã€ããŠããã倧奜ãã§ããïŒ
ãšãŠãå©ãããŸãããã«ãã«ããããšãã ãããã®å€æŽãå®è£ ãã質åãããã°ããã«è¿ä¿¡ããŸãã ãã®åé¡ã¯ãJSãµãŒããŒã¬ã¹ã§Sentryã䜿çšããŠããä»ã®äººã«åœ¹ç«ã€ãšç¢ºä¿¡ããŠããŸãã
çŽ æŽãããïŒ ããªã¢ãŒãžã®ããã«åé¡ãã¯ããŒãºããŸããããã€ã§ããæ°è»œã«pingãéä¿¡ããŠãå¿ èŠã«å¿ããŠåéããŸãã :)
@kamilogorek Google Cloud Functionsã«ãã¬ããã¯ã©ã ãè¿œå ããŸããããããŸããŸãªé¢æ°åŒã³åºãããã®ãã¬ããã¯ã©ã ã衚瀺ãããŠãããšæããŸãã
ããã¯çã«ããªã£ãŠããŸããïŒ ãã¬ããã¯ã©ã ãGoogleCloudFunctionsã䜿çšãã1ã€ã®HTTPãªã¯ãšã¹ãããã®ã¿ã«å¶éããã«ã¯ã©ãããã°ããã§ããïŒ
çã«ããªã£ãŠããŸãããã¯ã©ãŠãé¢æ°ã§äœ¿çšãããµã³ãã«ã³ãŒããæããŠããã ããŸããïŒ ãã®ããã«ãããšããã¹ãŠãç解ãããããªããŸãã
@kamilogorekããªãã¯æ¬åœã«åœ¹ã«ç«ã¡ãŸããïŒ
Docker/Nodeã§Koaã䜿çšããããã«åãæ¿ããŸããã ãããã£ãŠãKoaçµ±åã¯æ¬¡ã®ããã«èšå®ãããŠããŸãïŒ https ïŒ//docs.sentry.io/platforms/node/koa/
ãã¬ããã¯ã©ã ãé€ããŠãããªãããŸãæ©èœããŠããŸããçŸåšã®ãªã¯ãšã¹ãã«é¢é£ä»ããããŠãããã¬ããã¯ã©ã ã ãã§ãªãããµãŒããŒäžã®ãã¹ãŠã®ãªã¯ãšã¹ãã«å¯ŸããŠãã¬ããã¯ã©ã ã衚瀺ãããŠããŸãã
ãããä¿®æ£ããæ¹æ³ã¯ãããŸããïŒ
ãããä¿®æ£ããæ¹æ³ã¯ãããŸããïŒ
ãããŸãããããã«ã³ãŒããæäŸããåã«ãã¹ãããå¿
èŠããããŸã:)
1ã2æ¥ä»¥å
ã«ãé£çµ¡ãå·®ãäžããŸãã
@kamilogorekããªãã¯ç§ã®å人ã®çµ¶å¯ŸçãªäŒèª¬ã§ã
@vpontisãªã®ã§ãå®éã«è¡ãå¿
èŠãããã®ã¯ãããã«ãŠã§ã¢ã®1ã€ã«ãã¡ã€ã³ã€ã³ã¹ã¿ã³ã¹ãäœæããããšã ãã§ãã ããã«å°éãããšãSDKã¯ãããæ€åºããã³ã³ããã¹ããåé¢ããããã«äœ¿çšããŸãã parseRequest
ãããã«ç§»åããããšãã§ããŸãã ïŒhttps://github.com/koajs/examples/blob/master/errors/app.jsã«åºã¥ãäŸïŒ
const Sentry = require("@sentry/node");
const Koa = require("koa");
const app = (module.exports = new Koa());
const domain = require("domain");
Sentry.init({
// ...
});
app.use(async function(ctx, next) {
const local = domain.create();
local.add(ctx);
local.on("error", next);
local.run(() => {
Sentry.configureScope(scope => {
scope.addEventProcessor(event => Sentry.Handlers.parseRequest(event, ctx.request));
});
next();
});
});
app.use(async function(ctx, next) {
try {
await next();
} catch (err) {
// some errors will have .status
// however this is not a guarantee
ctx.status = err.status || 500;
ctx.type = "html";
ctx.body = "<p>Something <em>exploded</em>, please contact Maru.</p>";
// since we handled this manually we'll
// want to delegate to the regular app
// level error handling as well so that
// centralized still functions correctly.
ctx.app.emit("error", err, ctx);
}
});
// response
app.use(async function() {
throw new Error("boom boom");
});
// error handler
app.on("error", function(err) {
Sentry.captureException(err);
});
if (!module.parent) app.listen(3000);
parseRequest
ã¯ãæœåºãããªã¯ãšã¹ãããŒã¿ãéžæããããã«äœ¿çšã§ããããã€ãã®ãªãã·ã§ã³ãåãå
¥ããŸã-https://github.com/getsentry/sentry-javascript/blob/f71c17426c7053d46fe3e2e35e77c564749d0eb7/packages/node/src/handlers .tsïŒL177
ããããšã@kamilogorekïŒ
ããã€ãã®èãïŒ
å®éã®ããŒãreq
ãšres
ãã ctx.req
ãš`ctx.resã«ä¿åãããŠãããã¡ã€ã³ã«ãã€ã³ãã§ããŸãã
ããŒãreq
ãparseRequest
ã«æž¡ãããšãã§ããŸã
ãšã©ãŒãæåã§ãã£ããããåŸããªãctx.app.emit("error", err, ctx);
ãåŒã³åºãã®ã§ããïŒ
// since we handled this manually we'll
// want to delegate to the regular app
// level error handling as well so that
// centralized still functions correctly.
ctx.app.emit("error", err, ctx);
ããã¯ãå¿çãè¿ãã ãã§ããšã©ãŒãäžå åããããšã©ãŒãã³ãã©ãŒã«æž¡ããªãå Žåã§ã¯ãªãã§ããããã
next
ã¯async
ã§ãã ããŒãå
ã§åé¡ãçºçããŸããdomain.run(...)
ãããçã«ããªã£ãŠãããã©ããæããŠãã ããã ããã¯ãã§ã«ãšãŠãããšãŠã圹ã«ç«ã¡ãŸãã ä»é±åŸåã«ãã¹ãããŸãã
Ah re 3äŸããã³ããŒããŠããã ããªã®ã§ããã®éšåã¯ç¡èŠããŸã:)ã ä»ããããã¹ãããŠããŸã...
ããŒãããããæ©èœãããã®ã«åé¡ããããŸãã ããã¯ãKoaã®ãã¡ã€ã³ã³ãŒã«ããã¯ãšasync
é¢æ°ãæ··åšããŠããããã ãšæããŸãã
ãŸãããã¡ã€ã³ã¯ããŒã12ã§ãæ©èœããªãããã§ãïŒéåæã¹ã¿ãã¯ãã¬ãŒã¹ã®ãµããŒããååŸããããã«ãããã«ã¢ããã°ã¬ãŒãããäºå®ã§ãïŒã
ãããã«ããããã¡ã€ã³ã䜿çšãããã®ã³ãŒããã©ã®ããã«æ©èœããããç解ããŠããªããããã¢ããªã®éèŠãªéšåã«é 眮ããããšãèºèºããŠããŸãã
çŸåšã®ãããããctx
ã«é
眮ããçŸåšã®ãªã¯ãšã¹ãã«é¢é£ä»ããããaddBreadcrumb
ãåŒã³åºãå¥ã®æ¹æ³ã¯ãããŸããïŒ Sentryã§ãããšã¡ãã»ãŒãžåŠçãã©ã®ããã«æ©èœãããã¯ããããããŸãã...
ç§ã¯ãã®ã³ãŒããæ©èœãããŸããïŒãããã¯2ã€ã®é£ç¶ããããã«ãŠã§ã¢é¢æ°ã§ãïŒãããããæ©èœãã_çç±_ã«æºè¶³ããŠããŸãã...
export const setSentryDomain = async (ctx, next) => {
await new Promise(async (resolve, reject) => {
const local = domain.create();
local.add(ctx.req);
local.add(ctx.res);
local.run(async () => {
Sentry.configureScope((scope) => {
scope.addEventProcessor((event) => Sentry.Handlers.parseRequest(event, ctx.req));
});
await next();
resolve();
});
});
};
export const catchErrors = async (ctx, next) => {
try {
await next();
} catch (err) {
console.log('got error');
ctx.app.emit('error', err, ctx);
}
};
ç§ã¯ãããå€ãšåŒãã§ããŸãã æºè¶³ã§ããå®çšçãªãœãªã¥ãŒã·ã§ã³ãåŸãããŸããã§ããã
ãŸããç§ã®ãã¬ããã¯ã©ã ã®ã»ãšãã©ã¯ãSentryã«ãã£ãŠèªåçã«ãã£ããã£ãããconsole.log
ã¹ããŒãã¡ã³ãããã®ãã®ã§ããããšã«æ°ä»ããŸããã ãããã£ãŠããããã®ãã¬ããã¯ã©ã ãé©åãªç¯å²ã«åããæ¹æ³ãç解ããå¿
èŠããããŸã...
ã³ãŒãããã£ãšèŠãŠã¿ããšããã¡ã€ã³ã¯ãã®åé¡ã解決ããŠããããã«èãããŸãã ãããããã¡ã€ã³ã¯éåæé¢æ°ã§ã¯ä¿¡é Œã§ããªãããã§ããŸããªãå»æ¢ãããŸã...
çŸåšã®ãããããctxã«é 眮ããçŸåšã®ãªã¯ãšã¹ãã«äœããã®åœ¢ã§é¢é£ä»ããããaddBreadcrumbãåŒã³åºãå¥ã®æ¹æ³ã¯ãããŸããïŒ
ãããctx
ã«çŽæ¥å²ãåœãŠãããšãã§ããŸããããããè¿ãããã«Sentry.getCurrentHub()
ãå¿
èŠãªãããèªåçã«ãã£ããã£ããããã¬ããã¯ã©ã ã§ã¯æ©èœããŸããããã¬ããã¯ã©ã ãå²ãåœãŠãå¿
èŠããããŸãã ãããŠããããæ€åºããæ¹æ³ã®1ã€ã¯ã domain.active
ã䜿çšããããšã§ãã
ãããããã¡ã€ã³ã¯éåæé¢æ°ã§ã¯ä¿¡é Œã§ããªãããã§ããŸããªãå»æ¢ãããŸã...
æ®å¿µãªããããããã¯2014幎12æ以éå»æ¢ãããæ確ãªçœ®ãæãã¯èŠãããïŒéåæããã¯ããããŸãããå®å šã§ã¯ãããŸããïŒããã®5幎éã§ããŒãã®ã³ã¢ããåé€ãããŠããŸããã
zone.js
ã¯éåžžã«åœ¹ç«ã€ã®ã§ãä»ã¯éãã§ããŸãããããã§ãä»ã®ãšãã巚倧ãªPoCã§ããããã¡ã€ã³ã®ä»£ããã«ãã€äœ¿çšãããããŸãã¯äœ¿çšãããã©ããããããããŸããã
ããã«ã¡ã¯@kamilogorek ã
æªåŠçã®ãšã©ãŒãSentryã«ãã£ããã£ããããšããŠããŸããã httpsïŒ //github.com/getsentry/sentry-javascript/issues/2122#issuecomment-503440087ã§èšåããå 容ãè©ŠããŸããã
ããããã°ãŒã°ã«ã¯ããªããprocess.on('uncaughtException')
ã«æ¥ç¶ããããšãèš±å¯ããŠããªããšæããŸããç§ã¯ãã®ã¢ãããŒãã䜿çšããŠã»ã³ããªãŒã«ãšã©ãŒãèšé²ããããšãã§ããŸããã§ããã
è©ŠããŠã¿ãããšããå§ãããä»ã®æ¹æ³ã¯ãããŸããïŒãã¹ãŠã®é¢æ°æ¬äœãtry catchãããã¯ã§ã©ããããããšã¯ãçæ³çãªæ¹æ³ã§ã¯ãªãããã§ãã
wrap
ã¡ãœãããæäŸããŠããŸãããtbhãè©ŠããŠ/ãã£ãããããããã¯ããã«åªããŠãããšã¯æããŸããã
exports.helloBackground = (data, context) => {
return `Hello ${data.name || 'World'}!`;
};
// becomes
exports.helloBackground = (data, context) => {
return Sentry.wrap(() => {
return `Hello ${data.name || 'World'}!`;
})
};
ãã®åé¡ã¯ãfirebase/googleã¯ã©ãŠãæ©èœãããç°¡åã«ãµããŒãããããã®æ©èœãªã¯ãšã¹ããšããŠéãããŸãŸã«ããŠãã䟡å€ãããããã«æãããŸãã
ã¯ã©ã€ã¢ã³ãåŽã§ã®ã»ããã¢ããã®ããããã«éåžžã«æéãåãããµãŒããŒåŽã®ã»ããã¢ãããã¯ããã«è€éã«ãªãããšã«æ°ä»ãããšãã¯ãã£ããããŸããã GCPã®ãšã¯ã¹ããªãšã³ã¹ïŒç¹ã«æ©èœïŒãæ¹åããèšç»ã¯ãããŸããïŒ
@golearyèŠãããã®ãæ£ç¢ºã«èª¬æããæ°ããå·ãéããŠããã ããŸãããïŒ
ãã®ã¹ã¬ããã¯ãã§ã«ããªã倧ããã远跡ããã®ãå°é£ã§ãã
ããããšã
ãããèšå®ããç°¡åãªæ¹æ³ã¯ãŸã ãããŸãããïŒ çæ³çã«ã¯ããã¹ãŠã®æ©èœã«å¯ŸããŠèšå®ããªããŠããã°ããŒãã«ã«äžåºŠèšå®ã§ããã®ã§ããããã
@marcospgpãããããããŠæ®å¿µãªãããGoogleèªäœããããå¯èœã«ããã¡ã«ããºã ãæäŸããŠããªãã®ã§ããããŸããã ç¬èªã®ã¬ããŒã¿ãŒãã芧ãã ãã-https://cloud.google.com/error-reporting/docs/setup/nodejsæååŒã³åºãã䜿çšããŠããŸãã
èå³æ·±ãããšã«ãFirebaseã¯ã©ãŠãé¢æ°ïŒGoogleã¯ã©ãŠãé¢æ°ãèå°è£ã§äœ¿çšïŒã«Sentryãèšå®ããŸãããããšã©ãŒã¬ããŒãã衚瀺ãããã®ã§ãæ©èœããŠããããã§ãã
ãããç§ã®index.jsã§ããã¹ãŠã®Sentryã³ãŒãã¯æ¬¡ã®ãšããã§ãã
const admin = require("firebase-admin");
const functions = require("firebase-functions");
const Sentry = require("@sentry/node");
/**
* Set up Sentry for error reporting
*/
if (functions.config().sentry && functions.config().sentry.dsn) {
Sentry.init({ dsn: functions.config().sentry.dsn });
} else {
console.warn(
"/!\\ sentry.dsn environment variable not found. Skipping setting up Sentry..."
);
}
admin.initializeApp();
const { function1 } = require("./cloud-functions/function1");
const { function2 } = require("./cloud-functions/function2");
module.exports = {
function1,
function2
};
@marcospgpã¯ãäžèšã®index.js
ã./cloud-functions/function1
ããã³./cloud-functions/function2
å
ã®ãã£ãããããªãäŸå€ãSentryã«éä¿¡ã§ããŸãããããããšããããã®ãã¡ã€ã«å
ã§Sentryã«ã¢ã¯ãã£ãã«ãã°ã€ã³ããå¿
èŠããããŸãããïŒ
@marcospgpãœãªã¥ãŒã·ã§ã³ãè©ŠããŸãããããã£ãããããªãã£ãäŸå€ããã°ã«èšé²ããŠããªãããã§ããæåã§ãã°ã«èšé²ããå¿
èŠããããŸãïŒ sentry.captureException()
ã䜿çšããŸããïŒïŒ
ããã®@golearyãšåãããã«ãäœããã°ã«èšé²ãããŸããã
ãŸãã .wrap()
ã¯ããå©çšã§ããªãããã§ãã
ããã¯ããã¹ãŠã®ã³ãŒããtry / catchå ã«æåã§ã©ããããå¿ èŠãããããšãæå³ããŸããïŒ
@Dinduksãããç§ããã£ãŠããããšã§ãã ãªãŒããŒãããã¯å°ãé¢åã§ãããæ©åšã䜿çšã§ããããã«ããããšã¯ãfirebaseã¯ã©ãŠãé¢æ°ã®ãã°èšé²ãããåªåãã䟡å€ããããŸãïŒããŸãè¯ããããŸããïŒã
@Dinduks wrap
ã¯ãŸã ãããŸããhttps ïŒ//github.com/getsentry/sentry-javascript/blob/master/packages/browser/src/exports.ts#L40ãåç
§ããŠãã ããã
ãã ããé¢æ°ã¯ããã«å®è¡ãããæ»ãå€ãè¿ãããããšã«æ³šæããŠãã ããã ãããã£ãŠããããéåžžã®try / catchããã圹ç«ã€ãã©ããã¯ããããŸãããããã«ããããŠãŒã¶ãŒã®ãã©ãŒã«ããã¯ã¢ã¯ã·ã§ã³ãå®è¡ã§ããŸãã
const myHandler = (req, res) => Sentry.wrap(() => {
someFunctionThatCanBreak(req);
return res.send(200);
});
è¯ãèãã§ã¯ãªããšæããŸããããã®ãããªã©ãããŒãäœæããŸããã
import * as Sentry from "@sentry/node";
export const sentryWrapper = (f) => {
return async function () {
try {
// eslint-disable-next-line prefer-rest-params
return await f.apply(this, arguments);
} catch (e) {
Sentry.captureException(e);
await Sentry.flush(2000);
throw new Error(e);
}
};
};
以äžã®ããã«äœ¿çšããŸãã
export const getChannelVideoTest = functions.https.onRequest(
sentryWrapper(async (req, res) => {
someFunctionThatCanBreak(req);
return res.send(200);
}),
);
ãã£ãšè¯ãæ¹æ³ããããã©ããç¥ãããã®ã§ããã
@kamilogorek
ç§ãããã«èŠåŽããŠããŸãã
Sentry.init()
ã«æåãããã¹ãŠã®ã³ãŒããtry {} catch {}
ã¹ããŒãã¡ã³ãã§ã©ãããã Sentry.captureException
ãšSentry.flush()
ãæåã§åŒã³åºããšãåé¡ãçºçããŸãã
ãã ãã try/catch
ã¹ããŒãã¡ã³ããåé€ãããšãäœãå ±åãããŸããã
é¢æ°ã®å
é ã§Sentry.startTransaction()
ã䜿çšããŠãã©ã³ã¶ã¯ã·ã§ã³ãæåã§äœæããªãéããäœãåŸãããªãããã©ãŒãã³ã¹ç£èŠã«ã€ããŠãåãããšãèšããŸãã
ããã¯æåŸ
ãããŠããŸããïŒ
æªåŠçã®ãšã©ãŒãSentryã«éä¿¡ããæ¹æ³ã¯ãããŸããïŒ
ããã§ãªãå Žåãããã¯ãããã©ãŒãã³ã¹ã¿ããåžžã«å€±æçã0ïŒ
ã«èšå®ããããšãæå³ããŸããïŒ ïŒãšã©ãŒããã£ããããŠæåã§å ±åããããããã©ã³ã¶ã¯ã·ã§ã³ã¯é©åã«éããããŠãããæ£åžžãªã¹ããŒã¿ã¹ã«ãªã£ãŠããŸããïŒïŒ
@axelvaindalãµãŒããŒã¬ã¹ã®ããã©ãŒãã³ã¹ã¢ãã¿ãªã³ã°ã¯ãŸã ãµããŒããããŠããŸããã ãã®è³ªåã«é¢ããŠïŒ
æªåŠçã®ãšã©ãŒãSentryã«éä¿¡ããæ¹æ³ã¯ãããŸããïŒ
ããã§ã¯ãããŸãããGCFã¯æªåŠçã®äŸå€/æåŠã«ããã¯ããæ¹æ³ãæäŸããŠããªãããããããååããããšã¯ã§ããŸããã æåã§ãã£ããããã«ã¯ããã³ãã©ãŒãã©ããããå¿ èŠããããŸãïŒäžã®ã³ã¡ã³ããåç §ïŒã
AWSLambdaãã³ãã©ãŒã®å®è£ ãèªãã§ããã®ã¹ãããããæ¹åããæ¹æ³ã®ã¢ã€ãã¢ãåŸãããšãã§ããŸã-https ://github.com/getsentry/sentry-javascript/blob/master/packages/serverless/src/awslambda.ts