在NodeJS中使用New Relic检测进程崩溃
如何获得New Relic来logging使用New Relic应用程序监视造成进程崩溃的错误? 我试图完成的关键事情是有过程中仍然会logging的 错误,以及在仪表板上过滤这些错误的一些方法。
这是我迄今为止的理解:
-
New Relic每分钟都会将数据传输到云端。 如果发生
uncaughtException
,这将导致当前等待传输的所有数据都将丢失。 -
有一个
newrelic.noticeError()
这应该采取第二个参数,让您传递一个错误的自定义参数。 新文物获取错误,但不是自定义参数。
简单的例子:
var newrelic = require("newrelic"); var express = require("express"); var app = express(); app.get("/softFail/", function(req, res) { res.send(500, "softFail"); }); app.get("/hardFail/", function(req, res) { setImmediate(function() { throw new Error("I failed"); }); }); app.listen(80); process.on("uncaughtException", function(err) { console.error("Uncaught Exception"); console.error(err.stack); newrelic.addCustomParameter("crash", "true"); newrelic.noticeError(err); console.log("sending errors to New Relic"); newrelic.agent.harvest(function() { console.log("send complete, crashing process"); process.exit(1); }); });
如果我打电话给/ hardFail /我可以得到New Relic来至lesslogging错误。 没有uncaughtException
处理程序,我没有得到任何新的遗物。 问题是我无法区分崩溃进程的错误和正常的HTTP 500错误。
这是我尝试过的东西:
-
如果我尝试将
{ crash : true }
添加到noticeError
调用,它似乎没有任何影响。 -
我试图做
domain
而不是process.on
,这并没有改变的情况。 -
如果我试图改变错误的
name
,如err.name = "CrashError"
那么错误不会被传输。 -
如果我创build一个自定义的错误types,然后新build一个,并将堆栈跟踪复制到它,它仍然
Error
typesError
而不是我的新错误types的prototype.name
。
看起来您已经使用New Relic Support创build了一张票,所以我们会通过票来追踪这个问题。