2014-11-17 1 views
6

New Relic에서 새 Relic 응용 프로그램 모니터링을 사용하여 프로세스를 중단시키는 오류를 어떻게 로그합니까? 내가 달성하고자하는 주요 사항은과 대시 보드에서 이러한 오류를 필터링하기 위해 에 어떤 식 으로든 어떤 식 으로든 기록되는 과정을 크래시하는 오류가있는 오류입니다.NodeJS의 New Relic으로 프로세스가 충돌 함

  1. 새로운 유물들이 클라우드 매 순간에 데이터를 전송 :

    다음은 지금까지 나의 이해입니다. uncaughtException 이벤트가 발생하면 현재 전송 대기중인 모든 데이터가 손실됩니다.

  2. 두 번째 인수를 사용하여 오류가있는 사용자 지정 매개 변수를 전달할 수있는가 있습니다. 새 유물은 오류를 가져 오지만 사용자 지정 매개 변수는 가져 오지 않습니다.

간단한 예 :

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 오류를 구별 할 수 없다는 것입니다.

는 여기에 내가 해봤 뭔가 것들이다 :

  1. 나는 어떤 영향이하지 않는 것 noticeError 전화에 { crash : true }를 추가하려고합니다.

  2. process.on 대신 domain을 시도했는데 상황이 바뀌지 않았습니다.

  3. err.name = "CrashError"과 같이 오류 name을 변경하려고하면 오류가 전혀 전송되지 않습니다.

  4. 사용자 정의 오류 유형을 작성한 후 새로 작성하여 스택 추적을 복사하면 새 오류 유형 prototype.name이 아닌 Error 유형으로보고됩니다.

+0

감사! 나는 '수확'에 대한 전화를 놓치고 있었고, 당신은 나를 많이 도왔습니다! – Pedro

+0

해결책이 있습니까? 어떻게 작동 시키셨습니까? – kfiroo

+0

불행히도 우리는 해결책을 찾지 못했습니다. Logrelly를 위해 Newrelic의 응용 프로그램 모니터링을 실제로 사용하지 않았습니다. 오류 로깅 및 프로세스 로깅이 훨씬 쉬워졌습니다. – Nucleon

답변

-12

새로운 유물 지원으로 티켓을 만들었으므로 티켓을 통해이 질문을 진행할 것입니다.

+4

새로운 유물의 다른 사용자가 솔루션을 구현할 수 있도록 솔루션을 공유 할 수 있다면 좋을 것입니다. 나는 똑같은 투쟁을하고 있습니다 ... – Eugene

+1

범프, 솔루션을 공유하십시오 – talkol

+0

여기 솔루션을 공유하십시오! – Holf