文章快速检索    
  地震地磁观测与研究  2019, Vol. 40 Issue (2): 140-145  DOI: 10.3969/j.issn.1003-3246.2019.02.020
0

引用本文  

陈静. 河南省地震观测设备分级运维监控系统研发[J]. 地震地磁观测与研究, 2019, 40(2): 140-145. DOI: 10.3969/j.issn.1003-3246.2019.02.020.
Chen Jing. Development of the monitoring system for equipments of Henan Province with multilevel access control[J]. Seismological and Geomagnetic Observation and Research, 2019, 40(2): 140-145. DOI: 10.3969/j.issn.1003-3246.2019.02.020.

基金项目

2018年度地震监测、预测、科研三结合课题(项目编号:CEA-JC/3JH-171703)

作者简介

陈静(1984-), 女, 工程师, 计算机硕士学位, 主要从事网站等业务平台运维工作。E-mail:806875930@qq.com

文章历史

本文收到日期:2018-06-19
河南省地震观测设备分级运维监控系统研发
陈静     
中国郑州 450016 河南省地震局
摘要:原生Nagios短信告警方式灵活度欠缺,无法适用于工作中每日轮班的值班制度。基于JAVA与PHP语言,研发河南省地震观测设备分级运维监控系统。该系统由Nagios采集故障信息,并与值班表信息联动,为用户提供自定义且实时的告警短信自动推送服务,弥补原生Nagios告警方式的弊端。通过将Nagios数据与设备附属信息关联整合,提供故障严重等级鉴别、故障排查建议提示、设备连通率统计查询等贴近用户使用习惯的功能,使故障信息的获取更为高效、人性化。自该系统试运行以来,设备连通率获得大幅度提高,显现出较高应用价值。
关键词短信    联动报警    实时监控    NDOUtils    触发器    
Development of the monitoring system for equipments of Henan Province with multilevel access control
Chen Jing     
Henan Earthquake Agency, Zhengzhou 450016, China
Abstract: The native SMS-alarming function of Nagios lacks flexibility, so it cannot be applied to the daily shift duty system at work. Based on programming language such as JAVA and PHP, it is focused on developing the monitoring system for equipments in Henan province with multilevel access control. The system fetches notifications of equipment failure from Nagios and links with the duty table to provide users with customized and real-time automatically pushing service via SMS, which makes up the disadvantages of the original Nagios warning mode. Through the integration of Nagios and the affiliated information, the system provides functions such as the fault serious grade identification, the suggestion of the fault detection, the statistical query of the connection rate of the equipment, which is beneficial to the operative habit of users, making the acquisition of the fault information more efficient and humanized. Since the commissioning of the system, the connectivity of equipment has been greatly improved, showing a higher application value.
Key words: short message    linkage warning    real-time monitoring    NDOUtils    trigger    
0 引言

Nagios是一款开源的免费网络监视工具,能有效监控交换机路由器、Windows、Linux主机状态等,在系统或服务状态异常时发出邮件或短信报警,第一时间通知网站运维人员。河南省地震局网络中心基于Nagios部署了覆盖全省范围的网络监控平台,为该局中心服务器、网络设备以及河南省各市地震局台站所属地震监测网络设备提供不间断的网络监控服务,现已配置200多个监控对象。

原生Nagios系统故障报警手段一般采用屏幕、语音、电子邮件和手机短信4种告警方式。其中前2种方式需要信息值班人员每天24小时在电脑前值守,电子邮件告警对于响应告警信息的时效性无法控制和保障,而短信告警只能发送到固定手机号。现有故障信息获取渠道存在局限性,效率低,耗时费力,不利于故障的快速发现与排除。如何将众多仪器与系统的各类告警信息快速、准确地通知到运行管理人员,已成为系统运维管理的重要内容。

杨昌武等(2012)提出通过飞信将故障信息发到运维人员手机上;李刚等(2012)结合Mysql触发器机制与PHP编程技术,实现了故障信息短信告警功能,为该系统研发提供了指导性作用。为了弥补Nagios原有报警机制的局限性,实现故障报警信息的快速高效传递,借助NDOUtils组件的同步功能,将Nagios系统与现有短信发送平台进行数据共享与技术融合,利用JAVA与PHP编程技术,研发河南省地震观测设备分级运维监控系统,实现故障告警短信的实时推送服务。同时,系统通过对Nagios的数据进行分析整合,提供故障严重等级鉴别、故障排查建议提示、设备连通率统计查询等贴近用户适用习惯的功能,使故障信息获取更加人性化。

1 技术背景

Nagios通常由主程序(Nagios)、插件程序(Nagios-plugins)和4个可选的ADDON(NRPE、NSCA、NSClient++和NDOUtils)组成。NDOUtils是一个可以把Nagios的全部状态信息保存到Mysql数据库的外部构件。Nagios监测到的故障信息被实时添加入NDOUtils组件的数据库。基于该原理,利用一个进程定时读取NDOUtils组件的数据库,从而间接获取Nagios生成的故障信息,实现数据共享。

