Page 175 - 《软件学报》2026年第2期
P. 175

654                                                        软件学报  2026  年第  37  卷第  2  期


                                                                                 time a , 一个变更的时间得分可
                 现异常, 那么可以认为该变更与系统异常的时间关联性不强. 因此, 对给定告警时间
                 以根据该变更开始的时间         time c  形式化为如下:

                                                        H −Time(time a −time c )
                                                Score time =                                          (5)
                                                                H
                 其中,  Time(·) 计算了  time a  和  time c  相差的小时数. 基于公式  (5), 本方法给发生在告警时间附近的变更赋予更高的
                 可疑变更得分, 给发生在远离告警时间的变更赋予更低的可疑变更得分.
                  4.6.3    空间依赖得分计算
                    除  KPI 和时间的因素以外, 本方法还考虑了变更服务在服务依赖图上的空间得分. 在图                        4  中可以观察到, 告警
                 服务和根因变更的服务存在“拓扑邻近性”, 也就是距离告警服务越近的服务的变更更有可能是根因变更. 因此本
                 文在定位根因变更时还考虑了空间的因素. 在获得服务依赖图后, 本文可以将空间得分形式化为:

                                                                L
                                                   Score spatial =                                    (6)
                                                             L+distance
                 其中,  L 表示服务依赖图中距离告警服务最大的跳数, distance 表示变更服务与告警服务的距离. 在第                        4.4  节中本
                                                                               L 的默认取值为    2. 如果变更服务
                 文介绍了服务依赖图构建模块会以告警服务为中心构建两层服务依赖图, 因此
                 与告警服务是同一个服务, 那么          distance 的值为  0. 其他情况, distance 的值为变更服务与告警服务之间跳数的绝
                 对值. 通过计算时间得分和空间得分, 能够让方法考虑 KPI 没有异常的根因变更                      (挑战  2), 使这种静默的变更获得
                 更高的可疑得分.
                    在获得   KPI 差异得分、时间得分和空间得分后, 根因变更推断模块将整合这                     3  个得分, 从而获得最终的可疑
                 变更得分列表. 根据不同得分在根因变更识别方法中的权重, 对变更                    Change i , 它的根因变更得分形式化为:

                                                                                                      (7)
                                             Score i = αScore diff +βScore time +δScore spatial
                 其中,  α、β、δ 分别是   KPI 差异得分、时间得分和空间得分的权重. 在微信系统中, 运维工程师经验性地认为在根
                 因变更识别中     KPI 差异得分、时间得分和空间得分对根因的贡献相同, 因此本文将                      3  个得分的权重都设置为       1.
                 在其他系统中, 可以根据系统的特性对权重进行调整. 此外也可使用一些自动化的参数调整方法来调整权重, 受篇
                 幅限制本文不详细讨论这部分内容.
                    在遍历完服务依赖图上的全部变更后, 根因变更推断模块会对可疑得分进行排序, 得到根因变更得分列表
                 Score. 在理想情况下, 可疑得分最高的服务的变更为根因变更. 算法                1  展示了根因变更识别算法的整体过程.

                 算法  1. 根因变更识别算法.
                 输入: 服务调用关系      R, KPI 时序数据  K, 服务变更数据    C, 告警服务   Service a , 告警时间  Time a , DiD 算法阈值  λ;
                 输出: 可疑变更得分列表 Score.

                 1. G ←服务依赖图构建     (R, C, Service a )
                 2. FOR (Service, Change i ) IN G
                 3.  Score diff  ← KPI 差异得分计算  (K,  λ)
                 4.  Score time ← 时间衰减得分计算  (Change i , Time a )
                 5.  Score spatial  ← 空间依赖得分计算  (G, Service)
                 6.  Score i  ← 根因变更推断 (Score diff , Score time , Score spatial )
                 7.  Score.Add((Service, Change i , Score i ))
                 8. ENDFOR
                 9. Score.Sort()
                 10. RETURN Score

                    获得的可疑得分列表能够指导运维工程师检查对应的服务的变更, 从而加快根因变更识别的速度. 在识别到
   170   171   172   173   174   175   176   177   178   179   180