认识
2024年04月24日
一、认识
数据聚合 主要是异常数据的聚合。是为了将相同信息的异常数据进行抽象聚合成 issue
,以便查询和追踪。如果我们只是上报一条存一条,并且给用户展示一条错误,那么在平台侧,我们的异常错误列表会被大量的重复上报占满。在这种情况下,我们需要对堆栈进行分组和聚合。也就是,将具有相同特征的错误上报,归类为同一种异常,并且只对用户暴露这种聚合后的异常。
那么, 数据聚合是如何实现的呢? 我们采用 Sentry
的异常数据聚合策略 Issue Grouping
, 策略如下:
在 Sentry
内部, 每个错误都会有按照指定聚合算法生成对应的 fingerprint
,Sentry
根据 fingerprint
生成对应的 Group Hash Code
,并以此来对错误事件进行归类。即相同的 Group Hash Code
被归为同一个 issue
。具体如下:
将解析后的错误堆栈 stacktrace
进一步拆分为一系列的 Frame
, 每一个 Frame
内我们重点关注其调用函数名,调用文件名以及当前执行的代码行。Sentry
将每一个拆分出的部分都称为一个 GroupingComponent
,当堆栈反解完毕后,我们首先自上而下的递归检测,并自下而上的生成一个个嵌套的 GroupingComponent
。最后,在顶层调用 GroupingComponent.getHash()
方法, 得到一个最终的哈希值,这就是我们最终求得的 fingerprint
。
基于错误堆栈的聚合策略,能够更细致的提取堆栈特征,规避了不同文件下触发相同 message
的问题。因此获得的聚合效果也更优秀。这个策略目前在内部的工作效果良好,基本上能够做到精确的区分各类异常而不会造成混淆和错误聚合。