在NodeJS中使用New Relic检测进程崩溃

如何获得New Relic来logging使用New Relic应用程序监视造成进程崩溃的错误? 我试图完成的关键事情是有过程中仍然会logging的 错误,以及在仪表板上过滤这些错误的一些方法。

这是我迄今为止的理解:

  1. New Relic每分钟都会将数据传输到云端。 如果发生uncaughtException ,这将导致当前等待传输的所有数据都将丢失。

  2. 有一个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错误。

这是我尝试过的东西:

  1. 如果我尝试将{ crash : true }添加到noticeError调用,它似乎没有任何影响。

  2. 我试图做domain而不是process.on ,这并没有改变的情况。

  3. 如果我试图改变错误的name ,如err.name = "CrashError"那么错误不会被传输。

  4. 如果我创build一个自定义的错误types,然后新build一个,并将堆栈跟踪复制到它,它仍然ErrortypesError而不是我的新错误types的prototype.name

看起来您已经使用New Relic Support创build了一张票,所以我们会通过票来追踪这个问题。