Python实现Linux操作系统负载、CPU、网络内存、监控
Python实现Linux操作系统负载、CPU、网络内存、监控
在Linux中要查看系统负载、CPU利用率、网络和内存等状况,我们要使用以下命令:
系统负载, CPU使用率-般使用top等命令揸看
内存查看,-般使用free, vmstat 等命令查看
网络流量,我们一般使用iftop等命令查看
如果用Python去实现这些参数的查看和监控,我们可用调用shell值,从而得到监控的内容,这样的话直接用shell监控就可以了,但是我们运维开发的时候,服务端要获取客户端运行状态的时候,一般会用python和golang语言编写部署在其他机器上。
如果查看Linux操作系统的负载情况,我们用Python实现的原理通过查看文件/proc/loadavg的内容去实现。
我们先查看一下文件内容
前三个数字是1,5,15分钟内的平均进程数 第四个值是正在运行的进程数分母是进程总数,最后一个是最近运行的进程ID号。
使用Python监控Linux操作系统的负载情况
编写python脚本
定义一个load_stat函数用来打开关闭文件,然后读取里面的文件存到数据结构里 split函数用于对字符串接片,然后存到列表里面,然后把列表索引值存放到新字典里面 代码如下:
loadavg = {} def load_stat(): f = open("/proc/loadavg") con = f.read().split() f.close() loadavg['lavg_1']=con[0] loadavg['lavg_5']=con[1] loadavg['lavg_15']=con[2] return loadavg load_stat() print(loadavg) print("load1:"+loadavg["lavg_1"])
为了能够读取/proc/loadavg里的文件,我们可以定义一个函数load_ stat()函数 用来打开文件和关闭。然后读取里面的文件存到一个数据结构里,当然数据结构你可以采用List,也可以采用Dict。
运行结果:
使用Python监控Linux操作系统的内存使用情况
计算内存的利用率原理是需要读取的是/proc/meminfo文件,该文件的结构比较清晰,不需要额外的介绍,需要知道的是内存的使用总量为used=total-free-buffers-cached
查看/proc/meminfo
MemTotal:表示所有可用RAM大小即内存 MemAvailable:表示可用内存数 Buffers:给文件做缓冲大小 cached:缓存,用于已打开的文件
实现代码如下:
#coding:utf-8 with open("/proc/meminfo") as meminfo: for i in meminfo: if i.startswith("MemTotal"): total_mem = i.split() 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: pass used_mem =float(total_mem)-float(free_mem)-float(buff_mem)-float(cache_mem) print(used_mem) #使用内存 res = used_mem/float(total_mem) print(res) #内存使用率
运行结果:
Python获取网卡信息
psutil是个跨平台库,能够轻松实现获取系统运行的进程和系统利用率,包括CPU、内存、磁盘、网络等信息。之前的查看Linux系统的负载和内存使用情况实现都可以用psutil 库去实现。
psutil实现:
>>> import psutil 导入库
>>> >>> psutil.net_if_addrs()['eth0'][0].address 查看eth0的IP地址 '172.26.142.43' >>> >>> psutil.net_if_addrs()['eth0'][0].netmask 子网掩码 '255.255.240.0' >>> >>> psutil.net_if_stats()['eth0'].isup 查看网卡是否开启 True >>> >>> psutil.net_if_stats()['eth0'].speed 查看网卡速率 0 >>>
使用Python监控Linux操作系统的CPU使用情况
使用psutil查看代码如下:
#coding:utf-8 #@Author:knight import psutil #检测CPU使用率 print(psutil.cpu_percent(interval=20,percpu=False)) #查看CPU的总体使用情况 print(psutil.cpu_times_percent()) #查看每个CPU的使用情况 print(psutil.cpu_times_percent(percpu=True)) #CPU的使用率 psutil.cpu_percent() #查看物理CPU的个数 print(psutil.cpu_count(logical=False))