# OpenEulerA-Ops TCP **Repository Path**: ygui/open-euler-a-ops-tcp ## Basic Information - **Project Name**: OpenEulerA-Ops TCP - **Description**: openEulerA-Ops通用场景TCP传输性能劣化检测 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2025-03-27 - **Last Updated**: 2025-03-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # OpenEulerA-Ops TCP ## 一、项目介绍 本项目是应用openEulerA-Ops项目([gala-docs: Handbook and requirements documentation (gitee.com)](https://gitee.com/openeuler/gala-docs) )中的gala-gopher组件而开发的通用场景下TCP传输性能劣化检测工具。主要功能是通过对gala-gopher组件检测得到的网络中有关TCP传输的各项性能参数值进行反向分析得到当前TCP传输是否存在故障或是具体故障原因的判断。 (目前正在考虑进行接口规范化后合并至gala-anteater项目([gala-anteater: A time-series anomaly detection platform for operating system (gitee.com)](https://gitee.com/openeuler/gala-anteater) )中) ## 二、整体架构 ### (一)项目依赖 1. openEuler操作系统(镜像安装与使用请参考:https://repo.openeuler.org/openEuler-22.09/) 2. gala-gopher检测组件(安装与使用请参考:https://gitee.com/openeuler/gala-gopher) 3. tc网络故障注入命令(使用请参考:https://tldp.org/HOWTO/html_single/Traffic-Control-HOWTO/#c-qdisc) ### (二)项目原理 首先通过运行gala-gopher组件中的TCP相关探针获取网络的TCP传输性能参数值,在经过另一输出程序的处理后再交由最终的分析程序分析给出对传输性能的判断。 其中,gala-gopher的TCP相关探针监测得到的TCP传输性能参数列表及其含义请参照本项目的`性能指标列表及含义.md`文件: [course/docs/性能指标列表及含义.md · easywood2002/OpenEulerA-Ops TCP - 码云 - 开源中国 (gitee.com)](https://gitee.com/easywood2002/open-euler-a-ops-tcp/blob/master/course/docs/%E6%80%A7%E8%83%BD%E6%8C%87%E6%A0%87%E5%88%97%E8%A1%A8%E5%8F%8A%E5%90%AB%E4%B9%89.md) 性能指标与故障相关性的分析报告请参见本项目的`相关性分析报告.md`文件: [course/docs/相关性分析报告.md · easywood2002/OpenEulerA-Ops TCP - 码云 - 开源中国 (gitee.com)](https://gitee.com/easywood2002/open-euler-a-ops-tcp/blob/master/course/docs/%E7%9B%B8%E5%85%B3%E6%80%A7%E5%88%86%E6%9E%90%E6%8A%A5%E5%91%8A.md) 项目最终对TCP传输性能劣化的故障根因准确率请参见本项目的`性能检测验证报告.md`文件: [course/docs/性能检测验证报告.md · easywood2002/OpenEulerA-Ops TCP - 码云 - 开源中国 (gitee.com)](https://gitee.com/easywood2002/open-euler-a-ops-tcp/blob/master/course/docs/%E6%80%A7%E8%83%BD%E6%A3%80%E6%B5%8B%E9%AA%8C%E8%AF%81%E6%8A%A5%E5%91%8A.md) ### (三)项目功能 如下图所示,项目的主要功能分为三大部分: ![oe](https://gitee.com/easywood2002/open-euler-a-ops-tcp/raw/master/course/pictures/oe.png) #### 1. 对于标准数据样本的收集与处理 在不注入故障的标准情况下,首先通过gala-gopher中extend_probes中的tcpprobe探针(放于`./probes`下)监测获取tcp传输时的各项性能指标,同时运行`./outprocessor`中的数据分析脚本`outanalysis`,将一段时间内收集到的标准情况下的各项性能参数值分别存储于`./outprocessor/STD/out`下的各个文件中,之后通过`mld.py`脚本对各性能的参数数据按照KNN算法进行处理(算法原理可参照:[异常检测算法之(KNN)-K Nearest Neighbors - 知乎 (zhihu.com)](https://zhuanlan.zhihu.com/p/501691799) ,这里取**K=10**,即取最近10个邻居的距离的平均值),此时得到的各性能的**平均距离阈值**将存放于`./outprocessor/STD/COR`目录下与性能名称同名的`.ana`文件中,作为标准情况与异常情况的判别标准。 #### 2. 对于故障数据样本的收集与分析 在注入故障的异常情况下,首先通过gala-gopher中extend_probes中的tcpprobe探针(放于`./probes`下)监测获取tcp传输时的各项性能指标,同时运行`./outprocessor`中的数据处理脚本`outshaper`,将一段时间内收集到的各项性能参数值分别存储于`./outprocessor/staout`下的各个文件中,再通过`eld.py`脚本将上述数据逐项逐个按照KNN算法计算其在标准情况中与其邻居的平均距离,并将该结果与前述所得的**平均距离阈值**比较,统计后得到该参数的所有监测数据中超过该阈值的数据个数,并以其**与数据总数的百分比**表示该参数的与该故障**相关性的量化值**(结果存放于`./data/analysis/故障名`目录下与性能名称同名的`.rslt`文件中),服务于后续对随机数据样本进行故障根因的操作。 #### 3. 对于随机数据样本的收集与分析 在对当前TCP的传输性能指标进行随机采样与故障检测时,首先通过gala-gopher中extend_probes中的tcpprobe探针(放于`./probes`下)监测获取tcp传输时的各项性能指标,同时运行`./outprocessor`中的数据处理脚本`outshaper`,将一段时间内收集到的各项性能参数值分别存储于`./outprocessor/staout`下的各个文件中,再通过`statistic.py`脚本将上述数据逐项逐个按照KNN算法计算其在标准情况中与其邻居的平均距离,并将该结果与前述所得的**平均距离阈值**比较,统计后得到该参数的所有监测数据中超过该阈值的数据个数,并以其**与数据总数的百分比**表示该参数的**受影响程度**(结果存放于`./outprocessor/OUT`目录下与性能名称同名的`.rslt`文件中),之后将所有指标的上述分析结果传入依据已得到的故障向量与参数相关性分析数据而构建的分析脚本`analysis.py`中,从而判断出样本是否异常以及导致该异常的故障原因。目前的故障分类有传输时延、丢包、包重复和包乱序等。 ## 三、安装教程 请先确保项目中各python脚本所用到的模块均已安装,并保证尽量不对项目的内部目录结构进行更改。之后运行主脚本`main.py`即可。 ## 四、使用说明 进入项目的根目录,运行命令: ```shell python main.py -h ``` 以查看项目当前所支持的全部操作: ```shell TCP传输性能故障检测运行脚本 optional arguments: -h, --help show this help message and exit --mode MODE, -m MODE 指明运行模式:0->收集样本后检测,1->仅收集样本,2->仅检测,3->收集标准样本或相关性分析样本 --error ERROR, -e ERROR 指明相关性分析样本的注入故障类型 --ip IP, -i IP 指明收集样本时针对的IP地址 --count COUNT, -c COUNT (非标准)指明对于每个性能参数收集样本数据的数量,默认为10个 --accurate ACCURATE, -a ACCURATE (检测时)是否通过检测验证集检验准确率,默认为0,即仅检测当前样本数据(否则取非0) --details DETAILS, -d DETAILS (检测时)是否显示检测过程中的详细信息,默认为0,即仅显示最终结果信息(否则取非0) ``` 对各选项及参数的详细说明如下: | 选项 | 说明 | | -------------- | ------------------------------------------------------------ | | -h, --help | 查看帮助说明 | | -m, --mode | 选择项目的运行模式,0(默认)为进行当前TCP传输性能指标的随机采样,并通过故障检测脚本给出分析判断,是项目的主要功能;1表示仅进行当前TCP传输性能指标的随机采样而不判断;2表示仅通过故障检测脚本对已收集的采样数据给出分析判断;3表示对标准数据样本或故障数据样本进行收集与处理,区别在于是否有选项`-e`和有效的参数,主要用于进行随机样本检测前的相关性分析与阈值确定 | | -e, --error | 在对故障数据样本进行收集与处理时,向脚本指明注入的故障类型,仅在具有`-m 3`选项与参数时生效,默认为空 | | -i, --ip | 在对`tcpprobe`探针监测到的数据进行收集时,向脚本指明仅关注与指定IP地址进行交互的数据样本,默认为空 | | -c, --count | 在对`tcpprobe`探针监测到的数据进行收集时,向脚本指明对于每个性能指标需要收集的样本总数,对于模式3(即具有`-m 3`选项与参数时)无效,固定为100,其他模式默认为10 | | -a, --accurate | 在需要对数据样本进行故障检测(无论是否需要重新采集)时,向脚本指明仅对验证集(位于`./data/evaluate`目录下,当前共100组)进行检测并计算其准确率,默认为0不检测验证集样本,否则可取非0值 | | -d, --details | 在需要对数据样本进行故障检测(无论是否需要重新采集)时,向脚本指明是否需要显示检测结果的详细信息(包括判断是否为标准情况时与0的标准差以及判断为某一故障时各故障的可能性列表),默认为0不显示详细信息,否则可取非0值 | 详细的项目功能与使用说明请参照本项目的`项目功能说明书.md`文件: [course/docs/项目功能说明书.md · easywood2002/OpenEulerA-Ops TCP - 码云 - 开源中国 (gitee.com)](https://gitee.com/easywood2002/open-euler-a-ops-tcp/blob/master/course/docs/%E9%A1%B9%E7%9B%AE%E5%8A%9F%E8%83%BD%E8%AF%B4%E6%98%8E%E4%B9%A6.md) ## 五、参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request