Python实现Linux服务器性能监控(利用proc)

设计内容:

1.使用Python 脚本读取/proc 目录中的主要文件实现对 Linux 服务器的监控(比如网速)
2.理解/proc目录或文件的意义
3.掌握python编程语言对文本中字符串的处理
4.掌握python可视化技术,最后将监控结果可视化展示
5.设计功能:(1)ubuntu下安装spyder3环境,apt install spyder3;(2)打开spyder3,使用 Python 脚本读取/proc 目录中的主要文件数据;(3)利用socket通信技术将读取数据以UPD形式发送给远端地址PC;(4)监控端PC在pycharm环境下利用Python中的matplotlib包实现数据可视化;(5)将可视化结果上传至web网页,实现远程web监控(方法不限),远程在局域网不同pc上即可。

第1章 绪论

1.1 Linux的发展历史
Unix是较早被广泛使用的计算机操作系统之一,它的第一版于1969年由Ken Thompson在AT&T贝尔实验室实现,1973年Ken Thompson与Dennis Ritchie用C语言重写了Unix的第三版内核。
Linux操作系统的诞生、发展和成长过程始终依赖着五个重要支柱:UNIX 操作系统、MINIX 操作系统、GNU计划、POSIX 标准和Internet 网络。
1984年,Andrew S.Tanenbaum开发了用于教学的UNIX系统,命名为Mininx。
1989年,Andrew S.Tanenbaum将Minix系统运行于x86的PC平台。
1990年,芬兰赫尔辛基大学学生Linux Torvalds首次接触Minix系统。
1991年,Linux Torvalds开始在Minix上编写各种驱动程序等操作系统内核组件。
1991年年底,Linux Torvalds公开了Linux内核源码0.02版,此版本仅仅是部分代码。
1993年,Linux 1.0版本发行,Linux转向GPL版本协议。
1994年,Linux的第一个商业发行版Slackware问世。
1996年,美国国家标准技术局的计算机系统实验室确认Linux版本1.2.13符合POSIX标准。
1999年,Linux的简体中文发行版问世。
2000年以后,Linux系统日趋成熟,涌现出大量基于Linux服务器平台的应用,并且广泛应用于基于ARM技术的嵌入式系统中。
1.2Linux的应用现状
1.2.1平台为根,应用为王
应用软件的匮乏虽然在近年来得到了很大的缓解,但是还远没有达到用户所预期的程度。在之前的几年当中,Linux发行商已经证明了他们改进操作系统产品的决心和能力,而在未来几年中,应用软件方面的成长将成为决定Linux成败的核心要素之一。很多国内的Linux厂商,已经将研发和宣传的重点从Linux操作系统向周边的各种应用软件转移,应该说及时的把握形式和更新策略,将可能为中国的Linux产品带来很多竞争上的优势。
1.2.2走向用户
在Linux平台下,办公套件和各种基于互联网的工具已经发展得比较成熟了,下一波可能获得突破的产品应该是图形图像处理、音视频处理以及网页、动画、工业制图等设计类软件。对于个人用户群体来说,大面积的Linux系统应用还需要有一段时间的持续发展。尽管完全转向使用Linux操作系统的用户始终在不断增长,但是这个用户数量始终没有达到突破所需要的临界值。在超过10%~20%的市场占有率时,各种潜在的发展支持以及用户间的带动作用将极大的加快Linux的成长速度。目前互联网特有的口儿相传效应正在很大程度上从专业用户群体发展至普通用户群体,相信在未来的几年中,Linux的发展速度都会呈现出上升的趋势。
1.3Linux各版本的特色和应用领域
Linux发行版通常包含了包括桌面环境、办公套件、媒体播放器、数据库等应用软件。
1.3.1Redhat
包括RHEL、Fedora Core、CentOS。Redhat应该说是在国内使用人群最多的Linux版本。这个版本的特点是使用人群数量大,资料多,如果你有什么不明白的地方,很容易找到人来问,而且网上的一般Linux教程都是以Redhat为例来讲解的。Redhat系列的包管理方式采用的是基于RPM包的YUM包管理方式,包分发方式是编译好的二进制文件。稳定性方面RHEL和CentOS的稳定性非常好,适合于服务器使用,但是Fedora Core的稳定性较差,最好只用于桌面应用。
1.3.2Debian
Debian是社区类Linux的典范,是迄今为止最遵循GNU规范的Linux系统。Debian最早由Ian Murdock于1993年创建,分为三个版本分支:stable,testing和unstable。其中,unstable为最新的测试版本,其中包括最新的软件包,但是也有相对较多的bug,适合桌面用户。testing的版本都经过unstable中的测试,相对较为稳定,也支持了不少新技术。而stable一般只用于服务器,上面的软件包大部分都比较过时,但是稳定和安全性都非常的高。Debian最具特色的是apt-get/dpkg包管理方式,其实Redhat的YUM也是在模仿Debian的APT方式。
1.3.3Ubuntu
目前使用最多的Linux,简单方便,有KDE和GNOME等视窗界面可供选择,拥有强大的apt-get软件管理程序。Ubuntu严格来说不能算一个独立的发行版本,Ubuntu是基于Debian的unstable版本加强而来, Ubuntu就是一个拥有Debian所有的优点,以及自己所加强的优点的近乎完美的 Linux桌面系统。根据选择的桌面系统不同,有三个版本可供选择,基于Gnome的Ubuntu,基于KDE的Kubuntu以及基于Xfc的Xubuntu。特点是界面非常友好,容易上手,对硬件的支持非常全面,是最适合做桌面系统的Linux发行版本。
1.3.4Gentoo
Gentoo是Linux世界最年轻的发行版本。Gentoo最初由Daniel Robbins创建,首个稳定版本发布于2002年。由于开发者对FreeBSD的熟识,所以Gentoo拥有媲美FreeBSD的广受美誉的ports系统——Portage包管理系统。不同于APT和YUM等二进制文件分发的包管理系统,Portage是基于源代码分发的,必须编译后才能运行,对于大型软件而言比较慢,不过正因为所有软件都是在本地机器编译的,在经过各种定制的编译参数优化后,能将机器的硬件性能发挥到极致。Gentoo是所有Linux发行版本里安装最复杂的,但是又是安装完成后最便于管理的版本,也是在相同硬件环境下运行最快的版本。
1.3.5FreeBSD
FreeBSD拥有两个分支:stable和current。顾名思义,stable是稳定版,而 current则是添加了新技术的测试版。FreeBSD采用Ports包管理系统,与Gentoo类似,基于源代码分发,必须在本地机器编后后才能运行,但是Ports系统没有Portage系统使用简便,使用起来稍微复杂一些。FreeBSD的最大特点就是稳定和高效,是作为服务器操作系统的最佳选择,但对硬件的支持没有Linux完备,所以并不适合作为桌面系统。
1.3.6OpenSUSE
在欧洲非常流行的一个Linux,由Novell公司发放,号称是世界上最华丽的操作系统,独家开发的软件管理程序zypper||yast得到了许多用户的赞美,和ubuntu一样,支持kde和gnome,xface等桌面,桌面特效比较丰富,缺点是KDE虽然华丽多彩,但比较不 稳定。新手用这个也很容易上手。
1.3.7服务器领域
(1)Linux 在服务器领域的应用是其重要分支。
(2)Linux 免费、稳定、高效等特点在这里得到了很好的体现。
(3)早期因为维护、运行等原因同样受到了很大的限制。
(4)近些年来 Linux 服务器市场得到了飞速的提升,尤其在一些高端领域尤为广泛。
1.3.8嵌入式领域
(1)近些年来 Linux 在嵌入式领域的应用得到了飞速的提高。
(2)Linux 运行稳定、对网络的良好支持性、低成本,且可以根据需要进行软件裁剪,内核最小可以达到几百 KB 等特点,使其近些年来在嵌入式领域的应用得到非常大的提高。
(3)主要应用:机顶盒、数字电视、网络电话、程控交换机、手机、PDA、等都是其应用领域,得到了 Google、三星、摩托罗拉、NEC 等公司的大力推广。
1.3.9个人桌面领域
(1)此领域是传统 Linux 应用最薄弱的环节。
(2)传统 Linux 由于界面简单、操作复杂、应用软件少的缺点,一直被 Windows 所压制。
(3)近些年来随着 Ubuntu、Fedora 等优秀桌面环境的兴起,同时各大硬件厂商对其支持的加大,Linux 在个人桌面领域的占有率在逐渐的提高。、

