基于Ubuntu的Unix服务器管理系统开发
2018-03-23吴宗键
吴宗键
(中国民航珠海进近管制中心,广东 珠海 519015)
0 引言
Unix操作系统因为其极高的可靠性、网络功能和数据库支持功能等特性[1],目前已经成为世界最主流的服务器操作系统。在空管系统中,空中交通管制自动化设备服务器也均采用Unix系统。随着航班流量的日益增长,服务器处理数据量与日俱增,加上设备老化等因素,服务器由于资源占用过高导致的故障频繁发生,因此,对Unix服务器的运行资源进行监控管理就显得十分必要。
目前空管设备软件厂家提供的监控系统偏重于对软件状态的监控管理,而对服务器硬件资源较少涉及。商业的Unix服务器管理软件又无法保证安全性,而且不切合空管系统的实际需求。因此,本文开发了一套适用于空管系统的 Unix服务器管理系统,对服务器的运行资源进行监控管理,辅助设备保障人员保障Unix服务器的正常运行。
1 系统需求分析
结合笔者单位空管设备 Unix服务器的运行状况,以及设备维护人员的需求,本文所开发的Unix服务器管理系统需要实现的功能如下:
(1)实时监控服务器资源占用[2],包括内存占用、CPU占用、硬盘占用、swap缓冲区占用、网络端口占用等,并在占用超过告警阈值时产生告警。
(2)Unix服务器监控对象和告警阈值可实现自定义添加、删除和修改。
(3)可查询Unix服务器历史告警日志、历史资源占用数据,并可选择起止时间段绘制历史曲线。
(4)具备远程控制Unix服务器进行关机、重启和kill进程的功能。
(5)具备简洁鲜明的人机界面,为用户提供便捷友善的操作体验。
2 系统开发环境和架构
本文所开发的 Unix服务器管理系统的核心功能是实时监控Unix服务器的资源占用状况,因此和Unix服务器建立快速、稳定的数据交互尤为重要。笔者尝试过在windows操作系统下获取Unix服务器数据,延时很大且稳定性较差。因此,笔者选用Unix分支的Ubuntu[3-5]操作系统作为开发平台,可移植性很强的 Python[6]作为开发语言,用 pyqt4[7-8]完成图形界面设计,用 mysql数据库[9]进行数据管理。系统层次架构如图1所示。
3 系统模块设计
图1 系统层次架构图Fig.1 System hierarchy diagram
系统采用模块化的设计方式,主要后台功能模块分为服务器数据获取及显示模块、告警模块、配置模块、日志查询模块和远程维护模块。前台主界面分为服务器资源占用状态显示和告警信息显示、维护菜单三个部分。系统模块关系如图2所示。服务器资源监控数据、告警日志、系统操作日志均保存在 mysql数据库中。服务器资源占用状态包括CPU占用率、内存占用率、硬盘占用率、SWAP缓冲空间占用、网络端口状态、进程资源占用状态。维护菜单包括监控配置、系统日志查询、历史数据查询、历史曲线绘制和远程维护菜单。
图2 系统模块关系图Fig.2 System module relation diagram
4 系统功能实现
上文描述了系统的设计架构和模块关系,下面进一步对关键功能模块的实现方法加以说明。
4.1 服务器资源占用数据获取
图3给出了Unix服务器资源占用数据获取的流程。用户在开始服务器监控之前,需要设置服务器的IP地址、远程登录用户名、登录密码、以及标识符。当开启监控功能之后,系统从数据库中取出以上数据,按照IP地址建立telnet连接[10-11],连接成功后输入用户名和密码,将登录后的标识符与设定标识符进行对比,对比一致后进入数据获取步骤,定时向Unix服务器发送资源监控指令,获取回显,然后将监控结果发送给状态显示模块和告警模块处理,并存入数据库。
图3 服务器资源占用数据获取流程Fig.3 The process of get data from server
本系统获取的服务器数据包括:内存占用率、CPU占用率、硬盘占用率、SWAP缓冲区占用、网络端口收发状态、进程资源占用状态。以监控对象为Unix分支Solaris5.8操作系统的服务器为例,不同资源的监控指令见表1所示。
表1 Unix服务器资源监控指令Tab.1 Unix server resource monitoring instruction
4.2 服务器资源告警
服务器资源告警模块对数据获取模块获取的数据进行计算处理,并产生告警。用户在设置监控对象后,系统会将默认告警阈值保存在数据库中,用户可随时配置为自定义阈值。如表2所示,内存、CPU、硬盘占用、单个进程 cpu和内存占用的告警产生,都是通过计算百分比占用率,并和告警阈值比较后产生。Swap缓冲区占用则直接比较实际数值与告警阈值的大小。网络端口状态告警计算则比较特殊,通过netstat指令[12]获取到的各个网口的累积发送和接收数据量是持续增长的数值,无法和固定阈值比较来产生告警。因此系统采用累积发送数据增长率和接收数据增长率的稳定度来判断网口状态。以一个网口为例,netstat指令观察到的当前接收数据量为rx,系统从数据库取当前时间往前的20组数据,依次为 rx1,rx2….rx20,然后依次取差值rx2-rx1,rx3-rx2…rx20-rx19,一共19个数据增长量,最后计算这19个数据的方差[13-14],即可反映出增长率的稳定程度。将方差与告警阈值做对比,大于阈值则产生告警。经多次测试,在网口数据量急剧增大、急剧减少、通信中断的情况下都可以产生有效告警。
表2 资源告警判断机制Tab.2 Resource alarm judgment mechanism
4.3 服务器历史曲线绘制
系统为方便用户直观的观察到服务器运行状态的变化过程,提供了历史曲线绘制功能。用户点击菜单后,选择起止时间、监控对象和项目,系统从数据库中查询出满足条件的数据,按照时间排序,然后将开始时间作为 x轴的起点,截止时间作为 x轴的终点,该段时间内的最大值取 1.1倍作为 y轴的最高点,最小值的0.9倍作为y轴的零点,进而每一条数据的(时间,数值)确定一个点,最后将这些点连线生成历史曲线。如图4所示。
4.4 服务器远程维护
考虑到实际应用中unix服务器位置可能比较分散,为方便运维人员进行管理,本系统提供了简单的远程维护功能[15-16],包括远程关机、远程重启、远程杀进程。因为Unix操作系统只有root用户才有关机和重启的权限,所以必须在用户设置了超级用户 root的登录密码并验证通过后方可执行这些功能。表3给出了这几项远程维护功能的执行流程和指令,其中远程关机和远程重启在下拉菜单中选择服务器后可一键操作,而远程杀进程在选择服务器后还需选择待杀的进程方可执行。
图4 服务器历史曲线绘制流程Fig.4 The process of history curve drawing
表3 远程维护功能执行流程Tab.3 The process of remote maintenance
5 结论
Unix操作系统在服务器上的应用非常广泛,如何利用Unix系统的特点对服务器进行管理和优化[17-18]是一个长远且深入的课题。笔者从自己的一点浅薄工作经验出发,基于Ubuntu开发了一套以监控Unix服务器资源占用为主要功能的管理系统,该系统还有很多不完善之处,谨将开发思路在文中介绍,希望对有志于类似课题的广大同行有所帮助和启发。笔者经验所限,难免有疏漏之处,欢迎广大同行批评指正。
[1] 刘日升, 孙玉方. UNIX操作系统分析报告[J]. 计算机研究与发展, 1982(9): 1-60+65.
[2] 唐川. UNIX系统性能监控简述及shell系统资源统计程序[J]. 科学咨询(决策管理), 2009(4): 39-40.
[3] 邵长磊. Linux操作系统简介[J]. 农业图书情报学刊,2008(12): 55-57.
[4] Li Zhao, Zhang Yong.A Multicast Routing Design and Linux implementation in Ad Hoc Network[J]. The Journal of New Industrialization, 2011, 1(11): 1-10.
[5] Wang Lixin, Zhang Yong, Dai Chao.Design & Implementation of Cognitive Ad Hoc Network Testbed under Linux[J].The Journal of New Industrialization, 2011, 1(10): 96-102.
[6] Tony Jenkins. The first language – a case for Python?[J].ITALICS, 2004, 3(2).
[7] 肖文鹏. 用PyQt进行Python下的GUI开发[J]. 中文信息,2002(7): 73-75.
[8] 何建仓, 侯泽民. 嵌入式Qt环境下绘图软件的设计与实现[J]. 软件, 2014, 35(5): 45-47.
[9] B. Douglas Blansit. The Basics of Relational Databases Using MySQL[J]. Journal of Electronic Resources in Medical Libraries, 2006, 3(3).
[10] 卢爱卿, 张会勇, 赵征. Telnet协议的实现原理及应用[J].计算机工程, 2002(11): 268-269+280.
[11] 马玉春, 汪文彬, 李应勇. 基于TCP客户机的计算机监控系统测试软件的设计[J]. 软件, 2014, 35(5): 1-3, 12.
[12] Anonymous. NETSTAT OPTIONS AND SWITCHES[J].Biomedical Instrumentation & Technology, 2012, 46(5).
[13] 杨小勇. 方差分析法浅析——单因素的方差分析[J]. 实验科学与技术, 2013, 11(1): 41-43.
[14] 王建政, 王辉, 范作娥. 基于ALLAN方差的MEMS随机误差项辨识[J]. 软件, 2013, 34(2): 75-78.
[15] 孙开云. UNIX/Linux远程管理—字符篇[J]. 微电脑世界,2010(01): 93-95.
[16] 马培, 翟高寿. 面向硬件瞬时故障的Linux设备驱动敏感代码的自动分析与检测[J]. 软件, 2015, 36(12): 09-15.
[17] DONG Qingzhou, XU Mingwei, YANG Yuan.An Implementation of Identity-Locator Separation Mapping Table in the Linux Kernel[J]. The Journal of New Industrialization,2012, 2(2): 46-51.
[18] 王鲲. 计算机系统性能评测与优化[A]. 河南省通信学会.河南省通信学会2005年学术年会论文集[C]. 河南省通信学会, 2005: 16.