高正 徐浩 余曼
摘要:本文介紹了一種基于Python的服務(wù)器監(jiān)測系統(tǒng)的設(shè)計,系統(tǒng)部署在需要監(jiān)測的服務(wù)器上能夠?qū)崟r監(jiān)測服務(wù)器的CPU、內(nèi)存、磁盤空間。每天定時(可人工設(shè)置)自動發(fā)郵件報告服務(wù)器狀態(tài)。當CPU一直處于異常忙碌狀態(tài)時或者磁盤剩余空間少于一定量時,系統(tǒng)還會發(fā)郵件進行警報。利用Python語言開源、簡潔等優(yōu)勢,使得該系統(tǒng)具有可移植性強、部署方便等優(yōu)點。
關(guān)鍵詞:Python;監(jiān)測;設(shè)計
中圖分類號:TP311 文獻標識碼:A 文章編號:1009-3044(2017)02-0020-02
Design of Server Monitoring System Based on Python
GAO Zheng, XU Hao, YU Man
(The Eye Hospital of Wenzhou Medical University, Wenzhou 325000, China)
Abstract: This paper introduces the design of a server monitoring system based on Python.The system can monitor the server's CPU, memory and disk space.The System can (can be manually set) automatically send e-mail report server status every day at regular time.When the CPU has been in a state of abnormal busy or disk space is low, the system will send e-mail to warn the administrator.Using the advantages of Python language, such as open source, concise and so on, the system has the advantages of portability, easy deployment and so on.
Key words: python; Monitor; design
1 概述
隨著改革開放的不斷深化以及國家醫(yī)療衛(wèi)生事業(yè)的不斷進步,國家對醫(yī)院的信息化建設(shè)也給予了很大的重視和大力的支持。在計算機信息技術(shù)已成為人們正常工作生活的重要組成部分的今天,信息化建設(shè)對于醫(yī)院的管理、效益的提升和競爭力的提高都有重要意義[1-3]。而醫(yī)院信息化的發(fā)展,必然導(dǎo)致醫(yī)院的計算機硬件和軟件在數(shù)量上越來越多,在結(jié)構(gòu)上越來越復(fù)雜。如何在信息化深入開展的前提下保證醫(yī)院服務(wù)器安全穩(wěn)定的運行,也成了醫(yī)院信息工作者的工作重點。然而市場上面監(jiān)測服務(wù)器軟件通常具有價格昂貴、配置困難、功能不符合實際需求,兼容性差等缺點。自主開發(fā)一款適合于自己服務(wù)器框架的服務(wù)器監(jiān)測系統(tǒng)也成了醫(yī)院里的需求。
常用的軟件開發(fā)語言有C++、C#、JAVA、python。由于Python語言的簡潔性、易讀性以及可擴展性,利用Python作為軟件開發(fā)的語言成為常態(tài)。 Python最大的優(yōu)勢在于能夠快速的開發(fā)軟件。本文介紹了一種基于Python的服務(wù)器監(jiān)測軟件的設(shè)計。該軟件部署方便、兼容性強,能夠有效的監(jiān)測服務(wù)器的運行狀態(tài)。
2 Python 簡述
Python是一個清晰的,面向?qū)ο蟮墓δ軓姶蟮脑O(shè)計語言,它具有解釋性和交互性兩種特點。在八十代末和九十年代初,荷蘭人Guido van Rossum設(shè)計出Python并領(lǐng)導(dǎo)了該語言每個版本的開發(fā)和設(shè)計。由于該語言實一種腳本語言,它的開發(fā)代碼效率非常高。又因為它的開源性,在互聯(lián)網(wǎng)上存在豐富而強大的第三方標準庫,使得編程簡便而快速。在國內(nèi)外軟件行業(yè)得到成熟而廣泛的使用。是全球十大流行編程語言之一[4]。
Python可以輕松完成常見任務(wù),與Tcl、Ruby、Perl等動態(tài)語言功能相似。強大的垃圾回收功能能夠自動管理內(nèi)存。常用于Web開發(fā)和游戲設(shè)計應(yīng)用,同事也適合完成各種高階任務(wù)。強大的可移植性也使其能夠在幾乎所有操作系統(tǒng)中運行[5]。
3 系統(tǒng)設(shè)計
3.1系統(tǒng)運行環(huán)境要求及安裝說明
系統(tǒng)運行在Windows 7或者Windows Server 2008上面,為了使Python的程序能在windows平臺上直接運行,即要打包生成exe程序,則需要py2exe,該模塊包的使用方法如下:
如果需要把一個名為Monitor.py的腳本程序轉(zhuǎn)化成可在沒有安裝python的Windows上運行,則需要編寫專門用于Monitor.py發(fā)布的腳本MonitorPublish.py。在該腳本中,你需要在文件頭插入語句import py2exe。
MonitorPublish.py示例如下:
# MonitorPublish.py
from distutils.core import setup
import py2exe
setup(console=["Monitor.py"])
然后按下面的方法運行MonitorPublish.py:
python MonitorPublish.py py2exe
通過上面這條命令,能在該目錄下產(chǎn)生創(chuàng)建一個名為dist的子目錄,文件夾內(nèi)包含了Monitor.exe,python24.dll,library.zip等文件。
通過Monitor.exe便能啟動服務(wù)器監(jiān)測程序。在使用py2exe時,程序中不要試圖用from...import語句,這樣py2exe不會對該庫進行識別,這樣打包后將找不到對應(yīng)的庫而產(chǎn)生運行錯誤。
3.2 核心功能詳述
1)監(jiān)測服務(wù)器的CPU、內(nèi)存、磁盤空間。
2)每天定時(可人工設(shè)置)自動發(fā)郵件報告服務(wù)器狀態(tài)。
3)當CPU一直處于異常忙碌狀態(tài)時,會發(fā)郵件進行警報。
4)剩余磁盤空間少于一定量,會發(fā)郵件進行警報。
程序流程圖如圖1所示:
警報核心代碼如下所示:
def sendsimplemail(emailAddr,emailpd,emailContext,emailTitle):
msg = email.mime.text.MIMEText(ip+emailContext)
msg['Subject'] = emailTitle +"--"+ str(ip)
msg['From'] = emailAddr
try:
smtp = smtplib.SMTP()
smtp.connect(r'smtp.163.com')
smtp.login(emailAddr, emailpd)
smtp.sendmail(emailAddr, [emailAddr], msg.as_string())
smtp.close()
except Exception, e:
print e
該代碼中主要負責(zé)通過郵件發(fā)送服務(wù)器的相關(guān)信息。
監(jiān)測部分主要通過第三方庫psutil,該函數(shù)庫提供接口,用來獲取信息包括當前運行的進程、系統(tǒng)CPU、內(nèi)存、磁盤等。監(jiān)測核心函數(shù)如下:
psutil.cpu_percent:獲取 CPU運行百分比
psutil.disk_partitions:獲得系統(tǒng)擁有磁盤的盤符。
psutil.disk_usage:獲得每個磁盤已經(jīng)使用的空間。
Socket.gethostbyname:獲得該服務(wù)器的IP地址。
3.3系統(tǒng)操作說明
系統(tǒng)需要在根目錄下的Config.txt里面進行配置,配置參數(shù)如下:
掃描時間 :ScanTime(s)=10
郵箱發(fā)送時間:AlarmTime(h)=08:00,14:00,19:00
按照順序?qū)Υ疟P空間的最低空間進行設(shè)置:DiskSpaceWarning=2,2
CPU占有率警報線為80%:CPUTime(10s)=80
發(fā)送郵箱設(shè)置:SendMail=***@**.com
定時時間:Alarm=14:50
4 結(jié)束語
本文開發(fā)了一款基于Python的服務(wù)器監(jiān)測系統(tǒng)。該系統(tǒng)運行時基本無需安裝其他框架、組件。由于采用郵箱報警的方式,該系統(tǒng)只需要瀏覽器無需額外的客戶端便能對各個服務(wù)器進行監(jiān)測。且由于手機能夠閱讀郵件,因此可以隨時隨地監(jiān)測服務(wù)器。未來可以對該系統(tǒng)進行拓展,對監(jiān)測的數(shù)據(jù)進行日志數(shù)據(jù)。并通過數(shù)據(jù)預(yù)測磁盤空間使用狀況,提前判斷磁盤空間耗盡的時間?;蛘咴谝慌_機器上部署,通過CS架構(gòu),由一臺服務(wù)器監(jiān)測多臺服務(wù)器。
參考文獻:
[1] 姜強. 服務(wù)器監(jiān)控系統(tǒng)服務(wù)端設(shè)計與實現(xiàn)[D]. 大連理工大學(xué), 2013.
[2] 李昊天. 應(yīng)用服務(wù)器監(jiān)控系統(tǒng)的設(shè)計與實現(xiàn)[D]. 吉林大學(xué), 2008.
[3] 朱煜. 簡單服務(wù)器監(jiān)控系統(tǒng)的設(shè)計與實現(xiàn)[J]. 山西電子技術(shù), 2016(5).
[4] 肖旻, 陳行. 基于Python語言編程特點及應(yīng)用之探討[J]. 電腦知識與技術(shù), 2014(12):8177-8178.
[5] 蔣洪磊. 基于Python的網(wǎng)管軟件技術(shù)體系設(shè)計[J]. 無線電通信技術(shù), 2015(4):87-90.