第2章 Ubuntu介绍

2.1Ubuntu总体概述
Ubuntu Linux是由南非人马克·沙特尔沃思(Mark Shuttleworth)创办的基于Debian Linux的操作系统,于2004年10月公布Ubuntu的第一个版本。Ubuntu适用于笔记本电脑、桌面电脑和服务器,特别是为桌面用户提供尽善尽美的使用体验。Ubuntu几乎包含了所有常用的应用软件:文字处理、电子邮件、软件开发工具和Web服务等。用户下载、使用、分享Ubuntu系统,以及获得技术支持与服务,无需支付任何许可费用。
Ubuntu提供了一个健壮、功能丰富的计算环境,既适合家庭使用又适用于商业环境。Ubuntu社区承诺每6个月发布一个新版本,以提供最新最强大的软件。
2.2Ubuntu功能介绍
2.2.1系统管理
Ubuntu 所有系统相关的任务均需使用 Sudo指令是它的一大特色,这种方式比传统的以系统管理员账号进行管理工作的方式更为安全,此为Linux、Unix系统的基本思维之一。Windows在较新的版本内也引入了类似的UAC机制,但用户数量不多。同时,Ubuntu也相当注重系统的易用性,标准安装完成后就可以立即投入使用,简单地说,就是安装完成以后,用户无需再费神安装浏览器、Office套装程序、多媒体播放程序等常用软件,一般也无需下载安装网卡、声卡等硬件设备的驱动;Ubuntu的开发者与 Debian和GNOME开源社区合作密切,其各个正式版本的桌面环境均采用GNOME的最新版本,通常会紧随GNOME项目的进展而及时更新(同时,也提供基于 KDE、XFCE 等桌面环境的派生版本)。Ubuntu与Debian使用相同的deb软件包格式,可以安装绝大多数为Debian编译的软件包,虽然不能保证完全兼容,但大多数情况是通用的。
2.2.2安装设置
一直以来,Ubuntu均支持主流的i386、AMD64与PowerPC平台,自2006年6月,Ubuntu新增了对升阳的UltraSPARC与UltraSPARC T1平台的支持。
Ubuntu主要是透过Live CD进行安装。Ubuntu操作系统可以直接从CD启动,允许用户测试硬件兼容性和驱动程序支持。CD中带有一个安装器,让用户可以将系统永久地装在计算机上。所有版本的CD镜像都可以在 Ubuntu 网站下载。要透过CD安装的话至少要有256MB内存。可以将CD镜像烧录到CD中,也可以使用一些工具将其制作成USB启动盘进行测试或安装。
Live CD中还带有一个Wubi工具,可以在不改变分区的情况下安装Ubuntu,不过性能稍有一些损失。新版ubuntu支持在Windows中进行在线安装。

