您的位置:首页 > 编程语言 > Java开发

基于Java设计和实现系统的自动化巡检

2016-02-21 22:07 1791 查看
系统巡检对于系统管理员并不陌生,日常工作是离不开它的。笔者记得进入运维岗位的第一天,学习的第一课就是如何系统巡检:首先远程登陆各服务器,然后通过执行命令或操作页面查看系统内存、CPU和磁盘利用率等情况,最后将相应的数值填写入系检表格。看似几步下来很简单,其实当你发现巡检的服务器不是一台两台而是二十多台甚至更多时,花费的时间也在线性增长,不禁会感叹自己变成了流水线上的工人。不过庆幸的是笔者一直自诩为Java工程师,何不利用之前工作的经验和技术通过Java也实现自动化巡检呢。一不做二不休,经过笔者不断的开发、测试,最后在生产环境运行一年后,自动巡检工具虽然称不上完美,但从系统管理员角度来说,的确从繁琐和重复性的工作中解脱了出来。在此笔者总结下该工具的设计和实现,以飨读者。

1. 工具的实现关键技术

1.1 Ganymed SSH-2 for Java

http://www.ganymed.ethz.ch/ssh2/网站是这么介绍Ganymed SSH-2 for Java的:

Ganymed SSH-2 for Java is a library which implements the SSH-2protocol in pure Java (tested on J2SE 1.4.2 and 5.0). It allows one to connectto SSH servers from within Java programs. It supports SSH sessions (remotecommand execution
and shell access), local and remote port forwarding, localstream forwarding, X11 forwarding, SCP and SFTP. There are no dependencies onany JCE provider, as all crypto functionality is included.

这段话说白了就是java对SSH的实现,借助它可以用java程序连接SSH服务器执行Shell脚本,故选择它用于Linux和AIX系统巡检。

1.2 WMI和J-interop

Windows系统巡检是否也能找到类似1.1的接口呢?答案是肯定的,虽然Windows并不是开源系统,但它提供了一个称为WMI(Windows ManagementInstrumentation)的模块,通过WMI脚本或者应用程序可以管理本地或者远程计算机上的资源。JAVA这里也有实现,其中J-Interop就是个不错的Java
API。http://www.j-interop.org/的介绍如下:

J-Interop is a Java Open Source library (under EPLv1.0) thatimplements the DCOM wire protocol (MSRPC) to enable development
of Pure,Bi-Directional, Non-Native Java applications which can interoperate with anyCOM component.

The implementation is itself purely in Java and does not use JavaNative Interface (JNI) to provide COM access. This
allows the library to beused from any Non-Windows platform.

1.3 RMI

RMI(Remote Method Invocation)远程方法调用是一种计算机之间利用远程对象互相调用实现双方通讯的一种通讯机制。使用这种机制,某一台计算机上的对象可以调用另外一台计算机上的对象来获取远程数据。之所以提到RMI,是因为WMI在低版本的Windows,如Windows 2003的确是个不错的选择,但是当通过Java在Windows 2008等高版本调用时却发现2008已经改变了WMI的安全权限,要通过非系统管理员调用需要修改审核策略甚至注册表,为避免和系统要求的安全策略有冲突,故在Windows
2008等高版本进行巡检时采用RMI方式。

2. 工具的设计

2.1 功能模块

通过思维导图,笔者将系统巡检分为五大模块,如图所示。其中右半部分是各系统包括Linux、AIX和Windows操作系统所要巡检的项目,操作的命令以及步骤,左半部分的Excel填写是巡检的记录,报警通知是通过在巡检中和阈值进行比较后发现异常进行报警。之所以加入报警通知是因为系统巡检不仅仅是简单的记录,最重要还是要发现系统可能存在的问题。



2.2 UML类图

类图用于描述系统中所包含的类以及它们之间的相互关系,帮助人们简化对系统的理解,它是系统分析和设计阶段的重要产物,也是系统编码和测试的重要模型依据。如图为通过StarUML绘制的自动化测试工具类图。其中SSH、Wmi、RMIServer等类是底册服务类,分别实现了Linux、Aix和Windows各操作系统获取磁盘信息、CPU信息和内存信息的方法。SimpleMailSender实现了邮件报警功能。
Linux4Excel、Aix4Excel和Windows4Excel则实现了Excel记录方法。



3. 代码实现和功能展示

3.1 代码实现

通过Eclipse建立Java Project并导入相应的jar包。该工程的结构如图所示。其中包结构正对应了类图设计,而其中的aix.xml、linux.xml、windows.xml和windows2008.xml则用于配置要Excel的存放位置和所要巡检的服务器IP、用户名和密码,config.properties则包含了所要发送的邮箱地址、用户名和密码,log4j.properties则用于配置日志信息。工程如图所示。



3.2 功能展示

通过Eclipse导出可执行jar文件xunjian.jar,编写bat脚本,运行命令@java –jar “xunjian.jar”,双击脚本,结果如图所示。其中,10.5.0.49内存使用率>90%,触发邮件报警,如图所示。



执行完脚本花费时间1分钟,同样的巡检如果通过系统管理员手动执行,一般花费5~10分种左右,当所要巡检的服务器数量增多时,手动的时间因是顺序执行时间也会不断增加,而自动执行加入线程后实现并发执行,仍然要花费较少的时间,可以说完全解放了双手。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: