刘梦阳,曾永安
(1.河北远东通信系统工程有限公司,河北 石家庄 050200; 2.国网江西省电力公司抚州供电分公司,江西 抚州 344000)
基于SNMP的网管国网北向接口设计与实现
刘梦阳1,曾永安2
(1.河北远东通信系统工程有限公司,河北 石家庄 050200; 2.国网江西省电力公司抚州供电分公司,江西 抚州 344000)
针对国家电网提出的北向接口统一标准,在AcroView网管基础上提出了基于SNMP协议的网管北向接口软件的实现设计方案。介绍了北向接口的组织架构、功能及操作方式,描述了系统的总体设计,并对各个分层模块的实现方案分别说明,在SNMP接口层及业务处理层的实现设计中,重点说明了使用Synapse实现SNMP协议栈及MIB库对象数据组织架构的实现方法,通过系统测试验证了设计的有效性及先进性。
SNMP;北向接口;MIB库;数据组织架构;Syncapse
2016年11月国家电网公司出台规定,要求各厂家的专业网管具备针对国家电网通信管理系统TMS(Telecommunication Management System)的北向接口,并提出了统一的技术规范[1]。该接口要求网管软件通过SNMP接口按照技术规范具备告警信息获取、性能管理信息获取及配置管理的功能,并根据配置及告警数据的变化上报TRAP消息。简单网络管理协议SNMP是目前广泛使用的一种网络管理协议,它有易于实现、便于扩充等优点,得到众多厂家的支持和广泛的应用,已成为网络管理领域中事实上的工业标准[2]。
为了满足国家电网行业的市场需求,需要在网管基础之上开发出具备国网要求的北向接口。本文主要论述了在Acroview网管(NMS系统)上采用SNMP协议实现国网北向接口的设计方案及实现技术,并使用专用工具进行了验证。
北向接口位于网络管理系统(SG-TMS)的服务端和网元管理系统(NMS)的服务之间,对网络管理系统和网元管理系统之间的消息、通知和服务进行适配[3]。设备网管北向接口的位置如图1所示。
北向接口需要向TMS提供配置管理、告警管理、性能管理3项功能,包含以下信息:
① 配置管理功能需要NMS提供以下功能:系统信息采集、设备信息采集、设备机框信息采集、设备槽位信息采集、设备板卡信息采集、设备端口信息采集和拓扑信息采集。
② 告警管理功能需要NMS提供以下功能:设备的告警管理、NMS与TMS之间的握手消息。
③ 性能统计功能需要NMS提供以下功能:设备性能信息、端口性能信息。
TMS与NMS之间的接口是采用SNMP协议来实现。SNMP是TCP/IP协议的一个子集,是应用层管理协议,它使用UDP作为传输层协议,能管理支持代理进程(或委托代理)的网络设备。SNMP是适用于互联网络设备的网络管理框架,主要由管理信息结构SMI (Structure of Management Information)、管理信息库MIB (Management Information Base)和SNMP协议组成[4]。本文中,TMS作为管理者,NMS作为代理进程(Agent)。
SNMP协议支持GET/GETNEXT/SET、GETRespose、TRAP消息3种格式。
① GET/GETNEXT/SET是管理者对Agent请求数据的操作,流向为NMS至Agent;
② GetResponse是Agent对管理者的请求响应操作,流向为Agent至管理者。
③ TRAP消息是Agent对管理者的主动上报通告,无需确认。
TMS的数据获取方式有2种。一种是主动获取:通过对变量数据的GET操作获取值,SET操作设置变量的值,采用GetNext遍历来获取表格表数据的读取;另一种是被动接收:接收NMS系统上报的TRAP消息。
2.1 总体设计
系统采用分层设计[5],按照功能层次划分为SNMP接口层、业务处理层、数据存储解析层和设备接入层。
SNMP接口层集成了SNMP协议及MIB对象的管理。负责接收和发送SNMP消息,将收到的SNMP消息及其他模块传递的消息进行转换。
业务处理层处理SNMP接口层下发的业务处理请求及数据存储解析层上报的数据消息。在业务处理层有面对北向接口的存储数据,是以内存链表的形式进行存储,方便对消息的及时响应操作。
数据存储解析层主要是对设备接入层上报的设备原始信息进行解析存储。数据解析完毕后存储入数据库的各个对应表,负责网管数据的存储和读取。
设备接入层是与网管接入设备的接口。这部分沿用AcroView网管之前的处理,使用自定义协议,实现设备的告警、性能数据采集,数据采用统一格式[6]。
系统的消息处理的流程如图2所示。
图2 系统消息处理流程
① 对GET/GETNEXT消息进行解码。
② 判断是否是支持的OID。
③ 通过OID找到对应的链表,根据数据的索引找到对应的数据,返回给SNMP接口层。
④ 返回错误编号,回GetResponse消息。
⑤ 根据值和OID进行SNMP报文编码并发送给TMS。
⑥ 对SET消息进行SNMP解码。
⑦ 判断OID是否已知且合法。
⑧ 返回错误编号,回GetResponse消息。
⑨ 根据OID判断调用不同的事件处理函数,返回对象值。
⑩ 根据值和OID进行SNMP报文编码并发送给TMS。
2.2 SNMP接口层设计
整个接口层的设计采用线程的方式,使用Synapse的TSynaClient类来实现Agent的功能。TSynaClient类主要包括FAgent_Sock、FAgent_Buffer、FAgent_HostIP和FQuery变量。
表1 接口层数据结构
变量类型说明FAgent_SockTUDPBlockSocket数据收发阻塞socketFAgent_BufferAnsiStringRequest及Response的公共BufferFAgent_HostIPAnsiString对端管理者IPFQueryTSNMPRecSnmp数据包,具备编码De-codeBuf、解码EncodeBuf等函数
SNMP数据接收实现方法如下:
① 初始化FAgent_Sock,bind接收端口。
② 调用RecvPacket(Timeout)接收数据。将数据保存入FAgent_Buffer,将对端管理者IP赋值给FAgent_HostIP。
③ FQuerry执行DecodeBuf(FAgent_Buffer)函数将数据包解码,将MIB值加入MIB接收链表SNMPMibList。
④ 调用MIBByIndex读取MIB值,通过API接口发送给业务处理层。
SNMP发送实现方法如下:
① GETResponse消息:根据业务处理层返回的OID、数据值及数据类型,使用FQuerry的MIBAdd加入至SNMPMibList。采用EncodeBuf编码至FAgent_Buffer,通过FAgent_Sock.SendString发送。
② TRAP消息通过net-snmp的相关TRAP API实现。
2.3 MIB与业务处理层设计
在SNMP中,网络管理资源是以对象的形式表示的,所有对象都存放在MIB的数据结构中[7]。管理信息库 (MIB)存储了被管设备资源的管理信息[8],具有标量和表格形式组织的变量两种操作对象[9]。北向接口MIB库根据需求的差异将各个对象编码成不同的变量类型。系统信息等可以直接读取的变量设置为标量,具有大量信息的配置及告警、统计表可以设置为表格变量。
在北向接口节点(northTms)下总体分成3个主要的节点。告警接口节点(northTmsAlmInterface)、配置接口节点(northTmsConfiginterface)、性能统计接口节点(northTmsStsConfigInterface)。每个节点下再按照数据的类型进行细分添加。节点的属性主要包括:名称、OID、语法(数据类型,包括Integer、OCtstring、TimeTicks、Object Identifer等)、权限(read-only、read-write、write-only)、类型(变量、Table、Row、Columnar、Trap)。系统的MIB结构如图3所示。
业务处理层的核心是对MIB的查询操作实现及对内存链表的维护。内存链表保存了北向接口所需要的所有数据信息。MIB库的对象主要由OID及数据组成,通过MIB设计确定了每个节点对应的OID。每个链表的元素的数据结构定义如下:Instance(行索引)+具体的参数,每个链表的元素就是表中的一行数据。
图3 MIB设计树状图
设备链表元素结构说明如表2所示。
表2 设备链表元素数据结构
参数类型含义InstanceString索引,元素的唯一标示equipIdString[32]设备ID。产品系列-类型-ID组合equipNameString[32]设备名称areaIDString[32]区域说明equipTypeInteger设备类型LocationString[50]设备安装位置DespString[50]设备描述onlineStateinteger设备离线状态AlmHiLevelInteger设备当前最高级别告警
MIB的主要操作是Get及GetNext操作。标量对象的获取比较简单,直接根据OID及Instance找到对应的变量值,将值及类型返回即可,这里详细讨论GetNext的实现。根据SNMP规定,GETNEXT按照字典序和先深搜索的原则查找下一个节点,分2种情况:如果请求的OID不是叶节点,那么从该OID开始按字典序返回第一个叶节点;如果GETNEXT请求的OID是叶节点,那么从该节点开始向上回溯到第一个具有“下一个节点”的节点,然后从“下一个节点”开始按字典序返回第一个叶节点[10]。
GetNext操作实现的算法如下:
说明:每个表元素的数据结构中的变量对应唯一的OID,如equipId对应OID_EQUIP_TABLE_EQUIP_ID_OID='1.3.6.1.4.1.37405.2.2.2.1.1',eqipName对应OID_EQUIP_TABLE_EQUIP_NAME_OID = '1.3.6.1.4.1.37405.2.2.2.1.2'。List为链表,list[i]代表链表的第i个元素。List[i].part[j]标示链表第i个元素的第j个变量。Cnt、index为integer,ListUsedLen表示链表的有效数据长度,NextOID为返回的OID值,Value为返回的变量的值,ValueType为返回变量的类型。变量Cnt标示数据结构中第Cnt个变量。
(a) OID是否等于表ID或者表EntryID。如果是,NextOID等于变量1对应的OID+’.’+List[0].Instance,Value等于 List[0].part[0]的值,ValueType等于List[0].part[0]值的类型。如果否,进行(b)。
(b) Index=-1;
For cnt = 0 To ListUsedLen-1 do
ifList[cnt].Instance := instance
{
Index =cnt;
Break;
}
(c) Cnt:=0
(d) If (OID =变量Cnt对应的OID)
{
If (index+1)< ListUsedLen
{
NextOID=变量Cnt对应的OID+’.’+List[index+1].instance;
Value= List[index+1]part[cnt]的值;
ValueType= List[index+1]part[cnt]的值类型;
}else
{
NextOID=变量Cnt+1对应的OID+’.’+List[0].instance;
Value= List[0]part[Cnt+1]的值;
ValueType= List[0]part[Cnt+1]的值类型;
}
}
If(OID=最后变量对应的OID)
{
If (index+1)< ListUsedLen
{
NextOID=变量Cnt对应的OID+’.’+List[index+1].instance;
Value= List[index+1]part[cnt]的值;
ValueType= List[index+1]part[cnt]的值类型;
}else
{
NextOID=’’;
Value= ‘’;
ValueType= 0;
}
}
(e) Cnt := Cnt+1;返回(d)
2.4 数据存储解析层设计
数据存储层采用DLL的方式来实现,每种类型的设备数据对应一个独立的DLL[11]。数据存储层的数据源是从Acroview网管前置机模块接收并初步翻译后的数据记录。系统数据类型有3种:告警、性能和配置,每种类型有自己的统一格式。解析层的工作就是根据不同的设备类型、不同的数据类型分别进行进一步的分析处理。通过dll方式来实现解析层,每种设备类型数据类型用一个独立的dll来实现。这样如果数据分析有问题修改对应的dll即可,如果新增设备类型增加新dll即可。系统扩充新类型的监控设备影响的是接口层和解析层,其他部分可以不变。
数据解析dll分2层组织,第一层是DLL负责初始化各个具体数据类型dll的数据输入接口及提取数据,根据数据类型调用具体分析接口来分析数据。第二层DLL负责具体类型数据的分析工作。例如告警功能的实现流程如下:
① 网管前置机将告警数据接收后按照固定格式存储入数据库原始告警表;
② 第一层DLL读取数据库告警表数据,将数据进行分类处理,按照不同的设备类型调用分设备的DLL进行处理;
③ 第二层DLL为分设备的DLL,按照告警的设备ID、位置、状态等进行解析,根据对应的状态,更新设备告警状态,将不同的数据存入对应的数据表;
④ 第一层DLL根据第二层DLL的返回结果,将变化的告警信息(增、删、改)及变化的设备信息(连接状态、最高告警级别)等数据发给业务处理层;
⑤ 业务处理层根据数据存储解析层上报的数据,进行内部告警链表及设备链表等相关链表的相关数据更新
系统测试的目标是验证通过上述设计方案检验系统的稳定性、可靠性。测试需要的软件为具备北向接口的网管软件、测试demo程序及ManageEngine MibBrowser。测试方法如下:
① 配置管理功能测试
在网管客户端上随机进行设备网元的增、删、修改操作以及机架、板卡、槽位、端口的增、删、修改操作。采用ManageEngine MibBrowser读取对应表格的数据,看是否与实际操作相符。注意在设备网元删除时,能否删除对应机架、板卡、槽位、端口数据的一并操作。设备连接网管之后,设备表的连接状态是否更新。手动进行100次操作,测试结果与预期一致,内容相符且准确。
② 告警及性能统计管理功能测试
使用测试demo程序定时(10 s)向网管软件发送模拟告警和模拟性能统计消息。采用ManageEngine MibBrowser读取告警表及性能表,查看是否与demo发送的及内容一致。同时利用TrapViewer接收TRAP消息,验证接收的TRAP消息是否与demo发送一致。经过24小时测试,测试结果与预期一致,且内容相符准确。
从结果看,系统的北向接口功能与设计一致,能够与实际数据保持100%的一致性,在长时间的测试过程中无异常现象,具备良好的稳定性。
目前系统已经部署在国家电网多地省市局应用,与国网TMS系统顺利对接,受到用户的一致好评。实践证明了该系统完全达到了预期设计效果,能够满足国家电网对分系统网管北向接口的定义及要求。由于SNMP的简单性和可扩展性,具备SNMP的北向接口将是网络管理软件的发展趋势。文中采用的SNMP接口的实现方案,对网络管理软件的北向接口实现具有重大的指导和借鉴意义。
[1] 国家电网公司调度交换网管北向接口技术规范[S].南京:国网江苏省电力公司信息通信分公司,2016.
[2] 蔡丽,张大方,谢高岗,等.基于SNMP网络管理系统的设计与实现[J].计算机应用,2003,23(3):55-57.
[3] 杨冰.电力终端通信接入网管理系统北向接口的设计与实现[D].北京:北京邮电大学,2014.
[4] 严斌宇,刘方圆,吴少华.基于SNMP的网络管理软件的设计与实现[J].计算机与数字工程,2012(4):126-129.
[5] 李千日.软件体系结构设计[M].北京:清华大学出版社,2008:30-370.
[6] 徐海军.电信网管发展的五大趋势[N].通信产业报,2004-14(39).
[7] 蓝波,杨琴.基于SNMP动态扩展MIB的设计与实现[J].计算机工程,2004(30):192-194.
[8] 周剑,张晓彤,王沁.SNMP协议动态MIB结构与高效查找算法[J].计算机工程,2008(34):171-174.
[9] 区海平,寿国础.基于MIB定义的SNMP分析系统及实现[J].计算机应用,2009(1):58-61.
[10] 沙俊星.在嵌入式环境中使用Lua和SQLite扩展Net-SNMP代理[J].北京联合大学学报,2011(25):10-13.
[11] 李士东.轨道交通专用通信集中告警系统设计[J].无线电通信技术,2012(38):58-61.
DesignandImplementationofAcroViewNorthboundInterfaceBasedonSNMP
LIU Meng-yang1,ZENG Yong-an2
(1.Hebei Far-east Communication System Engineering Co,Ltd.,Shijiazhuang Hebei 050200,China; 2.Jiangxi State Grid Jiangxi Fuzhou Electric Power Co.,Fuzhou Jiangxi 344000,China)
Considering the unified standard of northbound interface proposed by the State Grid,a design scheme of network management northbound interface software based on SNMP protocol is proposed on the basis of AcroView network management.The structure,function and operation mode of northbound interface are introduced,and the overall design of the system is described,then the realization scheme of each module layer is presented.The implementation design of SNMP interface layer and business layer focuses on the realization method of using Synapse to realize the SNMP protocol stack and MIB library object data structure.Finally,the effectiveness and efficiency of the design are verified by system test.
SNMP;northbound interface;MIB;data organization framework ;Syncapse
TN915.07
A
1003-3114(2017)06-91-6
10.3969/j.issn.1003-3114.2017.06.22
刘梦阳,曾永安.基于SNMP的网管国网北向接口设计与实现[J].无线电通信技术,2017,43(6):91-96.
[LIU Mengyang,ZENG Yongan.Design and Implementation of AcroView Northbound Interface Based on SNMP[J].Radio Communications Technology,2017,43(6):91-96.]
2017-07-27
刘梦阳(1986―),男,工程师,主要研究方向:通信技术。曾永安(1988―),男,工程师,主要研究方向:电力通信网技术。