第3章 Python介绍

3.1Python总体概述
Python是一种跨平台的计算机程序设计语言,是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越多被用于独立的、大型项目的开发。
3.2Python功能介绍
3.2.1系统编程
提供API,能方便进行系统维护和管理,Linux下标志性语言之一,是很多系统管理员理想的编程工具。
3.2.2图形处理
有PIL、Tkinter等图形库支持,能方便进行图形处理。
3.2.3数学处理
NumPy扩展提供大量与许多标准数学库的接口。
3.2.4文本处理
python提供的re模块能支持正则表达式,还提供SGML,XML分析模块,许多程序员利用python进行XML程序的开发。
3.2.5数据库编程
程序员可通过遵循Python DB-API规范的模块与Microsoft SQL Server,Oracle,Sybase,DB2,MySQL、SQLite等数据库通信。python自带有一个Gadfly模块,提供了一个完整的SQL环境。
3.2.6网络编程
提供丰富的模块支持sockets编程,能方便快速地开发分布式应用程序。很多大规模软件开发计划例如Zope,Mnet 及BitTorrent. Google都在广泛地使用它。
3.2.7Web编程
应用的开发语言,支持最新的XML技术。
3.2.8多媒体应用
Python的PyOpenGL模块封装了“OpenGL应用程序编程接口”,能进行二维和三维图像处理。PyGame模块可用于编写游戏软件。
3.2.9pymo引擎
PYMO全称为python memories off,是一款运行于Symbian S60V3,Symbian3,S60V5, Symbian3, Android系统上的AVG游戏引擎。因其基于python2.0平台开发,并且适用于创建秋之回忆风格的AVG游戏,故命名为PYMO。
3.2.10黑客编程
python有一个hack的库,内置了你熟悉的或不熟悉的函数,但是缺少成就感。

第4章 实践内容

