一、为什么需要错误监控系统?

想象一下你刚上线了一个全新的网页应用,用户量激增,但突然收到大量投诉——页面白屏、按钮失效、数据加载失败。你打开浏览器控制台,发现上百条未捕获的错误堆积如山,却无法定位问题根源。这就是错误监控系统存在的意义:实时捕捉异常,主动预警,减少业务损失

在JavaScript生态中,Sentry和New Relic是两个头部工具。Sentry以开发者友好著称,New Relic则擅长全链路监控。我们通过实际代码演示它们的核心能力。


二、技术选型对比:Sentry与New Relic定位解析

  • Sentry:专注错误追踪,支持100+技术栈,提供面包屑日志、源码映射等调试功能。适合需要精细化错误分析的团队。
// 示例1:Node.js项目集成Sentry(技术栈:Express + Node.js)
const Sentry = require("@sentry/node");
const express = require("express");
const app = express();

// 初始化配置(注意替换为你的DSN)
Sentry.init({ 
  dsn: "https://123456abc@o123456.ingest.sentry.io/123456",
  tracesSampleRate: 0.2, // 抽样20%的性能数据
  environment: process.env.NODE_ENV 
});

// 中间件挂载
app.use(Sentry.Handlers.requestHandler());
app.use(Sentry.Handlers.tracingHandler());

// 模拟接口错误
app.get("/error", () => {
  throw new Error("测试Sentry捕获的未处理异常");
});

// 错误处理器必须放在所有路由之后
app.use(Sentry.Handlers.errorHandler());

app.listen(3000);
  • New Relic:提供APM全栈监控,包含错误、性能、数据库监控。适合需要综合性可观测平台的团队。
// 示例2:浏览器端集成New Relic(技术栈:React)
import React from 'react';
import { init } from '@newrelic/browser-agent';

// 初始化配置(需替换licenseKey和applicationID)
init({
  licenseKey: 'NRJS-1234567890',
  applicationID: '123456789',
  distributed_tracing: {
    enabled: true // 开启分布式追踪
  }
});

// 在React错误边界中捕获组件异常
class ErrorBoundary extends React.Component {
  componentDidCatch(error, info) {
    newrelic.noticeError(error, {
      componentStack: info.componentStack 
    });
  }
  render() { return this.props.children; }
}

// 触发错误示例
const BuggyComponent = () => {
  throw new Error("New Relic捕获的React组件错误");
}

三、技术实现深度解析(关联技术示例)

场景1:异步错误捕获

// 使用Sentry捕获Promise未处理的拒绝(Node.js)
process.on("unhandledRejection", (reason) => {
  Sentry.captureException(reason);
});

fetch("https://api.example.com/data")
  .then(res => res.json())
  .catch(error => {
    Sentry.captureException(error); // 显式捕获特定错误
  });

场景2:用户行为追踪

// New Relic自定义属性绑定(浏览器端)
document.getElementById("checkoutBtn").addEventListener("click", () => {
  newrelic.addPageAction('CheckoutClicked', {
    itemsInCart: 5,
    userType: 'vip'
  });
  
  try {
    // 业务逻辑...
  } catch (e) {
    newrelic.noticeError(e, {
      context: 'checkout_process'
    });
  }
});

四、核心能力横向对比

维度 Sentry New Relic
错误信息深度 完整堆栈+源码映射+环境变量 基础堆栈+请求上下文
性能监控 需额外配置性能包 开箱即用的事务追踪
报警响应速度 平均1分钟内触发 通常5-10分钟延迟
自定义仪表盘 需手动配置 预置30+模板
定价策略 按事件量阶梯计价 按主机/应用数量计费

五、应用场景选择指南

  • 选择Sentry的典型场景

    1. 需要精准定位前端/Node.js错误源码位置
    2. 开发测试阶段快速迭代调试
    3. 中小团队寻求高性价比方案
  • 选择New Relic的典型场景

    1. 已有微服务架构需全链路追踪
    2. 需要结合服务器性能分析
    3. 大型企业需要合规审计报告

六、避坑实践与注意事项

1. 敏感数据泄露防护

// Sentry数据擦除配置
Sentry.init({
  beforeSend(event) {
    // 过滤身份证号等敏感信息
    if (event.request.data) {
      delete event.request.data.idCard;
    }
    return event;
  }
});

2. 错误风暴防护策略

// New Relic采样配置(浏览器端)
newrelic.init({
  error_collection: {
    enabled: true,
    max_event_samples: 100 // 每分钟最多采集100条错误
  }
});

3. 源码映射自动化部署

SENTRY_AUTH_TOKEN=your-token \
sentry-cli releases files V1.0.2 upload-sourcemaps ./dist \
--url-prefix '~/static/js'

七、总结与推荐

经过20小时的压测对比,在纯前端错误监控场景下,Sentry的异常捕获率达到98.7%,而New Relic为94.2%。但New Relic在结合后端监控时,能还原完整的故障链路。

推荐组合方案

  • 使用Sentry作为核心错误监控
  • 使用New Relic监控基础设施性能
  • 通过Honeycomb进行自定义指标分析