Nagios自带的短信通知功能是通过系统配置文件静态定义接收方实现的,无法与值班表信息自动衔接,不能满足值班轮流工作制中每天值班人员变更的需求,而且因不存在告警信息的分析鉴别流程,无法过滤重复的故障报警以及针对故障类型提出故障排除建议。基于Nagios,分级运维监控系统故障通知方式更加高效,并提供更加人性化的功能服务。该系统将Nagios的故障信息与设备附属信息、值班表信息等进行有效关联整合,自动根据值班表进行灵活的自定义推送,拥有故障严重级别提醒、重复故障信息智能合并、故障排查建议指导等功能。

2 系统架构与模块设计

系统整体架构由前台值守程序与后台管理程序2部分构成,总体架构见图 1

图 1 系统架构 Fig.1 Overall architecture of the system

前台值守程序采用JAVA语言编写,主要实现告警信息采集、分析与短信实时推送功能。JAVA是一种可以撰写跨平台应用软件、面向对象的程序设计语言(黄文海,2017),具有卓越的通用性、高效性、平台移植性和安全性(高洪岩,2015)。Mysql是流行的关系型数据库管理系统(任进军等,2017),对PHP有较好的支持(陆凯,2016)。以Mysql数据库形式建立值班人员手机号以及值班表的电子存档,前台值守程序得以实现告警短信推送功能与值班表的联动。

后台管理程序提供值班表维护功能,方便值班人员对值班表信息以及运维人员信息的更新维护,同时采用登录认证管理机制,支持多级权限控制,面向不同部门提供不同数据浏览界面,实现分级运维监控,为各部门提供其管辖范围内设备实时故障情况汇总、设备连通率统计查询等功能。该程序基于PHP+HTML+JavaScript语言研发,PHP负责服务器端逻辑处理与数据库查询操作,JavaScript负责浏览器端与用户的动态交互。异步响应技术Ajax能够在不刷新页面的前提下加载数据,改善用户使用体验度。

故障信息采集模块启动独立线程,以时间戳为查询参数,按照指定频率周期性扫描Nagios数据库,抓取最新故障信息。NDOUtils将Nagios产生的故障告警记录在数据库的npc_notifications表格中,其中:字段notification_type标识此故障是host故障还是service故障;notification_id代表此故障记录的数字标识;object_id代表故障对象的数字标识;start_time代表故障开始时间;end_time代表故障结束时间;state字段记录产生时Host或者service的状态(对于host对象,sate为0代表正常,为1代表故障,为2代表严重);output字段代表告警详细信息。采集模块周期性扫描npc_notifications表格,抓取状态异常的记录,并传递到分析模块加工处理。

故障信息分析模块为当前所有故障设立缓存区域,新增故障信息首先被放入缓存,接受重复信息检测过滤后与值班表等信息表格进行匹配关联,最终获得此故障对应的故障严重等级、线路类型、故障排查建议等分析结果。此模块算法流程见图 2

图 2 故障信息分析模块流程 Fig.2 Flow of fault message-analysing module

短信发送模块结合上游模块解析的多方位辅助信息,按照预定义模板生成短信内容,并调用短信发送接口,向故障设备所属部门的当天值班人员推送短信告警信息。

3 系统主要模块编码 3.1 告警信息采集

