网管系统设计文档文档作者:贺云鹏编写时间:___________________文档审核:___________________修改历史记录一.设计目的网管系统是指监控,组织和控制网络中的各种设备的活动状态。
其目标是确保网络中的所有设备工作正常,发生报警时可及时响应并在出现异常时能及时响应和排除故障。
二.基本功能①设备管理:对前端设备,路由器,业务服务器等进行统一管理.②配置管理:对设备和系统进行各类网络参数的定义和设置。
③报警管理:对前段设备报警或业务报警进行及时响应与联动,并通知用户处理。
④故障管理:查找并解决因硬件和软件问题而引起的网络故障。
⑤性能管理:使用特定的代理完成对软件和设备进行效率检测,并将监测数据进行统计分析作为改进与维护依据。
三.基本要素1.SNMP(简单网络管理协议):专用的通信协议,版本包括V1,V2,V3,其中V2应用最为广泛。
2.管理信息库(MIB):一个按层次结构组织的树状结构,由管理对象按照模块的形式组织而成。
各厂商产品的MIB依据标准化的Internet管理信息结构,所以可以保证第三方网管软件读取和管理设备信息.3.代理软件(Agent):运行在网络设备终端上软件模块,直接操作该设备本地的管理信息库(MIB)或者与系统运行的软件进行交互完成本地设备信息或状态的收集并提交网管服务器统一处理。
4.报警采集服务器:通过SDK与前段设备进行交互及时反馈前段设备的报警信息,同时增加接收设备主动上报与主动设备状态轮询功能。
5.网管服务器:通过主动监测或被动接收来自报警采集服务器或代理软件提交的信息,管理网络中的所有设备状态与报警信息,并通过级联的模式实现报警或查询命令的上传或分发。
6.WEB客户端:与网管服务器进行交互完成对网络信息的查询与处理。
三.网络布局Agent Agent Agent四.详细设计Agent代理该进程单独运行在特定的主机上并负责收集主机的运行信息,主要包括主机流量,CPU 使用状态,特定进程状态,磁盘运行状态等,同时可以检测特定数据异常闸值报警,如:上载流程过低。
Agent采用与其他模块相同的TCP+XML的方式与其他服务程序进行通讯,包括接收来自管理服务器的控制应答;定时向网管服务器发送采集的信息;异常数据闸值报警;与本地服务交互等。
主要流程如上图1.配置文件:Agent代理配置信息默认保存在本地ini配置文件中,成功登录网管服务器后需要请求更新本地服务配置信息。
2.信息采集:根据配置信息Agent代理需要与监控资源进行TCP+XML信令通讯,并负责定时收集资源运行状态。
采集的数据需要根据需要进行本地缓存并集中提交网管服务器。
3.数据闸值报警:根据配置信息Agent 将异常的数据流程通知报警采集服务器,如:上传数据过低等。
4.设备巡检:主要针对存储等报警采集服务器无法检测的信息。
报警采集服务器报警采集服务器主要负责服务器,网络设备,前端设备等硬件设备的报警数据的采集与初步处理,并将报警信息通知网管服务器进行统一写入与处理。
主要流程如上图1.设备列表:报警采集服务器需要请求网管服务器获取到绑定的设备列表,并根据配置SDK或SNMP协议进行通讯,同时接收相应的报警设备更新。
2.集群处理模式:一个系统中可能存在多台报警采集服务器,使用条带划分的模式建立设备与服务器之间的关联并由网管服务器统一管理分配。
3.报警采集:根据配置报警服务器需要通过SDK,SNMP协议等,主动巡检+被动接收的方式检测。
例如:设备网络连接断开需要通过主动PING进行检测;SDK设备的探头报警需要被动接受SDK回调等。
4.报警信令封装:采集到的报警信息,需要讲过报警采集服务器的封装成统一信令格式并通知网管服务器进行统一处理。
对于底层不同的数据需要5.闸值报警:报警采集服务器需要处理来自Agent代理的闸值报警。
6.设备巡检:网管服务器将设备进行巡检命令提交至对应的报警采集服务器,由对应服务器完成巡检内容,并返回结果。
网管服务器网管服务器是网管系统中的主要业务服务器,主要功能有用户,服务器,设备,报警与故障管理。
对于用户,服务器,设备的管理由WEB客户端主动发送请求并由网管服务器进行统一处理并写入数据库,在数据库更新时需要进行防多用户同时操作的现象。
报警与故障管理业务主要负责报警过滤与数据记录,报警优先级管理,报警声光联动等,同时包括用户手动提交的设备故障信息。
1.用户管理:主要由添加,查询,更新,删除等操作组成,WEB客户端发送此类请求至网管服务器,由服务器进行统一更新操作,避免多用户同时操作造成数据不同步。
2.设备管理:类似于用户管理,对于设备与报警采集服务器之间的关联,设备接入方式等需要由用户添加时手动创建关联信息。
设备获取可根据条件进行过滤如:WEB客户端需要获取所有设备信息;报警采集服务器仅需要获取与本服务器相关的设备列表。
客户端需要查看特定前端设备的实时流是否正常,可以通过网管服务器请求媒体服务器打开此设备流。
例如检测:视频遮挡,花屏等。
对于NVR,DVR,服务器等设备运行状态需要报警采集服务器提供,而存储磁盘等需要通过Agent代理提供。
3.日志管理:主要由查询与删除组成,WEB客户端根据用户选择提交请求至网管服务器,由服务器进行查询后将结果通知WEB客户端。
同时对于日志可根据类型不同设置保存时间,由网管服务器定时清理过期日志。
4.报警管理:当报警发生时网管服务器根据用户对报警过滤,优先级,联动的配置,实时通知客户端进行处理,对于设置了过滤的报警信息则仅记录数据库不通知客户端。
5.故障申报:客户可以将发现的设备故障通过客户端手动提交给网管服务器,由网管服务器单独保存设备故障申报,并根据故障负责人信息,提醒登录的用户有故障需要确认,确认后的申报记录可以通过故障申报记录日志进行检索.五.网络级联对于大型的网管系统可以通过级联的方式将底层的数据或上层的业务请求逐层提交处理,高层的网管系统可以访问等级低于自己的网络信息,反之则非法。
报警通知:上层的网管系统通过配置数据库信息将低等级系统内的报警通知上传,方便上层对底层的报警管理。
同时对于底层的业务请求可以通过路由的方式逐层提交给对应的系统进行处理,并应答结果。
六.数据库设计七.信令设计Agent代理详细功能分解:●注册认证:◆配置设置(INI文件):服务器IP、端口、数据闸值等信息[SystemSetting]ServerIP=0 //IPServerPort=0 //端口DatabrakeVale=0 //数据闸值◆向网管服务器注册请求:TCP+XML连接通信<?xml version="1.0"encoding="utf-8"?><ServerRegist_Req><UserName>Jack</UserName><Password>HelloJack</Password><EncryptType>1</EncryptType></ServerRegist_Req>◆注册应答返回报警服务器地址:更新本地配置信息<?xml version="1.0"encoding="utf-8"?><ServerRegist_Ack >< ServerIP >1</ ServerIP > //报警服务器IP< ServerPort >1</ ServerPort > //报警服务器端口< MSCSID >1</ MSCSID > //报警服务器集群ID< DatabrakeVale >1</ DatabrakeVale ></ ServerRegist_Ack >//不能使用TCP通讯的如何处理比如磁盘信息可能需要通过SDK查询或厂商提供的其他方式●信息采集://理论上只采集本机数据,缺少时间信息◆监控资源采用TCP+XML方式上传数据<?xml version="1.0"encoding="utf-8"?><CollectResult _Notify ><HostIP>172.1.1.1</ HostIP > //主机IP<HostFlow>0</ DataFlow > //主机流量<CPUState >Hello</ CPUState > //CPU状态< ProcessState>1</ ProcessState > //特定进程状态<DiskOperateState>1</ DiskOperateState > //磁盘运行状态</ CollectResult _Notify >◆本地缓存采集数据方式:typedef struct tag_CollectInfo{CString strHostIP;Int nHostFlow;Int nCPUState;Int nProcessState;Int nDiskOperateState;}CollectInfo;Std::map<UINT64, CollectInfo > 或std::list<CollectInfo> 缓存采集数据●信息上报:采用TCP+XML形式与报警服务器通信<?xml version="1.0"encoding="utf-8"?><CollectResult _Notify ><HostIP>172.1.1.1</ HostIP > //主机IP<HostFlow>0</ DataFlow > //主机流量<CPUState >Hello</ CPUState > //CPU状态< ProcessState>1</ ProcessState > //特定进程状态<DiskOperateState>1</ DiskOperateState > //磁盘运行状态</ CollectResult _Notify >●设备巡检:●各模块结构如下:报警采集服务器详细功能分解:●注册认证:◆配置设置(INI文件):服务器IP、端口、SDK、SNMP兼容配置等信息[SystemSetting]ServerIP=0 //IPServerPort=0 //端口Compatibletype=1 //兼容类型,0: SDK 1: SNMP◆向网管服务器注册请求:TCP+XML连接通信<?xml version="1.0"encoding="utf-8"?>< ServerRegist_Req ><ServerName>Jack</ ServerName ><ServerIP>12.2.2.1</ ServerIP ><ServerPort >1</ ServerPort ></ ServerRegist_Req >◆注册应答返回绑定设备信息:<?xml version="1.0"encoding="utf-8"?>< ServerRegist_Ack >< ResultCode >1</ResultCode ><MSCSID>1</ MSCSID > //集群ID<DevInfo><SubEquipmentID>2</SubEquipmentID><ICMSSign>{ec746dbb-717e-4656-be92-17eaf354c86c}</ICMSSign><ICMSSubEquipmentID>2</ICMSSubEquipmentID><SubType>513</SubType><SubName>海康DVR1</SubName><SubNumber>1</SubNumber><DetailedType>769</DetailedType><AlarmEventType>769</AlarmEventType><SpyInputType/><OutConnType/><PTZ>1</PTZ><PTZProtocol/><OnOff>0</OnOff><Demist>0</Demist><RainBrush>0</RainBrush><FilePatch/><UnitEquipmentCode>1310000001</UnitEquipmentCode><EquipmentInfoID>2</EquipmentInfoID><ICMSSign>{ec746dbb-717e-4656-be92-17eaf354c86c}</ICMSSign><ICMSEquipmentInfoID>2</ICMSEquipmentInfoID><EquipmentIP>172.16.67.160</EquipmentIP><EquipmentType>257</EquipmentType><ResourceType>164031</ResourceType><EquipPort>8000</EquipPort><EquipUser>admin</EquipUser><EquipPasswd>12345</EquipPasswd><MSCSID>1</MSCSID><ExtendedInfo/></DevInfo>……….</ ServerRegist_Ack >●设备更新通知:<?xml version="1.0"encoding="utf-8"?><Notify_Req><EquipmentSet><EquipmentInfo ICMSEquipmentID ICMSSign =”” EquipmentID=”” OldOrganId=””NewOrganId=”” UpdateType=””EquiType =“” MSCSID ="1"/> ……< /EquipmentSet ><Sub EquipmentSet>< SubEquipmentInfo ICMSSubEquipmentID ICMSSign =”” SubEquipmentID=””OldOrganId=”” NewOrganId=”” UpdateType=””EquiType = “” MSCSID ="1"/> ……</SubEquipmentSet ></Notify_Req>●设备管理:◆设备列表缓存:typedef struct tag_DeviceInfoList //设备列表{CString strIcmsSign;DWORD dwDeviceID; //设备IDDWORD dwDevType; //前端设备类型DWORD dwDevPlugType;DWORD dwCurSubID;int nPort;CString strDevIP;CString strUserName;CString strUserPWD;DWORD dwSubID;int nSubNumber; /* 子设备号*/DWORD dwIcmsSubID;DWORD dwSubType; /* 子设备类型*/DWORD dwSubExtType; /* 子设备扩展类型*/std::list< DeviceInfoList > SubDevInfoList; //子设备列表} DeviceInfo//前端设备登录信息typedef struct tag_DevLoginInfo{CString strUserName;CString strPassword;int nPort;CString strMac;CString strIPAddr;} DevLoginInfo◆设备SDK调用管理://这个地方要详细点….很重要采用对象化,抽象出统一的调用接口,根据设备类型调用对应的插件DLL,初始化SDK,并将对应的SDK信息保存在链表,以便避免多次重复初始化SDK,析构该SDK时从链表删除。