Python实现Linux操作系统负载、CPU、网络内存、监控

来自CloudWiki
Heart讨论 | 贡献2020年8月9日 (日) 07:56的版本 Python实现Linux操作系统负载、CPU、网络内存、监控
跳转至: 导航搜索

Python实现Linux操作系统负载、CPU、网络内存、监控

在Linux中要查看系统负载、CPU利用率、网络和内存等状况,我们要使用以下命令:

系统负载, CPU使用率-般使用top等命令揸看
内存查看,-般使用free, vmstat 等命令查看
网络流量,我们一般使用iftop等命令查看

如果用Python去实现这些参数的查看和监控,我们可用调用shell值,从而得到监控的内容,这样的话直接用shell监控就可以了,但是我们运维开发的时候,服务端要获取客户端运行状态的时候,一般会用python和golang语言编写部署在其他机器上。

如果查看Linux操作系统的负载情况,我们用Python实现的原理通过查看文件/proc/loadavg的内容去实现。

我们先查看一下文件内容

2020-08-08 220429.png

前三个数字是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。

运行结果:

2020-08-09 140846.png

使用Python监控Linux操作系统的内存使用情况

计算内存的利用率原理是需要读取的是/proc/meminfo文件,该文件的结构比较清晰,不需要额外的介绍,需要知道的是内存的使用总量为used=total-free-buffers-cached

查看/proc/meminfo

2020-08-09 143233.png

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)   #内存使用率

2020-08-09 151233.png

运行结果:

2020-08-09 151459.png


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
>>> 

2020-08-09 152540.png

使用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))

2020-08-09 155602.png