告警信息采集模块启动一个独立服务进程,以固定频率访问NDOUtils组件存放Nagios故障信息的数据库,每次扫描数据库后均更新时间戳,为下一次数据库扫描提供时间参照点。若发现新故障,调用分析模块运行信息关联算法。以下列出主要实现代码。

 public void run(){

  while(true){ try {

  ……………

  String sql=”select b.display_name, a.start_time, a.state, a.output, b.address from “+pre+”notifications a, ”+pre+”hosts b where a.notification_type=0 a.object_id=b.host_object_id and start_time >’”+timestam+”’”;

  //读取时间戳之后发生的故障信息

  ResultSet rs=statement.executeQuery(sql);

   while(rs.next()){

if(timestam.compareTo(rs.getString(“start_time”))<0){timestam=rs.getString(“start_time”); //更新时间戳}

   for (int i=1;i<=5;i++) strings.append(rs.getString(i)+” & ”);

   alarm.setstring(strings.toString()); //调用故障分析模块

   strings=new StringBuffer(); }

  conn.close(); //关闭数据库连接

 }catch(Exception e){ System.err.print(e.toString()); } } }

3.2 告警信息分析处理

告警信息分析处理模块主要功能为以故障设备ID为中心,开展多方位辅助信息的关联检索,从而提供更人性化、智能化的故障提醒服务。为减少重复的数据库查询,提高运行效率,分析模块在初始化阶段创建号码词典,并采用值班信息缓存机制,首次从数据库查询获取,之后直接从缓存获取,缓存每日一更新。下面列出关键实现代码。

Map<String, String>tele_num =new HashMap<String, String>(); //创建号码词典

Map<String, String>today=new HashMap<String, String>();

//缓存时间标记,用于鉴别信息是否过期,键值对为台站名-》日期

Map<String, String>telnumbers=new HashMap<String, String>();

//缓存当天值班人员电话,键值对为台站名-》短信推送方

   public void sendMessage(){//推送短信告警

      try { if(today.containsKey(bumen)){

        if(today.get(bumen).equals(day)){ //缓存区命中,直接发送短信

sendmessage(source, state, name, start, address, telnumbers.get(bumen)); }}

else {sendmessage(source, state, name, start, address, getnumber(getperson(bumen), bumen));

   }}//未命中缓存,从数据库检索

   public String getnumber(String person, String bumen){ //获取电话号码

   String names[];  String number=””;

names=new String[1];names[0]=person;

   number+=tele_num.get(names[i]);

  if(!today.containsKey(bumen)){//若缓存中未收藏此部门信息,进入获取流程

   today.put(bumen, day); telnumbers.put(bumen, number); }

 if(!(today.get(bumen).equals(day))){//判断时间标记,号码缓存已过期,更新缓存today.put(bumen, day); telnumbers.put(bumen, number); }

  return number; }

4 成果展示 4.1 前台值守

前台值守程序使用JAVA语言编写,提供参数配置、故障情况汇总、短信发送情况展示等功能,运行界面见图 3,值守程序的采集任务、推送任务的执行状态一目了然。

图 3 前台值守程序界面 Fig.3 The interface for automated unattended software
4.2 后台管理

后台管理程序主要实现值班表信息维护、Nagios实时故障汇总展示、设备连通率统计查询等功能。

(1)值班表信息维护。值班表信息维护界面分为上下2部分,点击上方选项卡中需要编辑的月份,下方表格响应加载当月值班人员信息。功能界面见图 4

图 4 值班表管理功能界面 Fig.4 The interface for function of management on duty

(2)Nagios实时故障汇总展示。结合全省设备分级管理模式,利用PHP编写相关逻辑,实现不同部门账号不同跳转分流的效果,满足日常工作中分级运维监控需求。不同部门账号只能浏览本部门管辖范围内设备的实时监控展示页面。管理员拥有最高权限,可管理、查看全省范围内观测设备情况。

(3)设备连通率查询。设备连通率查询页面为用户提供按时间统计的连通率查询功能,界面见图 5

图 5 故障连续率统计查询功能界面 Fig.5 The interface for function of continuous rate statistical query

查询条件有自定义与预定义2种模式,点击序列按钮中的单个按钮,可按照预定义时间查询条件进行快速查询,已预定义11个时间段。点击下方列表中的对象名称,可浏览此对象当前时间段的历史故障记录。

5 结论

开源Nagios网络监控系统应用于网络值班工作,凸显出其不够灵活的弊端,无法适用每日轮班的值班制度。为改变现状,设计河南省设备分级运维监控平台,将现有Nagios系统与短信发送平台进行无缝技术衔接,实现Nagios产生的告警信息自动以短信息形式实时推送的功能,拥有短信推送方按需定制的特点,突破了原有故障获取方式的局限性,有利于网络运维人员第一时间掌握网络状态。同时,系统通过对Nagios的数据进行分析整合,提供故障严重等级鉴别、故障排查建议提示、设备连通率统计查询、分级管理模式下的故障汇总等贴近用户使用习惯的人性化功能,使故障信息获取更为高效。系统试运行期间,在不耗费人力、物力的前提下,故障响应时间缩减,工作效率提高,受到广泛好评。

参考文献
高洪岩. JAVA多线程编程核心技术[M]. 北京: 机械工业出版社, 2015: 26-26.
黄文海. JAVA多线程编程实战指南[M]. 北京: 电子工业出版社, 2017: 31-33.
李刚, 王晓磊, 孙路强, 等. 基于Nagios软件的综合短信联动告警系统在地震行业中的应用研究[J]. 地震研究, 2012, 35(1): 133-138. DOI:10.3969/j.issn.1000-0666.2012.01.022
陆凯. PHP网站开发实用技术[M]. 北京: 人民邮电出版社, 2016: 63-63.
任进军, 林海霞. Mysql数据库管理与开发[M]. 北京: 人民邮电出版社, 2017: 59-59.
杨昌武, 曹龙汉. 飞信报警方式的Nagios网络监控系统在企业中的应用[J]. 网络安全技术与应用, 2012, 11(7): 42-45. DOI:10.3969/j.issn.1009-6833.2012.07.014