跳到主要内容

认识

2024年04月24日
柏拉文
越努力,越幸运

一、认识


数据聚合 主要是异常数据的聚合。是为了将相同信息的异常数据进行抽象聚合成 issue,以便查询和追踪。如果我们只是上报一条存一条,并且给用户展示一条错误,那么在平台侧,我们的异常错误列表会被大量的重复上报占满。在这种情况下,我们需要对堆栈进行分组和聚合。也就是,将具有相同特征的错误上报,归类为同一种异常,并且只对用户暴露这种聚合后的异常。

那么, 数据聚合是如何实现的呢? 我们采用 Sentry 的异常数据聚合策略 Issue Grouping, 策略如下:

Sentry 内部, 每个错误都会有按照指定聚合算法生成对应的 fingerprintSentry 根据 fingerprint 生成对应的 Group Hash Code,并以此来对错误事件进行归类。即相同的 Group Hash Code 被归为同一个 issue。具体如下:

将解析后的错误堆栈 stacktrace 进一步拆分为一系列的 Frame, 每一个 Frame 内我们重点关注其调用函数名,调用文件名以及当前执行的代码行。Sentry 将每一个拆分出的部分都称为一个 GroupingComponent,当堆栈反解完毕后,我们首先自上而下的递归检测,并自下而上的生成一个个嵌套的 GroupingComponent。最后,在顶层调用 GroupingComponent.getHash() 方法, 得到一个最终的哈希值,这就是我们最终求得的 fingerprint

基于错误堆栈的聚合策略,能够更细致的提取堆栈特征,规避了不同文件下触发相同 message 的问题。因此获得的聚合效果也更优秀。这个策略目前在内部的工作效果良好,基本上能够做到精确的区分各类异常而不会造成混淆和错误聚合。

二、实现


参考资料


字节前端监控实践

哦吼!前端异常处理一站式详解🤩(大量DEMO,很干很干)

沉淀了3年的自研前端错误监控系统,打通你的脉络

解析Sentry源码(一)| 搞懂Sentry初始化