前端监控告警怎么避免重复发送相同错误?
我们项目接入了 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>
每次捕获到错误时先算个简短的hash,比如用错误的message加上堆栈前几行来生成。然后检查localStorage里有没有这个hash的记录,如果有还得看时间间隔。
代码大概这样:
记得把Sentry的上报放在判断通过之后。不过注意别存太多数据,定期清理下localStorage。这方案简单粗暴但很有效,能帮你省不少告警通知。
先定义一个对象来存最近报过的错误和时间戳:
然后在 Sentry 报错前判断一下:
最后用
reportError来代替 Sentry 的原生上报方法:复制过去试试。