APP下载

局域网状态自动监测及告警系统设计与实现

2020-04-24王宜明

电脑知识与技术 2020年5期
关键词:电话号码管理员短信

摘要:人工监测网络运行状态费时费力效率低下。为及时发现网络故障,减轻值班人员工作强度,提高自动化监测能力,基于java语言,利用InetSocketAddress类的相关方法,配合数据库,实现了对网络中的重要信息节点如交换机、服务器等硬件设备,以及重要的业务平台和服务运行状态的自动监测,并在监测到故障时能自动发送告警短信通知相关人员。

关鍵词:java;网络状态:自动监测;自动告警

中图分类号:TP311.1 文献标识码:A

文章编号:1009-3044(2020)05-0035-03

开放科学(资源服务)标识码(OSID):

1 概述

随着气象业务现代化的深入发展,气象信息化集成度越来越高,对实效性的要求也更加严格。气象数据和报文传输等业务对网络的稳定性也相应的提出了更高的要求,这意味着信息网络运维人员必须要能及时发现问题并能在第一时间处理问题。故障发现的越及时,处理故障的余地越大。在以往单纯依靠人工巡检来监测网络运行状态费时费力且效率低下,还使得业务值班人员压力非常之大,疲于应付。目前的网管软件在应用上其功能点主要侧重于网络维护功能方面,如网络拓扑图显示、线路流量统计、ip地址统计等。而在网络通断状态的检测,FTP、ns、Tomcat等网络服务运行监测、告警短信号码定制等方面不能灵活的按照网络管理者的意愿进行灵活定制。基于上述原因,开发一套自动的、可定制化的监测和告警系统(以下简称监测系统),用以实现对重要的信息网络节点、服务器以及重要的业务平台服务运行状态监测势在必行。

目前主流的短信发送技术主要有两种:使用自购设备“短信猫(GMS Modem)”实现短信发送;利用通信运营商(如中国联通)提供的webservice接口实现短信发送。监测系统采用的短信告警技术也正是这两种方式。“短信猫”的优点在于短信发送端位于网络内部,短信发送操作在内网完成,减少传输间网络损耗。webservice方式的优点在于发送快速,编辑好模板之后,可快速实现大量的短信发送。两种方式互为备份,一种方式发送失败后可以转至另一种方式继续发送短信,确保告警短信正常及时送达至管理员手机上。监测系统开发完成后,可以实现对重要信息节点和服务器以及重要业务平台、服务的状态监测和告警,不仅能提高信息运维部门的反应速度,也能极大地减轻值班员的劳动强度。

2 系统设计

2.1 功能设计

监测系统运行流程图如图1所示。

监测系统运行的具体步骤是:首先初始化配置数据,例如,将要被监测的设备ip地址及端口号、与设备相关联的管理员电话号码等数据。配置数据初始化出现异常时,例如从数据库读 取配置数据失败,则将错误信息通过短信发送给管理员进行处理,并将检查结果写入日志备查。配置数据初始化成功后,根据配置数据选择待监测ip的检查方法。如设备配置数据中端口号为0,则表示只对该设备的网络可达性进行监测。若端口号不为0,表示需要监测该端口号上的服务是否正常运行。最后如果判断ip或者端口不可达,则将触发告警,由短信告警模块发送告警信息给相关管理员处理。无论本次监测有无问题,最后的监测结果都将写人数据库作为运行日志备查。

2.2 元数据设计

监测系统数据初始化的工作是读取待监测的ip列表,端口列表以及与ip相关联的管理员的电话号码。这些相关数据被称作监测系统的元数据,其在数据库中持久化保存,方便监测系统获取,以及修改配置数据,对监测对象进行调整。 元数据主要分为两类,分别以表的形式存放于数据库中,表分别是“被监测设备配置表”以及“管理员电话号码配置表”。其中“被监测设备配置表”中存储的是被监测的网络设备的状态配置信息。详情见表1“被监测设备配置表”。

其中,IpAddress表示被监测设备的ip地址,OpenPort表示该设备开放出可被监测的端口,0”表示无端口开放,需要用ping的方式来确定该ip地址是否可达,从而判定此ip是否存活。其他数字表示此ip上开放有相应的服务,需要监测该端口是否在正常,以判断该设备及服务是否正常。IsValid表示该设备否要被监控,存入值“0”或者“l”。0代表此ip不需要再监测。Administrator表示该设备被检出问题后要通知的部门所属。若该设备有多个部门管辖,可配置多个部门,用“,”隔开即可。

