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