Как вы получаете новую реликвию для регистрации ошибок, которые приводят к сбою процесса, используя мониторинг их новых реликвий? Ключевыми вещами, которые я пытаюсь выполнить, являются ошибки , которые приводят к сбою в процессе, все еще регистрируются и каким-то образом до фильтруют эти ошибки на приборной панели.Обнаружение сбоев процесса с помощью новой реликвии в NodeJS
Вот мое понимание до сих пор:
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/Я могу получить новый Relic, по крайней мере, зарегистрировать ошибку. Без обработчика uncaughtException
я не получаю ничего от Новой Реликвии. Проблема в том, что я не могу различать ошибки, которые приводят к сбою процесса, и обычные ошибки HTTP 500.
Вот что-то, что я пробовал:
Если я пытаюсь добавить
{ crash : true }
кnoticeError
вызова он, кажется, не имеют никакого влияния.Я попытался сделать
domain
вместоprocess.on
, что не изменит ситуацию.Если я попытаюсь изменить ошибку
name
ошибки, напримерerr.name = "CrashError"
, тогда ошибка не будет передаваться вообще.Если я создаю собственный тип ошибки, а затем новый, который и скопирует трассировку стека на него, он по-прежнему отображается как тип
Error
, а неprototype.name
моего нового типа ошибки.
Спасибо! Мне не хватало вызова «урожая», ты мне очень помог! – Pedro
Есть ли решение? Как вы его заработали? – kfiroo
К сожалению, мы так и не смогли найти решение. Мы фактически прекратили использовать мониторинг приложений Newrelic в пользу Loggly. Это значительно облегчает регистрацию ошибок и протоколирование процессов. – Nucleon