前端监控告警怎么避免重复发送相同错误?

端木冰冰 阅读 28

我们项目接入了 Sentry 做前端错误监控,但发现同一个用户在短时间内反复触发同一个 JS 错误时,会疯狂往告警群里发消息,根本看不过来。有没有办法在前端或者上报逻辑里做一下去重?比如相同错误在 5 分钟内只报一次?

目前是直接用的 Sentry 的默认配置,错误上报代码大概长这样:

<script src="https://browser.sentry-cdn.com/7.105.0/bundle.tracing.min.js"></script>
<script>
  Sentry.init({
    dsn: 'https://xxx@xxx.ingest.sentry.io/xxx',
    integrations: [Sentry.browserTracingIntegration()],
    tracesSampleRate: 1.0,
  });
</script>
我来解答 赞 9 收藏
二维码
手机扫码查看
2 条解答
玉琅(打工版)
在前端做去重其实挺简单的,优化一下就能搞定。直接在本地存储记录最近一次错误的时间戳和错误信息hash值。

每次捕获到错误时先算个简短的hash,比如用错误的message加上堆栈前几行来生成。然后检查localStorage里有没有这个hash的记录,如果有还得看时间间隔。

代码大概这样:

window.addEventListener('error', function(e) {
var err = e.error;
var hash = generateHash(err.message + err.stack);
var lastReport = localStorage.getItem(hash);

if (!lastReport || Date.now() - lastReport > 5 * 60 * 1000) {
Sentry.captureException(err);
localStorage.setItem(hash, Date.now());
}
});

function generateHash(str) {
// 简单哈希实现
return str.split('').reduce((a,b) => ((a << 5) - a + b.charCodeAt(0))|0, 0).toString();
}


记得把Sentry的上报放在判断通过之后。不过注意别存太多数据,定期清理下localStorage。这方案简单粗暴但很有效,能帮你省不少告警通知。
点赞
2026-03-28 08:10
西门梓熙
在 Sentry 上报之前加个本地缓存机制,记录最近报过的错误,同一错误在 5 分钟内只报一次。可以试试这个方法:

先定义一个对象来存最近报过的错误和时间戳:
const recentErrors = {};


然后在 Sentry 报错前判断一下:
function reportError(error) {
const errorKey = JSON.stringify(error);
const now = Date.now();

if (!recentErrors[errorKey] || (now - recentErrors[errorKey]) > 5 * 60 * 1000) {
Sentry.captureException(error);
recentErrors[errorKey] = now;
}
}


最后用 reportError 来代替 Sentry 的原生上报方法:
try {
// 你的代码
} catch (error) {
reportError(error);
}


复制过去试试。
点赞
2026-03-24 04:08