发明内容
本发明的目的是为了弥补现有技术中存在的缺陷,而提出的一种实现网络故障快速识别的方法,确保前台代理能够准确、高效地反映当前系统运行的故障告警情况。
为了实现上述发明目的,本发明提出的一种实现网络故障快速识别的方法,该方法应用于网络管理系统的前台代理部分,负责接收网元设备各告警源上报的告警或告警恢复消息,实现对重警的快速识别处理,对系统的所有当前告警进行存储,并上报后台网管中心。
本发明提出的一种实现网络故障快速识别的方法包括步骤如下:
步骤1、对网元告警源采用单板的机架、机框和机槽进行定位描述,构建单板、告警码和告警子码的信息数组,在单板信息中定义告警码信息数组指针,在告警码信息中定义告警子码信息数组指针;
步骤2、建立告警位图,定义单板信息数组作为告警位图的纵向数据,定义告警码信息数组作为告警位图横向数据,定义告警子码信息数组作为告警位图正向数据;
步骤3、通过重构的哈希函数和哈希数组建立告警位图ID的哈希索引:
A、建立哈希函数:机架、机框和机槽作为哈希函数的三个变量,表达式中变量机架的系数为机框的最大值加1与机槽最大值加1的乘积,变量机框的系数为机槽的最大值加1,变量机槽的系数为1;
B、重新建立哈希函数:将机架最小值、机框最小值和机槽最小值代入步骤A得到的哈希函数,得到哈希最小值,重新建立的哈希函数是步骤A得到的哈希函数减去哈希最小值;
C、建立哈希索引数组:由机架最大值、机框最大值和机槽最大值,根据步骤B得到的哈希函数计算哈希最大值,以哈希最大值加1为大小建立哈希索引数组;由告警位图ID对应机架、机框和机槽,根据步骤B得到的哈希函数计算哈希值,将告警位图ID写入哈希值为数组下标的哈希索引数组对应位置;
D、告警位图ID的哈希索引为:根据单板机架、机框和机槽,由重构的哈希函数计算哈希值,将哈希值作为哈希索引数组的下标,从哈希索引数组中获取告警位图ID;
步骤4、建立告警码信息数组下标的哈希索引:以告警码为变量建立哈希函数,所述哈希函数为告警码减去首告警码;
步骤5、在告警位图告警码信息中,记录当前有效的告警子码数目wSumAlmSub,对告警子码信息数组前wSumAlmSub个元素进行遍历获取告警子码;
步骤6、前台代理接收到单板上报的告警消息时,通过单板、告警码和告警子码索引告警位图对应的告警记录位置;如果告警消息为告警,判断所述告警记录位置是否存在告警的记录;若不存在,则上报告警为新告警;若存在,上报告警为重复的告警,进行抛弃处理。
采用本发明,与现有技术相比,可以实现重警的快速识别处理,对系统的所有当前的告警进行存储,并上报后台网管中心,从而能够准确可靠的反映当前系统运行的故障告警情况。
具体实施方式
1、建立告警位图
根据网元设备实例图2、单板槽位信息描述表1、以及单板告警码和告警子码描述表2,建立的告警位图如图3所示。告警位图为三维结构。由单板数目定义单板信息数组,作为告警位图的纵向数据;由告警码数目定义告警码信息数组,作为告警位图的横向数据;由告警子码数目定义告警子码信息数组,作为告警位图的正向数据。单板信息定义,机架byRack、机框byShelf、机槽bySlot、类型byBoardType、当前紧急告警数目wSumCriticalAlm、告警码总数目wSumAlmCode和告警码信息指针ptAlmCodeInfo。告警码信息定义有告警类型byAlmType、告警级别byAlmLevel、告警码wAlmCode、告警子码总数目wSumSubCode、当前告警子码数目wSumAlmSub、告警参数abyAlmContent、告警时间tAlmTime和告警子码指针ptAlmSubInfo。告警子码信息定义有告警子码dwAlmSubCode和告警时间tAlmTime。单板信息采用单板信息数组进行存储,用指针ptAlmMapInfo记录数组起始位置为告警位图起始位置,数组下标为告警位图ID。为了避免大量小内存块申请造成内存浪费,将三维告警位图采用二维方式存储,单板对应告警码信息数组和告警子码信息数组共用一段连续存储空间。单板信息中用指针ptAlmCodeInfo记录告警码信息数组的起始地址,告警码信息中用指针ptAlmSubInfo记录告警子码信息数组的起始地址。如果该告警码没有对应告警子码,将ptAlmSubInfo记录为NULL。
2、建立哈希索引
2.1、建立告警位图ID的哈希索引
2.1.1、建立哈希函数
从表1中得出单板机架最大值byRackmax、机框最大值byShelfmax和机槽最大值bySlotmax,依次为1、2、3,计算出系数a、b为:
a=(byShelfmax+1)*(bySlotmax+1)=12
b=bySlotmax+1=4
建立单板槽位信息(byRack、byShelf、bySlot)为变量的哈希函数表达式为:
Hash(byRack,byShelf,bySlot)=12*byRack+4*byShelf+bySlot 哈希函数①
| 机架 | 机框 | 机槽 | 单板类型 |
单板1 | 1 | 2 | 1 | 1 |
单板2 | 1 | 2 | 2 | 2 |
单板3 | 1 | 1 | 1 | 3 |
单板4 | 1 | 1 | 2 | 4 |
单板5 | 1 | 1 | 3 | 5 |
表1
表2
2.1.2、重新建立哈希函数
通过哈希函数①来建立哈希索引数组,会造成较大的存储空间浪费,因此有必要对哈希函数①进行重建优化。遍历单板信息数组,获取单板机架最小值、机框最小值和机槽的最小值(byRackmin,byShelfmin,bySlotmin)=(1,1,1)。计算出常数c,哈希函数①的最小值为:
c=Hashmin=12*byRackmin+4*byShelfmin+bySlotmin=17
则重新建立的哈希函数表达式为:
Hash(byRack,byShelf,bySlot)=12*byRack+4*byShelf+bySlot-17 哈希函数②
根据哈希函数②计算出单板槽位信息哈希值如表3所示。
| 机架 | 机框 | 机槽 | 单板类型 | HASH值 |
单板1 | 1 | 2 | 1 | 1 | 4 |
单板2 | 1 | 2 | 2 | 2 | 5 |
单板3 | 1 | 1 | 1 | 3 | 0 |
单板4 | 1 | 1 | 2 | 4 | 1 |
单板5 | 1 | 1 | 3 | 5 | 2 |
表3
2.1.3、建立哈希索引数组
根据单板槽位信息的最大值,由哈希函数②计算出哈希数组的最大值:
Hashmax=12*byRackmax+4*byShelfmax+bySlotmax-17=6
建立哈希索引数组awAlmMapHash,数组大小为:Hashmax+1=7。
将哈希索引数组初始化为无效告警位图ID值0xffff。再由告警位图ID(wAlmMapId)遍历告警位图,根据单板槽位由哈希函数②计算哈希值Hash,将哈希值Hash作为哈希索引数组的数组下标,将告警位图ID分别写入哈希索引数组的对应位置。则哈希索引数组awAlmMapHash的值为:
awAlmMapHash[7]={2,3,4,0xffff,0,1,0xffff};
通过哈希函数②和哈希数组,计算告警位图ID的哈希索引表达式为:
wAlmMapId=awAlmMapHash[Hash(byRack,byShelf,bySlot)]
2.2、告警码的哈希索引
告警位图中,单板告警码采用升序顺序紧凑排列,将单板首告警码记录为wAlmCodefirst,对应于告警码wAlmCode,计算告警码信息数组下标的哈希函数为:
Hash(wAlmCode)=wAlmCode-wAlmCodefirst
2.3、告警子码的遍历索引
告警位图在告警码信息中,记录当前有效的告警子码数目wSumAlmSub,由于告警子码数量较少或无,对告警子码信息数组前wSumAlmSub个元素进行遍历获取。
当一个告警子码告警恢复时,获取最后一个有效告警子码元素将该告警子码覆盖,并将最后一个有效告警子码元素进行告警恢复,以保证告警子码信息数组中,有效元素顺序紧凑排列。
3、告警接收处理
告警位图中每一告警码、告警子码有两种状态:告警和告警恢复。一个具体的告警码下面可以有一个告警子码集合,该集合的语义是:1)集合中的有效元素为当前处于告警状态的告警子码,其他不存在的为告警恢复状态;2)告警子码集合中若存在有效元素,则告警码的告警类型为告警,否则该告警码的告警类型为告警恢复,告警码信息中采用byAlmType表示对应的当前故障状态。
例如告警管理接收到告警单板1,其槽位信息:1、2、1,上报告警码2告警子码2的告警消息。
告警位图ID索引计算为:
wAlmMapId=awAlmMapHash[Hash(1,2,1)]=awAlmMapHash[4]=0
对应告警位图起始位置作偏移wAlmMapId,得出告警单板1在告警位图中的记录地址为:
ptAlmMapInfo+wAlmMapId=ptAlmMapInfo
告警码索引计算为:
Hash(wAlmCode)=wAlmCode-wAlmCodefirst=2-1=1
对应告警单板1的起始告警码记录ptAlmMapInfo->ptAlmCodeInfo,得出告警码2在告警单板1中的告警码记录地址为:
ptAlmMapInfo->ptAlmCodeInfo+1
根据(ptAlmMapInfo->ptAlmCodeInfo+1)->byAlmType值进行上报告警的重警判别。
如果告警消息为告警恢复,则上报的告警消息为新告警;
如果告警消息为告警,则获取告警码记录的当前有效告警子码数目(ptAlmMapInfo->ptAlmCodeInfo+1)->wSumAlmSub,对告警子码记录地址(ptAlmMapInfo->ptAlmCodeInfo+1)->ptAlmSubInfo的告警子码前wSumAlmSub有效数目个元素进行遍历查找,判断是否存在告警子码2的记录,若不存在,则上报告警为新告警;若存在,上报告警为重复告警,对于重复告警,前台代理进行抛弃处理,对于新告警,前台代理进行记录存储和相应故障应对处理,并按告警上报协议上报后台网管中心。