克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
MIT

业务告警根因分析测试项目

项目结构:

.
├── README.md                   # 项目文档
├── configs                     # 运行test_demo.py的配置文件
│   └── config.yaml             # 配置问津
├── docs                        # 项目文档
├── readdata.py                 # 读取trace日志数据的脚本
├── requirements.txt            # 项目依赖
├── test_demo.py                # 进行镜像测试的脚本
└── unit_ai_request.py          # 生成统一AI平台请求的工具类

1. 运行说明

将项目克隆到本地执行时,强检查是否满足下面的要求:

  • python3.6+
  • MacOS/Linux/Windows

1.1 安装项目依赖组件

pip install -r requirements.txt

2. 进行镜像测试

准备好用于验证镜像工程的测试集数据,并解压完成。测试人员可以随意组织文件结构,如之前提交给组委会的测试集的结构:
测试集

2.1 准备配置文件

./configs/config.yaml文件内容一样,请根据自己的文件放置路径,创建自己的配置文件。

对于为修改了测试集的情况可将修改的文件直接放在故障的trace_files字段下,测试脚本测进行测试的时候,会自动将该字段下的所有的trace文件的内容拼接在一起,提交镜像测试,如下面的配置文件中演示的故障1。同样如果新增了已知的故障根因节点,也就是新增了GT,可以将新的增的故障的根因节点配置gt字段,如故障1的配置。当然gt字段不是必须要配置,配置gt字段只是为了最终形成容易阅读的分析文档。

URL: "http://117.132.181.235:9050"   # 统一AI平台的推理网关的地址
PATH: "/aiopsbwrca/v2/influence" # 对应“API管理”中的“PATH映射”

TDEV: 0  # 测试机器与北京时间的偏差(慢多少毫秒),一般不用理会

APPID: ""  # 对应“授权管理”中的“应用标识” 请查阅项目测试文档
APPKey: ""  # 对应“授权管理”中的“应用秘钥” 请查阅项目测试文档

# 测试集结果的保存目录
out_dir: "./output/ai"

