前言:
如今兄弟们对“python监控linux”大约比较着重,同学们都想要学习一些“python监控linux”的相关内容。那么小编同时在网摘上汇集了一些关于“python监控linux””的相关知识,希望咱们能喜欢,咱们一起来了解一下吧!Python的基础是非常重要的。基础是处理一切问题的基石。
这是小编准备的python基础学习资料,关注,转发,私信小编“01”即可免费领取!
-1-
负载情况
如果查看Linux操作系统的负载情况,我们用Python实现的原理是通过查看文件`/proc/loadavg` 的内容去实现。
我们先来看看这个文件的内容是什么:
#!/usr/bin/env python3loadavg = {}def load_stat(): f = open("/proc/loadavg") con = f.read().split() f.close() loadavg['lavg_1']=con[0] # 1分钟负载 loadavg['lavg_5']=con[1] # 5分钟负载 loadavg['lavg_15']=con[2] #15分钟负载 return loadavgload_stat()print(loadavg)#输出load1的值print("load1:"+loadavg["lavg_1"])
具体代码实现如下:
#!/usr/bin/env python3loadavg = {}def load_stat(): f = open("/proc/loadavg") con = f.read().split() f.close() loadavg['lavg_1']=con[0] # 1分钟负载 loadavg['lavg_5']=con[1] # 5分钟负载 loadavg['lavg_15']=con[2] #15分钟负载 return loadavgload_stat()print(loadavg)#输出load1的值print("load1:"+loadavg["lavg_1"])
解题思路:
为了能够读取 `/proc/loadavg` 里的文件,我们可以定义一个函数 load_stat()函数 用来打开文件和关闭。然后读取里面的文件存到一个数据结构里,当然数据结构你可以采用List,也可以采用Dict,笔者用Dict去存放这些内容。
#!/usr/bin/env python3f = open("/proc/loadavg")con = f.read()#con = f.read().split() # 调试代码print(con)f.close()
我们使用split函数用于对字符串数据进行切片然后放到一个列表里面去。最后我们把列表对应的索引的值又存放到一个新的字典里去。如果要存放在字典。所以我们必须在开头定义好一个空的字典结构。
最后执行的结果如下:
$ python3 load.py {'lavg_1': '0.00', 'lavg_5': '0.01', 'lavg_15': '0.05'}load1:0.00
最后我们输出的是一个字典,那么我们要取负载情况就方便多了
-2-
内存使用情况
计算内存的利用率原理是需要读取的是/proc/meminfo文件,该文件的结构比较清晰,不需要额外的介绍,需要知道的是内存的使用总量为used = total - free - buffers - cached。
with open("/proc/meminfo") as meminfo: for i in meminfo: if i.startswith("MemTotal"): total_mem = i.split() # print(total_mem) total_mem = total_mem[1] continue elif i.startswith("MemAvailable"): free_mem = i.split() free_mem = free_mem[1] continue elif i.startswith("Buffers"): buff_mem = i.split() buff_mem= buff_mem[1] elif i.startswith("Cached"): cache_mem = i.split() cache_mem = cache_mem[1] break else: passprint("total_mem:"+total_mem)、# 输出可用内存# print("free_mem:"+free_mem)# 输出buffer内存# print("buff_mem:"+buff_mem)# print("cache_mem"+cache_mem)# print(type(free_mem))# used_mem = total_mem-free_mem-buff_mem-cache_memused_mem = float(total_mem)-float(free_mem)-float(buff_mem)-float(cache_mem)print(used_mem)# 使用内存print(used_mem)#计算内存使用率res = used_mem/float(total_mem)# 输出内存使用率值print(res)
思路解析:
上面的代码首先是去打开 文件`/proc/meminfo`,然后使用for循环遍历文件里的内容。使用的是字符串的`startswith` 方法。得到的内容使用字符串的`split` 方法切割形成一个列表。
Python startswith() 方法用于检查字符串是否是以指定子字符串开头,如果是则返回 True,否则返回 False。如果参数 beg 和 end 指定值,则在指定范围内检查。
其中的列表内容如下:
['MemTotal:', '1863224', 'kB']
从列表内容来看,索引为1的值1863224,就是MemTotal(总内存的数值)。
然后一系列的多条件的if else 语句来分别得到,total_mem,buff_mem,free_mem,cache_mem的值并赋值给变量。当把所有的值取到之后使用break 语句退出循环。
代码`used_mem = float(total_mem)-float(free_mem)-float(buff_mem)-float(cache_mem)`,因为我们得到的total_mem 等内存是字符串没办法进行数学运算,所以需要转成浮点数进行数学运算。
最后使用除法`res = used_mem/float(total_mem)` 来计算内存使用率。
-3-
获取网卡信息
为了能获取网卡的流量我们使用 `psutil` 会更加方便,官方文档:
psutil是个跨平台库,能够轻松实现获取系统运行的进程和系统利用率,包括CPU、内存、磁盘、网络等信息。之前的查看Linux系统的负载和内存使用情况实现都可以用`psutil` 库去实现。
>>> psutil.virtual_memory()svmem(total=8589934592, available=2866520064, percent=66.6, used=7201386496, free=216178688, active=3342192640, inactive=2650341376, wired=1208852480)>>> psutil.swap_memory()sswap(total=1073741824, used=150732800, free=923009024, percent=14.0, sin=10705981440, sout=40353792)
-4-
CPU使用情况
查看cpu的使用情况我们使用`psutil` 更加方便。
>>> psutil.virtual_memory()svmem(total=8589934592, available=2866520064, percent=66.6, used=7201386496, free=216178688, active=3342192640, inactive=2650341376, wired=1208852480)>>> psutil.swap_memory()sswap(total=1073741824, used=150732800, free=923009024, percent=14.0, sin=10705981440, sout=40353792)
以上的代码能正常的去获取cpu的负载情况,cpu状态和信息,内存信息,网络信息和流量等。
(1)我们再拓展一下使用`psutil` 库去实现 之前的cpu是使用情况。具体的实现如下:
使用psutil获取物理内存和交换内存信息,分别使用:
>>> psutil.virtual_memory()svmem(total=8589934592, available=2866520064, percent=66.6, used=7201386496, free=216178688, active=3342192640, inactive=2650341376, wired=1208852480)>>> psutil.swap_memory()sswap(total=1073741824, used=150732800, free=923009024, percent=14.0, sin=10705981440, sout=40353792)
返回的是字节为单位的整数,可以看到,总内存大小是8589934592 = 8 GB,已用7201386496 = 6.7 GB,使用了66.6%。而交换区大小是1073741824 = 1 GB
(2)我们要获取系统的负载情况,我们还可以使用os模块去实现具体代码如下, 下面的代码我们是通过ipython进行交互的,在linux命令行交互式调试过程中。具体的Ipython的安装方法为`pip3 install ipython`。
In [12]: import os In [13]: os.getloadavg() Out[13]: (0.09, 0.27, 0.29)
标签: #python监控linux