“Python实现Linux操作系统负载、CPU、网络内存、监控”的版本间的差异
(创建页面,内容为“ == Python实现Linux操作系统负载、CPU、网络内存、监控 == 在Linux中要查看系统负载、CPU利用率、网络和内存等状况,我们要使…”) |
(→Python实现Linux操作系统负载、CPU、网络内存、监控) |
||
(未显示同一用户的1个中间版本) | |||
第7行: | 第7行: | ||
内存查看,-般使用free, vmstat 等命令查看<br> | 内存查看,-般使用free, vmstat 等命令查看<br> | ||
网络流量,我们一般使用iftop等命令查看<br> | 网络流量,我们一般使用iftop等命令查看<br> | ||
+ | |||
+ | 如果用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]] |
2020年8月9日 (日) 07:57的最新版本
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))
代码运行结果: