如何使用New Relic来记录使用New Relic应用程序监控导致进程崩溃的错误?我试图完成的关键事项是,错误导致流程崩溃仍然会被记录,并且某种方式过滤掉仪表板上的这些错误。
到目前为止我的理解是这样的:
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以至少记录错误,则使用该代码块。如果没有uncaughtException
处理程序,我就无法获得New Relic的任何内容。问题在于我无法区分导致进程崩溃的错误和正常的HTTP 500错误。
这是我尝试过的事情:
如果我尝试将{ crash : true }
添加到noticeError
来电,它似乎没有任何影响。
我尝试过domain
而不是process.on
,这并没有改变这种情况。
如果我尝试更改错误的name
,例如err.name = "CrashError"
,则错误根本无法传输。
如果我创建了一个自定义错误类型,然后新建了它,并将堆栈跟踪复制到它上面,它仍然报告为Error
类型,而不是我的新错误的prototype.name
类型。
答案 0 :(得分:-14)
看起来你已经创建了一张New Relic Support的门票,所以我们会通过门票来追问这个问题。