簡體   English   中英

使用NodeJS中的New Relic檢測進程崩潰

[英]Detecting process crashes with New Relic in NodeJS

如何使用New Relic來記錄使用New Relic應用程序監控導致進程崩潰的錯誤? 我正在嘗試完成的關鍵事項是出現錯誤,導致進程仍然被記錄,在儀表板上過濾掉這些錯誤

到目前為止,這是我的理解:

  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來至少記錄錯誤,那么使用該代碼塊。 沒有uncaughtException處理程序,我沒有得到任何新的Relic。 問題是我無法區分崩潰進程的錯誤和正常的HTTP 500錯誤。

這是我嘗試過的東西:

  1. 如果我嘗試將{ crash : true }添加到noticeError調用,它似乎沒有任何影響。

  2. 我試圖做domain而不是process.on ,這不會改變這種情況。

  3. 如果我嘗試更改錯誤的name ,例如err.name = "CrashError"則根本不會傳輸錯誤。

  4. 如果我創建一個自定義錯誤類型,然后創建新的錯誤類型,並將堆棧跟蹤復制到它,它仍然報告為類型Error而不是我的新錯誤類型的prototype.name

看起來你已經用New Relic Support創建了一張票,所以我們將通過票證來追問這個問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM