[英]Detecting process crashes with New Relic in NodeJS
如何使用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
處理程序,我沒有得到任何新的Relic。 問題是我無法區分崩潰進程的錯誤和正常的HTTP 500錯誤。
這是我嘗試過的東西:
如果我嘗試將{ crash : true }
添加到noticeError
調用,它似乎沒有任何影響。
我試圖做domain
而不是process.on
,這不會改變這種情況。
如果我嘗試更改錯誤的name
,例如err.name = "CrashError"
則根本不會傳輸錯誤。
如果我創建一個自定義錯誤類型,然后創建新的錯誤類型,並將堆棧跟蹤復制到它,它仍然報告為類型Error
而不是我的新錯誤類型的prototype.name
。
看起來你已經用New Relic Support創建了一張票,所以我們將通過票證來追問這個問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.