# AIOPS-BWRAC **Repository Path**: shawnzhang31/aiops-bwrac ## Basic Information - **Project Name**: AIOPS-BWRAC - **Description**: AIOps大赛业务告警根因分析测试demo - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 6 - **Forks**: 5 - **Created**: 2021-07-17 - **Last Updated**: 2024-05-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 业务告警根因分析测试项目 项目结构: ``` . ├── 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. 进行镜像测试 准备好用于验证镜像工程的测试集数据,并解压完成。测试人员可以随意组织文件结构,如之前提交给组委会的测试集的结构: ![测试集](./docs/res/pastimg-2021-07-17-21-52-57.png) ### 2.1 准备配置文件 如`./configs/config.yaml`文件内容一样,请根据自己的文件放置路径,创建自己的配置文件。 对于为修改了测试集的情况可将修改的文件直接放在故障的`trace_files`字段下,测试脚本测进行测试的时候,会自动将该字段下的所有的trace文件的内容拼接在一起,提交镜像测试,如下面的配置文件中演示的**故障1**。同样如果新增了已知的故障根因节点,也就是新增了GT,可以将新的增的故障的根因节点配置`gt`字段,如**故障1**的配置。当然`gt`字段不是必须要配置,配置`gt`字段只是为了最终形成容易阅读的分析文档。 ```yaml 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`)所示: ![分析结果汇总](./docs/res/pastimg-2021-07-17-23-07-24.png) ### 3.1 模型性能评估 模型性能评估参考[MicroRank: End-to-End Latency Issue Localization with Extended Spectrum Analysis in Microservice Environments](./docs/MicroRank.pdf)评估方法,选用Top-1、Top-3、Top-5计算模型的召回率(Recall),对于本项目`app_name`和`service_name`的召回率分开实际,并通过简单的算术平均来给出模型的在`app_name`和`service_name`上的整体表现。 除了在控制终端打印模型的评估结果外,同时还将模型评估结果保存到用户指定的输出目录中,如下图所示: ![模型评估结果](./docs/res/WX20210808-164922.png)