王晓建,徐定凯
(国网浙江省电力公司湖州供电公司,浙江 湖州 313000)
随着我国电力系统信息化水平的逐步提高和智能电网发展战略的提出,电力企业信息系统的服务器、网络装置、安全装置等设备越来越多,其重要性也日益显现.
电力部门信息系统由多种硬件、软件共同构成一个复杂的平台,涵盖业务范围广,专业系统数量众多,其承担业务宽、应用多、技术难度大.监视这样的系统,在日常工作中需要关注大量的运行指标,如存储空间、设备负荷、网络流量等.这些数据往往分散,且格式不统一,数量巨大,非从业人员难以掌握.在日常运行维护中,信息运维人员一直处于被动状态,总是等到故障或缺陷发生后,才能安排人员抢修,偶尔即使发现有设备故障,也要浪费大量的时间和精力去查找故障原因,工作效率低下.因此,电力部门急需一套能支持信息设备的实时监控应用软件,以满足采集服务器、网络设备、数据库、安全设备等运行指标,并具备详细的实时监控和多元化的报警功能,能将软件系统采集的实时数据保存于历史数据库,以便于对信息设备运行状况做统计运行分析.
PI(Plant Information System)是由美国OSI Software公司开发的一套基于C/S结构的软件应用平台.作为上层管理信息系统网络与工厂底层控制网络连接的桥梁,PI在信息集成中扮演着重要和特殊的作用.PI用于工业信息系统数据的自动采集、监视与存储,可实时存储每个工作环节多年的历史数据.它提供了精确、清晰的操作画面,操作员可方便查看生产环节当前的生产状况,同时也可方便地查看历史生产情况.与此同时,PI也可为应用开发人员和最终用户提供方便快捷的生产信息.考虑到历史生产数据统一存放在数据仓库中,所有公司人员都可查阅所有生产信息,因此PI在实际的生产和业务管理之间起到了桥梁纽带作用.
2.1.1 前台架构体系
前台监视程序考虑其用户相对固定,用户较少,信息安全要求较高,所以采用C/S构架,其架构体系如图1所示.
图1 前台架构体系示意图
前台监视程序需要从配置文件读取管理业务数据,如操作系统分类以及各监视目标设备等,实现程序的逻辑管理关系.从PI数据库读取历史数据与实时数据,实现历史分析与状态监视;与此同时,还需要与运行参数采集程序之间建立TCP连接,实现网络通信,如取消/开启某设备的监测,重新载入监视目标设备等.
2.1.2 后台架构体系
后台应用程序包括两方面:PI数据库接口程序和运行参数采集程序.其框架结构如图2所示.
图2 前台架构体系示意图
从运行的配置文件获取采集所需设备是参数采集程序的主要作用,针对不同的装置需要采集不同运行参数,不需要在采集目标服务器上安装客户端,而是利用装置系统自带功能进行数据采集.读取采集程序采集的各设备运行参数是PI接口程序的作用,同时依据运行参数分类、设备标识等信息自动生成PI测点的Tag,把采集到的运行参数的值储存至PI数据库.如果测点不存在则新建测点,如果测点存在则用更新该测点的最近值.利用此策略可以实现PI数据库测点的自动运维.
采集程序与接口媒介交换数据采用协商格式的XML文件,参数采集程序将采集结果存储成XML格式文件.PI接口程序定期扫描XML文件存放目录,并对扫描结果进行分析处理,最终存入PI数据库.如果处理不成功,将该XML文件转移到ERROR文件夹,由技术人员对错误进行分析;如果处理成功,则立即删除该XML文件.此方式优势在将PI数据库接口程序与采集程序区分开来,PI接口程序不需要与实际设备通信,采集程序不需要与数据库建立通信,运行稳定,即使出现PI数据库不能正常访问,也不会影响运行参数采集功能.等PI数据库恢复正常运行时,可以自动将缓存在服务器本地文件系统中的XML格式文件进行导入.
采集结果以XML文件保存在服务器本地文件系统,如:PAGE(换页空间利用率)、CPU(CPU利用率)、MEMORY(内存利用率).
电力企业信息系统中服务器种类较多,不同服务器上运行的操作系统也不相同,充分挖掘其自带的功能,实现不同的操作系统运行参数采集.这种最有效、最方便的方式是本系统数据采集功能的主要设计思路,如图3所示:
图3 数据采集方式
利用系统自带的远程管理接口——WMI(Windows Management Instrumentation)读取Windows系统的PC服务器设备运行参数,如文件系统利用率、内存利用、CPU利用率等.WMI可以获得关于计算机内部状态的信息,对进程、磁盘和其他系统对象进行建模,从而实现“指示”功能.
采用数据库提供的编程接口,直接向SQL和Oracle数据库发送SQL脚本,并收集数据库返回的脚本解析结果.通过此形式完成设备运行数据采集,如表空间利用率、会话数、运行指标等.
通过SSH建立远程会话连接,向LINUX的PC服务器和UNIX小型机发送Shell命令,收集服务器返回的命令结果.通过这种方式进行运行数据采集,如内存利用、CPU利用率、文件系统利用率等.
利用服务器原生系统自带的功能实现多种方式并存的采集模式,无需安装插件,主要优势如下:
实现方式简单.当有新设备加入时,采集程序无需在目标侧安装额外软件,仅需填写IP地址、用户名及密码等相关信息即可方便实现监控.
数据采集高效可靠.数据采集模块为监控提供了设备运行的实时数据,因此数据采集模块在整个监控软件中起到中流砥柱的作用.由于充分利用原生系统自带的功能进行数据采集,系统资源占用较少、程序稳定性高、工作效率较高.
采集内容丰富.电力企业信息系统设备繁多,运行设备所采集的信息又各不相同,个性化程度较高,能满足特殊监控需求.例如,通过获取SQL脚本运行结果的方式实现数据采集,只需通过编写对应的SQL脚本,即可方便实现新增信息采集.
2.4.1 数据接入流程
PI数据库存储接口程序的流程如图4.它负责将服务器在特定时刻的运行参数值存入PI数据库,解析数据采集程序生成的XML采集结果文件.定时器模块定期对采集结果文件存放目录进行快速扫描,并将扫描得到的XML结果文件放入结果文件集合中.如果多次扫描后结果文件集合都为空,表示采集程序出现异常,即没有产生新的采集结果文件,程序立即通过手机短信通知相应的系统管理员,通过此模式可以有效检测监视采集程序是否运行正常.得到结果文件集合后,从中逐个取出XML结果文件进行处理,若处理过程中出现异常,则记入日志并将该文件复制到ERROR文件夹,以便进行错误分析;若成功将文件中的数据存入PI数据库,则删除该文件.
图4 接口程序流程图
2.4.2 XML文件处理
处理XML结果文件的方法如图4虚线框部分所示.首先获取该文件,得到<PAGE>、<MEMORY>和<CPU>等运行参数和对应的时间戳,然后逐条处理此类信息.在将运行参数值保存到PI数据库前,需要自动判断需存测点是否存在,若不存在,需要先在PI数据库中创建相应测点.确保测点存在以后,然后判断该测点是否允许更新,若需要更新则将运行参数和对应的时间戳保存到PI数据库,否则将该值丢弃.
为提高程序运行效率,避免与PI数据库的频繁通信,在应用程序中建立一张测点控制表,表中包含程序本身创建的所有PI测点和相关配置,包括:测点文字描述、最近更新值、最近更新时间、对应的目标设备编号和是否需要更新到PI数据库等.如表1所示.
表1 测点控制列表
为实现监视程序端控制采集程序,如重新载入监控目标、人工发起运行参数采集、取消/开始某设备监控等,需实现采集程序与监视程序之间的数据通信,流程如图5所示.
图5 数据通信流程图
监视程序是本系统长期运行模块,正常运行时,可以最小化到系统托盘图标,它定期读取所有监测设备的每个监视指标的实时运行数据,并与预先设定的阀值进行比较,如果采集的数据超过阀值,则进行告警,退出告警界面,在告警信息窗口显示相关状态和信息,如图6所示.
图6 数据通信流程界面
本应用软件包含三个程序:PI数据库接口程序、采集程序和监视程序.3个程序全部基于Visual Studio 2005环境下开发,通过C语言进行研发.在于PI数据库通信方面,利用PI-SDK实现PI数据库的连接和数据存储.在日志记录方面,利用第三方开源库Apache Log4net作为单独的日志记录模块.在数据采集方面,利用第三方开源库Routrek.granados来支持SSH协议.本应用软件的实现架构如图7所示.
图7 程序框架示意图
数据采集程序从配置文件config.xml中读取采集内容,按照预先设定的时间间隔(如文件系统利用率120 min采集一次,CPU利用率5 min采集一次)完成定期采集,并将采集的结果以固定格式的XML文件保存在服务器本地目录.PI接口程序读取该XML文件,并完成解析,然后将解析得到的数据保存到PI数据库.由于XML文件中保存的每条信息都自带时间戳,所以采集程序和PI接口程序没有时间上的耦合关系,允许PI接口程序退出或暂停,下次恢复正常运行时仍能将数据自动保存进PI数据库.最后,监控主程序通过PI数据库中的实时历史数据和配置文件中的配置信息进行状态监控、历史数据分析和指标告警等.
本文主要描述了新型的服务器实时监控系统的设计与实现.主要完成三个方面的内容:设备运行参数信息的自动采集、采集信息的可视化展现和采集信息存入PI数据库.
通过本软件的开发与应用,解决了电力企业信息系统运行监视难题,提升信息系统运维水平,使企业信息化更上一个台阶.
[1]史兴华.供电企业实时/历史数据库PI典型应用案例[M].北京:中国电力出版社,2009.