“管理员信息配置表”内存储的是待监测设备的管理员配置,详情见表2管理员信息配置表。

其中,“AlarmCategory”列中存储的信息表示配置表中本条记录归属的业务种类。例如“network”表示监测系统的元数据配置信息。“Administrator”列用于标识接收短信告警的相关部门,与表1中“Administator”列相对应。“PhoneNo”列顾名思义,就是用来接收告警短信的号码。考虑到一个部门可能要多个管理员需要接收告警短信,例如“青岛”,需要有两个网络管理员同时接收告警短信,则可以在此列配置多个电话号码,用英文逗号“·”隔开即可。

2.3 数据库表设计

数据库用来存储监测系统运行所需要的配置数据和监测系统运行日志。元数据确定完毕后,在数据库中创建两个数据表来存储元数据。以“被监测设备配置表”为例,建表语句如下:

create table ipconfig(

id VARCHAR(32) primary key not null comment‘主键,in-sertdatetime DATE default current_timestamp comment‘记录插入时间,

ipAddress VARCHAR(15) not null comment‘被监测IP地址,

openPort INTEGER not null default o comment‘端口号,默认0,

isValid CHAR(1) default 'O, comment‘是否有效,默认无效,1代表有效,

editBy VARCHAR(IO) default 'admin, comment‘操作人员,

admin VARCHAR(150) not null comment‘故障时通知所属单位)

表创建完毕并初始化数据后,监测系统即可从表中读取配置数据进行处理。若需要对监测ip地址、端口等数据进行变更,只需对元数据配置表进行增删改操作即可,监测系统在每一次运行时均可根据读取新的配置数据进行监测。

2.4 代码实现

2.4.1 监测功能代码实现

Java是一门面向对象的语言。类是属性和操作属性的方法的集合,属性和操作属性的方法一起描述对象的状态和行为。在监测系统中,待监测的设备、服务即可看作一个类,用IpData-Conf来表示。该类具有ip地址、开放端口号、是否有效、管理员等属性,同时也具有各个属性的getter方法,如表3所示:

在完成数据库表创建并填人初始化数据后,系统即可开始对进行监测。系统运行流程如图1所示,其伪代码如下所示:

List ipDataConfs= loadProperties0;