# 进行测试的故障的trace数据和GT数据配置
falut_data: # 故障数据
  故障1: # 提交的验证集的故障名称需要和提交的测试集故障一一严格对应
    time_point: "2021-04-25 9:40:00"   # 故障的分析时间,万万不可修改
    entry_service_name: "AMS_TO_CBOSS_ASSET_DORECVFEEBYBANK"   # 故障的入口服务,万万不可修改
    trace_files:  # 故障相关的trace日志数据,如果该故障的测试集有修改数据的话,可以一起写入该字段,如将相面的注释行取消注释,则实现将为故障1修改的调用链一并放入故障1的分析调用链中
      - "./场景验证数据/故障1:失败率高20210425_0940-0945/service_fail_20210423162650271.json"
      - "./场景验证数据/故障1:失败率高20210425_0940-0945/无需修改_0940-0945_20210707131536421.json"
      - "./场景验证数据/故障1:失败率高20210425_0940-0945/可修改_0940-0945_order_IRegionIdQueryCSV_getRegionIdForOut_20210707131536423.json"
      - "./场景验证数据/故障1:失败率高20210425_0940-0945/可修改_0940-0945_rule_IFamilyCircleBusiCSV_queryFamilyCircleVirUserData_20210707131536422.json"
    gt: # 故障的真实根因,也可以添加多个根因节点,添加方法如下面的注释掉内容
      - app_name: "ams-app-g6-srv4"
        service_name: "SyncRequestTask.executeCall"
      - app_name: "intgw_remote_19024"
        service_name: "asset_IIBOSSServiceCSV_doCharge"

  故障2:
    time_point: "2021-04-25 9:55:00"
    entry_service_name: "AMS_TO_CBOSS_ASSET_DORECVFEEBYBANK"
    trace_files:
      - "./场景验证数据/故障2:耗时增加20210425_0940-0945/add_time_20210423162650272.json"
    gt:
      - app_name: "ams-app-g6-srv4"
        service_name: "SyncRequestTask.executeCall"
  
  故障3:
    time_point: "2021-04-25 10:52:00"
    entry_service_name: "AMS_TO_CBOSS_ASSET_DORECVFEEBYBANK"
    trace_files:
      - "./场景验证数据/故障3:失败率高20210425_1052-1057/service_fail_20210423163416585.json"
    gt:
      - app_name: "ams-app-g6-srv4"
        service_name: "SyncRequestTask.executeCall"
  
  故障4:
    time_point: "2021-04-25 11:07:00"
    entry_service_name: "AMS_TO_CBOSS_ASSET_DORECVFEEBYBANK"
    trace_files:
      - "./场景验证数据/故障4:耗时增加20210425_1052-1057/add_time_20210423163416586.json"
    gt:
      - app_name: "intgw_remote_19024"
        service_name: "asset_IIBOSSServiceCSV_doCharge"

  故障5:
    time_point: "2021-04-25 13:08:00"
    entry_service_name: "AMS_TO_CBOSS_ASSET_DORECVFEEBYBANK"
    trace_files:
      - "./场景验证数据/故障5:失败率高20210425_1308-1313/service_fail_20210423163724709.json"
    gt:
      - app_name: "oppf_esb_3_10.255.34.37"
        service_name: "inter_IOperateCBossCSV_doRecvFeeByBank"
  
  故障6:
    time_point: "2021-04-25 13:23:00"
    entry_service_name: "AMS_TO_CBOSS_ASSET_DORECVFEEBYBANK"
    trace_files:
      - "./场景验证数据/故障6:耗时增加20210425_1308-1313/add_time_20210423163724710.json"
    gt:
      - app_name: "ams-app-g6-srv4"
        service_name: "SyncRequestTask.executeCall"
  
  故障7:
    time_point: "2021-04-25 16:44:00"
    entry_service_name: "AMS_TO_CBOSS_ASSET_DORECVFEEBYBANK"
    trace_files:
      - "./场景验证数据/故障7:失败率高20210425_1634-1639/service_fail_20210423164059327.json"
    gt:
      - app_name: "intgw_remote_19024"
        service_name: "asset_IIBOSSServiceCSV_doCharge"
  
  故障8:
    time_point: "2021-04-25 16:49:00"
    entry_service_name: "AMS_TO_CBOSS_ASSET_DORECVFEEBYBANK"
    trace_files:
      - "./场景验证数据/故障8:耗时增加20210425_1634-1639/add_time_20210423164059327.json"
    gt:
      - app_name: "ams-app-g6-srv4"
        service_name: "SyncRequestTask.executeCall"
  
  故障9:
    time_point: "2021-04-25 21:46:00"
    entry_service_name: "AMS_TO_CBOSS_ASSET_DORECVFEEBYBANK"
    trace_files:
      - "./场景验证数据/故障9:失败率高20210425_2146-2151/service_fail_20210423164315833.json"
    gt:
      - app_name: "intgw_remote_19024"
        service_name: "asset_IIBOSSServiceCSV_doCharge"
  
  故障10:
    time_point: "2021-04-25 22:01:00"
    entry_service_name: "AMS_TO_CBOSS_ASSET_DORECVFEEBYBANK"
    trace_files:
      - "./场景验证数据/故障10:耗时增加20210425_2146-2151/add_time_20210423164315834.json"
    gt:
      - app_name: "ams-app-g6-srv4"
        service_name: "SyncRequestTask.executeCall"

2.2 执行测试脚本