4.1实践要求
1.Ubuntu下安装spyder3环境,apt install spyder3
2.打开spyder3,使用 Python 脚本读取/proc 目录中的主要文件数据(上下行网速)
3.利用socket通信技术将读取数据以UPD形式发送给远端地址PC
4.监控端PC在pycharm环境下利用Python中的matplotlib包实现数据可视化(双曲线,柱状图皆可)。
5.将可视化结果上传至web网页,实现远程web监控(方法不限),远程在局域网不同pc上即可。
6.选作项:远端手机端实现APP上监控(利用Android Studio实现)app端监控
7.选作项:设置门限触发报警,把报警结果通过微信或钉钉或邮件形式上报给管理员
4.2实践要求1,实践方法
1.安装VMware Workstation,安装在默认路径,并且在安装时需把杀毒软件关闭,避免虚拟网络适配器无法安装。

图4.1 安装VM过程
图4.2 虚拟网络适配器
4.3实践要求2,实践方法
1.在Ubuntu下打开spyder3环境,使用Python脚本读取/proc目录中的主要文件数据。
图4.5 打开文件
2.安装Python与Pycharm。
图4.6 安装Pycharm
4.4实践要求3,实践方法
1.将Ubuntu与Pycharm连接起来。
图4.7 服务端地址和端口
图4.8 客户端输入的服务端地址和端口
2.在Ubuntu下将需要传输的数据整合成字符串输出到Pycharm。
图4.9 服务端输出字符串
图4.10 客户端接收字符串并转化
4.5实践要求4,实践方法
在pycharm环境下安装matplotlib包,实现数据可视化。
图4.11 运行服务端代码
图4.12 运行客户端代码
4.6实践要求5,实践方法
1.在IIS管理器设置一个可运行的局域网,网站-添加网站-编辑网站“绑定”-编辑端口和IP地址-应用程序池-进程模型-标识“NetWorkService”。

图4.13 设置局域网
2.将图片地址改为局域网存放地址。
图4.14 图片存放地址
3.用记事本打开iisstart.htm,设置其中的图片为NET_Used.png,每4秒刷新一次网页。

图4.14 设置iisstart.htm
4.网页运行设置的局域网的IP地址。
图4.15 网页运行

第5章 源程序解释

