2014-11-17 2 views
6

Как вы получаете новую реликвию для регистрации ошибок, которые приводят к сбою процесса, используя мониторинг их новых реликвий? Ключевыми вещами, которые я пытаюсь выполнить, являются ошибки , которые приводят к сбою в процессе, все еще регистрируются и каким-то образом до фильтруют эти ошибки на приборной панели.Обнаружение сбоев процесса с помощью новой реликвии в NodeJS

Вот мое понимание до сих пор:

  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/Я могу получить новый Relic, по крайней мере, зарегистрировать ошибку. Без обработчика uncaughtException я не получаю ничего от Новой Реликвии. Проблема в том, что я не могу различать ошибки, которые приводят к сбою процесса, и обычные ошибки HTTP 500.

Вот что-то, что я пробовал:

  1. Если я пытаюсь добавить { crash : true } к noticeError вызова он, кажется, не имеют никакого влияния.

  2. Я попытался сделать domain вместо process.on, что не изменит ситуацию.

  3. Если я попытаюсь изменить ошибку name ошибки, например err.name = "CrashError", тогда ошибка не будет передаваться вообще.

  4. Если я создаю собственный тип ошибки, а затем новый, который и скопирует трассировку стека на него, он по-прежнему отображается как тип Error, а не prototype.name моего нового типа ошибки.

+0

Спасибо! Мне не хватало вызова «урожая», ты мне очень помог! – Pedro

+0

Есть ли решение? Как вы его заработали? – kfiroo

+0

К сожалению, мы так и не смогли найти решение. Мы фактически прекратили использовать мониторинг приложений Newrelic в пользу Loggly. Это значительно облегчает регистрацию ошибок и протоколирование процессов. – Nucleon

ответ

-12

Похоже, вы создали билет с поддержкой новой реликвии, поэтому мы рассмотрим этот вопрос через билет.

+4

Было бы здорово, если бы вы могли поделиться решением здесь, чтобы другие пользователи новой реликвии могли его реализовать. У меня такая же борьба ... – Eugene

+1

Удар, пожалуйста, поделитесь решением – talkol

+0

Пожалуйста, поделитесь решением здесь! – Holf

Смежные вопросы