项目结构:
.
├── README.md # 项目文档
├── configs # 运行test_demo.py的配置文件
│ └── config.yaml # 配置问津
├── docs # 项目文档
├── readdata.py # 读取trace日志数据的脚本
├── requirements.txt # 项目依赖
├── test_demo.py # 进行镜像测试的脚本
└── unit_ai_request.py # 生成统一AI平台请求的工具类
将项目克隆到本地执行时,强检查是否满足下面的要求:
pip install -r requirements.txt
准备好用于验证镜像工程的测试集数据,并解压完成。测试人员可以随意组织文件结构,如之前提交给组委会的测试集的结构:
如./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"
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
----------------------------------------------------------------------------------------------------
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
)所示:
模型性能评估参考MicroRank: End-to-End Latency Issue Localization with Extended Spectrum Analysis in Microservice Environments评估方法,选用Top-1、Top-3、Top-5计算模型的召回率(Recall),对于本项目app_name
和service_name
的召回率分开实际,并通过简单的算术平均来给出模型的在app_name
和service_name
上的整体表现。
除了在控制终端打印模型的评估结果外,同时还将模型评估结果保存到用户指定的输出目录中,如下图所示:
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。