5.1服务器Ubuntu部分
import time
import sys
import socket
if len(sys.argv) > 1:
INTERFACE = sys.argv[1]
else:
INTERFACE = ‘ens33’
STATS = []
print (‘Interface:’,INTERFACE)
def rx():
ifstat = open(’/proc/net/dev’).readlines()
for interface in ifstat:
if INTERFACE in interface:
stat = float(interface.split()[1])
STATS[0:] = [stat]
def tx():
ifstat = open(’/proc/net/dev’).readlines()
for interface in ifstat:
if INTERFACE in interface:
stat = float(interface.split()[9])
STATS[1:] = [stat]
print (‘In Out’)
rx()
tx()
if name == ‘main’:
address = (‘192.168.223.128’, 31500) # 服务端地址和端口
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) #域,类型:面向流对应TCP,数据报对应UDP
s.bind(address) # 绑定服务端地址和端口
print (‘Waiting for connection…’)
while True:
time.sleep(1)
rxstat_o = list(STATS)
rx()
tx()
RX = float(STATS[0])
RX_O = rxstat_o[0]
TX = float(STATS[1])
TX_O = rxstat_o[1]
RX_RATE = round((RX - RX_O)/1024,3)
TX_RATE = round((TX - TX_O)/1024,3)
print (RX_RATE ,‘KB ‘,TX_RATE ,‘KB’)
data, addr = s.recvfrom(1024) # 返回数据和接入连接的(客户端)地址
data = data.decode()
if not data:
break
print(’[Received]’, data)
send = (str(RX_RATE)+’,’+str(TX_RATE)).encode() #shuchuzifuchuan
s.sendto(send, addr) # UDP 是无状态连接,所以每次连接都需要给出目的地址
time.sleep(1)
s.close()
5.2客户端Python部分
from pylab import *
import socket
import datetime
mpl.rcParams[‘font.sans-serif’] = [‘SimHei’] #画图中支持黑体字体
address = (‘192.168.223.128’, 31500) # 服务端地址和端口 与Ubuntu连接
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) #域,AF_INET(Internet 网络,常用)/类型:面向流对应TCP,数据报对应UDP
t = [] # 创建时间空列表
up = [] # 创建net空列表
down = [] # 创建net空列表2
plt.figure(figsize=(8, 4)) ##指定figure的宽和高,单位为英寸
k = 1
while True:
trigger = ‘connection ok’ # input(‘Input: ‘)
s.sendto(trigger.encode(), address) #发送到虚拟机
send, addr = s.recvfrom(1024) # 返回数据和接连接的(服务端)地址 接收
send = send.decode() #转码,转为字符串
a=send.split(’,’) #逗号为分割两个数据的分割线
b=float(a[0]) #字符串
d=float(a[1]) #字符串
print(’[NET_Used]’,b) #转换成百分比
print(’[NET_Used]’, d) # 转换成百分比
t.append(datetime.datetime.now().strftime(’%I:%M:%S’)) # 指定时间格式为:时+分+秒,并append追加到列表t[]末尾
up.append(b)
down.append(d)
plt.ylim(0, 20) # 限定纵轴的范围
y = int(k / 8) #横轴的间隔
if y >= 1:
plt.plot(t, up,marker=’+’, mec=‘y’, mfc=‘w’, label=u’RX’) # 画t和h1的折线图
plt.plot(t, down, marker=’+’, mec=‘y’, mfc=‘w’, label=u’TX’) # 画t和h1的折线图 第二条
plt.xticks(t[::y], rotation=45) # 把x轴文字弄成斜45度,排布不密集
else:
plt.plot(t, up, marker=’+’, mec=‘y’, mfc=‘w’, label=u’上行’) # 画t和h1的折线图
plt.plot(t, down, marker=’+’, mec=‘y’, mfc=‘w’, label=u’下行’) # 画t和h1的折线图 第二条
plt.xticks(t, rotation=45) #把x轴文字弄成斜45度
plt.legend() #让图例生效
plt.margins(0) #设置图标格式
plt.xlabel(“Time”) #添加X轴标签
plt.ylabel(“NET_Used”) #添加Y轴标签
plt.title(“Linux流量监控-”+str(len(t))+“次数据”) #添加title
k=k+1
plt.savefig(“F:\http\NET_Used.png”) #将画图的图片保存到默认路径中 网页地址http://192.168.43.194:8081/(同一局域网内访问)
plt.pause(1) #暂停12秒
plt.clf() # 清除当前figure所有axes,但是不关闭这个window,所以能继续复用于其它的plot。
s.close()

第6章 课程设计日志

6.1第一天
第一天没有设计思路,当老师向我们解释题目并阐明思路后,我们开始理解题目的意思,并知道如何搭建实验环境。搭建实验环境的过程中出现了各种各样的错误,譬如:网络适配器中没有VMware Workstatio的虚拟网络适配器,导致Ubuntu与Python无法实现连接。出现该问题的原因是在安装VMware Workstation时没有使用默认路径,而且没有关闭杀毒软件,导致虚拟网络适配器被阻挡甚至是被删除。
6.2第二天
第二天在数据转化字符串的地方出现了问题,多次转化都没有实现双曲线,Python下的运行只有下行流量速度的曲线,导致略微心浮气躁,在不断的查找资料过程中发现,原因在于我在Ubuntu下没有将数据整合在一起,将其打包发送到Python中,而在Python下又没有将字符串分开输出,因此没有实现上行流量速度的曲线。
图6.1 Ubuntu下打包字符串
图6.2 分隔字符串并输出
6.3第三天
第三天在将可视化结果上传至Web网页过程中出现了问题,刚开始的打算是使用http://127.0.0.1来将可视化结果上传,但是由于电脑配置方面的问题,无法在iisstart.htm文件中使用记事本修改可视化的图片并进行刷新的代码。最后经过多份资料的查找及学习,发现了配置一个简单的局域网的方法,经过多次试验终于使得可视化结果能上传至网页,并且在同一局域网下的不同PC机都能访问该网页的可视化结果。
6.4第四天
撰写课程设计报告时没有思路,不清楚首先该写什么,于是再次找到老师给予的文档来编排格式、内容,报告中有的内容或许没有截图,原因是忘记截图,而再做一次担忧会出现无法预估的错误导致后面内容的撰写也无法完成,以至于某些地方可能没有截图。

第7章 佐证材料
7.1Ubuntu运行结果
在这里插入图片描述

图7.1 Ubuntu运行
7.2可视化结果

在这里插入图片描述

图7.2 可视化
7.3Web网页浏览结果
在这里插入图片描述

图7.3 网页浏览

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值