一、为什么需要错误监控系统?
想象一下你刚上线了一个全新的网页应用,用户量激增,但突然收到大量投诉——页面白屏、按钮失效、数据加载失败。你打开浏览器控制台,发现上百条未捕获的错误堆积如山,却无法定位问题根源。这就是错误监控系统存在的意义:实时捕捉异常,主动预警,减少业务损失。
在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的典型场景:
- 需要精准定位前端/Node.js错误源码位置
- 开发测试阶段快速迭代调试
- 中小团队寻求高性价比方案
选择New Relic的典型场景:
- 已有微服务架构需全链路追踪
- 需要结合服务器性能分析
- 大型企业需要合规审计报告
六、避坑实践与注意事项
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进行自定义指标分析