if (ipDataConfs.size0==0){

alertModule0;

return;1

ipDataConfs.forEach(ipDataConfo{

if(ipDataConf.getOpenPort0==0){

boolean checkResult= checkNetWorkBylp0;

if (!checkResult){

alertModule0;

】else{

boolean checkResult= checkNetorkByPort0;

if(! checkResult){ alertModule0;】

¨)

loadProperties0函数完成监测系统初始化的功能,其初始化的是ipDataConf类,并将该类存储在一个List结构中,若初始化配置数据后返回的List大小为0,表示初始化配置数据失败,将直接触发告警模块并退出本次监测操作。 若初始化配置數据成功,则开始用循环遍历该对象,轮流取出IpDataConf类,通过getOpenPort0方法获取该ip对应配置的端口,若获取到的端口值为0,表示该ip仅仅用checkNetwork-Bylp0监测网络可达性即可。若不为0,表示该ip上开放有服务需要监测,则使用checkNetworkByPort0方法来进行监测。

在进行网络可达性监测时,checkNetWorkBylp0函数用In-etSocketAddress类以及该类的isReachable0方法,InetSocketAd-dress类是SocketAddress(抽象)类的子类,其实现了ip套接字地址(ip地址+端口号)。具体代码如下:

InetSocketAddress socketAddress=

new InetSocketAddress(ipDataConf.getlp0,0);

return (socketAddress.getAddress0 1= null)

&& socketAddress.getAddressO.isReachable0;

监测系统先根据ip地址来创建InetSocketAddress对象socketAddress,然后对socketAddress. getAddress0进行非空判断,并使用isReachable0方法判断其网络可达性。

在进行端口监测时,checkNetworkService0方法采用的是socket对象的isConnect0方法:

Socket socket= net Socket0;

InetAddress inetAddress= new

InetAddress(ipD ataConf.getIpO.ipD ataConf.getOpenPort O);

socket.isConnect(remoteAddress,connectTimeOut);

return socket.isConnected0;

创建socket对象,再根据ip和端口创建一个InetSocketAd-dress对象,并使用socket的connect0方法去连接,如果连接失败则触发短信告警模块,告警该ip上运行的服务(即开放的端口)失效,需要立即通知管理员检查。

2.4.2 自动短信告警模块设计

考虑到存在这种情况:当检测到设备或者服务发生故障时,如某地部署的路由器出现问题,需要同时发送告警短信给该设备所属地网络管理员,以及上级网络管理部门的网管员。而还存在一种情况是两地的网管员都不止一个人需要接收告警短信。因此,就需要在表1待监测ip及端口配置表中设置字段来存储故障时需要通知的单位或者网管员代码。然后在表2电话号码配置表中设置字段来配置相应管理员代码的告警短信接收电话号码,电话号码可以不止一个,中间用英文逗号隔开即可。告警短信发送模块可以识别并按照设定号码分别发送告警短信。模块的最终目的是要创建HashMap结构的链表,其中存储的都是要发给对应Ke y 的所有告警信息。storePhoneMsg存储的是接收告警短信的电话号码及对应的告警内容列表。相关代码如下:

HashMap0;

for (String mobile:mobileList){

if (storePhoneMsg.get(mobile)==null)(

List f'irstCreated= new ArrayList<>0;

firstCreated.add(msg);

storePhoneMsg.put(mobile, firstCreated);

) else{

List alreadyExist= storePhoneMsg.get(mobile);

alreadyExist.add(msg);

storePhoneMsg.put(phoneNo, alreadyExist);")

此段代码的逻辑是:循环遍历告警短信要通知的电话号码列表,并检查storePhoneMsg中是否已经包含该电话号码。若不包含,表示该电话号码是第一次添加到storePhoneMsg中,创建List并添加到storePhoneMsg中;若包含,则表示该电话号码已经有告警短信信息存储在storePhoneMsg中,那就需要取出该电话号码对应的List并将新的告警短信添加进去,最后将该List放回storePhoneMsg中。如此循环添加完毕后,在用嵌套循环遍历出所有告警短信并发送出去。代码如下:

storePhoneMsg.forEach《mobile,msgList)→{

for(String alertMsg: msgList){

sendAlertMsg(mobile,alertMsg);

}})。

3 结论

本文利用基于Java的InetSocketAddress类中的相关方法,结合數据库存储,实现了可自主定义的网络状态监测和故障自动发现告警系统,得出以下主要结论:

(1) Java语言有丰富的类库和方法,可较好地实现基于网络的系统编程。

(2)自定义的网络监测系统可以较好地实现本地定制,可灵活的根据实际情况对监测对象和告警对象进行调整。

(3)监测系统总体运行平稳良好,有故障能及时发现并告警,较好地实现了系统设计的初衷。但偶尔会出现极少数的错误告警,可能是因为网络波动引起,需要根据实际情况再进行检查,调整监测参数。

(4)考虑在不侵入原有业务代码的情况下,引入Redis,提高监测系统初始化数据的速度,尽量减少与数据库的数据交互,提高系统运行效率。

参考文献:

[1]田春婷.基于Java Socket文字聊天系统的GUl实现【J].兰州石化职业技术学院学报,2019,19(2):11-15.

[2]陆鑫,王艳蓉,孙超,史豪杰,一种高性能多模式的内存数据库系统[J].计算机应用与软件,2019,36(1):94-98.

[3]余广宏.实时数据库技术的发展及应用效果[J].电子技术与软件工程,2016(20):185.

[4]郑逸凡.Java多线程机制及其在socket编程中的应用[J].赤峰学院学报:自然科学版,2018,34(9):62-63.

[5]欧阳宏基,李红,宋笑雪.一种基于ES2SH框架的Java EE应用架构[J].实验室研究与探索,2018,37(10):157-162,167.

[6]乔岚,基于MyBatis和Spring的JavaEE数据持久层的研究与应用[J].信息与电脑,2017(8).

[7]何军,陈倩怡.Vue+Springboot+Mybatis开发消费管理系统[J].电脑编程技巧与维护,2019,404(2):89-90,104.

[8]王倩;邓媛劫.基于Java Socket的网络聊天系统的设计[J].电脑与信息技术,2018,6(1):51-53.

[9]郭琳.分析Java语言与Java技术的应用[Jl,电脑迷,2018,112(11):123.

【通联编辑:梁书】

收稿日期:2019-11-09

基金项目:青岛市气象局青年科研专项

作者简介:王宜明(1981-),男,山东青岛人,工程师,硕士,主要研究方向为数据挖掘校验以及服务运维。

猜你喜欢

电话号码管理员短信
欢欢家的电话号码
我是图书管理员
我是图书管理员
道歉短信
代发短信
猜电话号码
“八一”节日短信之一