核心思路是将堆栈日志转为结构化指纹并结合调用链可达性实现告警自动聚类:先剥离动态字段、抽象语义标签、拓扑压缩生成带权有向图;再通过字节码解析构建调用图,反向标记可达抛出点,仅当共享throw site且编辑距离≤阈值才判定同源;最后引入时间衰减与热特征库实现动态聚类闭环。
核心思路是把堆栈信息从“文本日志”转化为“可计算的结构化指纹”,再结合调用链可达性判断其是否属于同一故障根因,从而实现告警自动聚类。
提取结构化堆栈指纹
不直接比对原始堆栈字符串,而是做三步归一化:
- 剥离行号、时间戳、线程ID等动态字段,保留类名+方法名+调用顺序骨架
- 将异常类型(如 NullPointerException)、关键参数类型(如 String、Long)抽象为语义标签
- 对调用链做拓扑压缩:合并重复路径段,标记高频分支点(如 doFilter → invoke → execute),生成带权重的有向图序列
嵌入可达性分析约束
仅靠堆栈相似不够,需验证“是否真能走到同一处”:
- 接入编译期字节码解析结果,构建服务内方法级调用图(Call Graph)
- 对每个堆栈指纹,反向追溯其入口方法,标记所有可达的异常抛出点(throw site)
- 两个告警若共享至少一个可达的 throw site,且堆栈指纹编辑距离 ≤ 阈值,则视为同源
动态聚类与反馈闭环
聚类不是静态分组,而是随运行时上下文演进:
- 初始按指纹哈希分桶,再用可达性关系做图连通性校验,合并弱连接簇
- 引入时间衰减因子:10分钟内高频出现的相同指纹组合,自动提升聚类置信度
- 当某簇关联到已确认的 P0 故障(如数据库连接池耗尽),将其指纹加入热特征库,后续同类告警直接归并
这套机制已在某制造企业工控安全监测平台中落地,将原本日均 800+ 条零散告警压缩为平均 23 个有效事件簇,MTTR 下降 41%。









