Обнаружение сбоев процесса с помощью New Relic в NodeJS

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

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

  1. New Relic передает данные в свое облако каждую минуту. В случае, если uncaughtException происходит, это приведет к потере всех данных, ожидающих в настоящий момент для передачи.

  2. 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.

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

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

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

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

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

1 ответ

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

Другие вопросы по тегам