python test_demo.py -c ./configs/ai_config.yaml
脚本执行完毕会给出执行结果统计,如下:     
业务告警根因分析开始...
正在对故障1进行根因分析...
故障1根因分析成功,分析结果已写入:./output/ai/故障1/故障1_分析结果.csv
测试用时26.74s
正在对故障2进行根因分析, 预计耗时26.74s, 所有故障分析完成还需240.66s...
故障2根因分析成功,分析结果已写入:./output/ai/故障2/故障2_分析结果.csv
测试用时70.47s
正在对故障3进行根因分析, 预计耗时48.60s, 所有故障分析完成还需388.83s...
故障3根因分析成功,分析结果已写入:./output/ai/故障3/故障3_分析结果.csv
测试用时26.72s
正在对故障4进行根因分析, 预计耗时41.31s, 所有故障分析完成还需289.17s...
故障4根因分析成功,分析结果已写入:./output/ai/故障4/故障4_分析结果.csv
测试用时71.00s
正在对故障5进行根因分析, 预计耗时48.73s, 所有故障分析完成还需292.39s...
故障5根因分析成功,分析结果已写入:./output/ai/故障5/故障5_分析结果.csv
测试用时32.77s
正在对故障6进行根因分析, 预计耗时45.54s, 所有故障分析完成还需227.70s...
故障6根因分析成功,分析结果已写入:./output/ai/故障6/故障6_分析结果.csv
测试用时65.18s
正在对故障7进行根因分析, 预计耗时48.81s, 所有故障分析完成还需195.25s...
故障7根因分析成功,分析结果已写入:./output/ai/故障7/故障7_分析结果.csv
测试用时20.65s
正在对故障8进行根因分析, 预计耗时44.79s, 所有故障分析完成还需134.37s...
故障8根因分析成功,分析结果已写入:./output/ai/故障8/故障8_分析结果.csv
测试用时63.10s
正在对故障9进行根因分析, 预计耗时47.08s, 所有故障分析完成还需94.16s...
故障9根因分析成功,分析结果已写入:./output/ai/故障9/故障9_分析结果.csv
测试用时26.87s
正在对故障10进行根因分析, 预计耗时44.83s, 所有故障分析完成还需44.83s...
故障10根因分析成功,分析结果已写入:./output/ai/故障10/故障10_分析结果.csv
测试用时57.54s
业务告警根因分析完毕!

----------------------------------------------------------------------------------------------------
10个故障分析成功:故障1、故障2、故障3、故障4、故障5、故障6、故障7、故障8、故障9、故障10
分析成功的故障的根因保存于./output/ai/故障根因分析结果.csv
分析总耗时:461.05s, 平均耗时:46.11
模型性能评估结果为:
   Top-K app_name service_name    Mean
0  Top-1     0.00        45.45   22.73
1  Top-3    72.73        81.82   77.27
2  Top-5   100.00       100.00  100.00
----------------------------------------------------------------------------------------------------

3. 测试结果说明

test_demo.py脚本会将测试人员配置的trace日志数据提交到统一AI平台进行分析,并将分析的结果和用于填写的GT数据组成一个表格数据供测试人员分析。如故障1的分析结果(./output/ai/故障1/故障1_分析结果.csv)如下:

故障 根因 app_name service_name
故障1 TOP-1 cust-app-g1-srv4 SyncRequestTask.executeCall
故障1 TOP-2 ams-app-g6-srv4 cust_IQueryAccountCSV_queryAccountByAcctIdCustId
故障1 TOP-3 intgw_remote_19024 asset_IIBOSSServiceCSV_doCharge
故障1 TOP-4 oppf_esb_3_10.255.34.37 inter_IOperateCBossCSV_doRecvFeeByBank
故障1 GT ams-app-g6-srv4 SyncRequestTask.executeCall

其中TOP-x是AI模型基于故障时刻的调用链给出的排名较前的推荐根因节点,GT是测试集提供的真实的故障根因节点。

测试人员在测试的时候关注GT的节点是否在TOP推荐节点中,GT的app_name和service_name在同一个TOP推荐节点中较好,并且越靠前效果越佳

为了方便测试人员对比,test_demo.py脚本将所有的故障分析结果和GT结果汇总在一个csv文件中,如(./output/ai/故障根因分析结果.csv)所示:
分析结果汇总

3.1 模型性能评估

模型性能评估参考MicroRank: End-to-End Latency Issue Localization with Extended Spectrum Analysis in Microservice Environments评估方法,选用Top-1、Top-3、Top-5计算模型的召回率(Recall),对于本项目app_nameservice_name的召回率分开实际,并通过简单的算术平均来给出模型的在app_nameservice_name上的整体表现。
除了在控制终端打印模型的评估结果外,同时还将模型评估结果保存到用户指定的输出目录中,如下图所示:
模型评估结果

MIT License Copyright (c) 2021 shawnzhang31 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

简介

AIOps大赛业务告警根因分析测试demo 展开 收起
Python
MIT
取消

发行版

暂无发行版

贡献者

全部

近期动态

不能加载更多了
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化