New Relic에서 새 Relic 응용 프로그램 모니터링을 사용하여 프로세스를 중단시키는 오류를 어떻게 로그합니까? 내가 달성하고자하는 주요 사항은과 대시 보드에서 이러한 오류를 필터링하기 위해 에 어떤 식 으로든 어떤 식 으로든 기록되는 과정을 크래시하는 오류가있는 오류입니다.NodeJS의 New Relic으로 프로세스가 충돌 함
새로운 유물들이 클라우드 매 순간에 데이터를 전송 :
다음은 지금까지 나의 이해입니다.uncaughtException
이벤트가 발생하면 현재 전송 대기중인 모든 데이터가 손실됩니다.두 번째 인수를 사용하여 오류가있는 사용자 지정 매개 변수를 전달할 수있는가 있습니다. 새 유물은 오류를 가져 오지만 사용자 지정 매개 변수는 가져 오지 않습니다.
간단한 예 :
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 호출하면 코드 블록을 사용하여이/I 적어도 오류를 기록하는 새로운 유물을 얻을 수 있어요. uncaughtException
처리기가 없으면 나는 New Relic에 아무 것도주지 않는다. 문제는 프로세스를 중단시키는 오류와 일반적인 HTTP 500 오류를 구별 할 수 없다는 것입니다.
는 여기에 내가 해봤 뭔가 것들이다 :
나는 어떤 영향이하지 않는 것
noticeError
전화에{ crash : true }
를 추가하려고합니다.process.on
대신domain
을 시도했는데 상황이 바뀌지 않았습니다.err.name = "CrashError"
과 같이 오류name
을 변경하려고하면 오류가 전혀 전송되지 않습니다.사용자 정의 오류 유형을 작성한 후 새로 작성하여 스택 추적을 복사하면 새 오류 유형
prototype.name
이 아닌Error
유형으로보고됩니다.
감사! 나는 '수확'에 대한 전화를 놓치고 있었고, 당신은 나를 많이 도왔습니다! – Pedro
해결책이 있습니까? 어떻게 작동 시키셨습니까? – kfiroo
불행히도 우리는 해결책을 찾지 못했습니다. Logrelly를 위해 Newrelic의 응용 프로그램 모니터링을 실제로 사용하지 않았습니다. 오류 로깅 및 프로세스 로깅이 훨씬 쉬워졌습니다. – Nucleon