python监控某个linux文件关键字,用Python监控Linux系统

c4f289f602908ba20643f7dedd507eeb.png

Python的基础是非常重要的。基础是处理一切问题的基石。

1. 负载情况

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

我们先来看看这个文件的内容是什么:

$cat /proc/loadavg

0.00 0.01 0.05 1/187 11193

具体代码实现如下:

#!/usr/bin/env python3

loadavg = {}

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 loadavg

load_stat()

print(loadavg)

#输出load1的值

print("load1:"+loadavg["lavg_1"])

解题思路:

为了能够读取 /proc/loadavg 里的文件,我们可以定义一个函数 load_stat()函数 用来打开文件和关闭。然后读取里面的文件存到一个数据结构里,当然数据结构你可以采用List,也可以采用Dict,本文用Dict去存放这些内容。

#!/usr/bin/env python3

f = 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:

pass

print("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_mem

used_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是个跨平台库,能够轻松实现获取系统运行的进程和系统利用率,包括CPU、内存、磁盘、网络等信息。之前的查看Linux系统的负载和内存使用情况实现都可以用psutil 库去实现。

#获取网卡eth0的IP地址

>>> psutil.net_if_addrs()['eth0'][0].address

'192.168.137.16'

#子网掩码

>>> psutil.net_if_addrs()['eth0'][0].netmask

'255.255.255.0'

#查看网卡是否开启

>>> psutil.net_if_stats()['eth0'].isup

True

#查看网卡的速率,命令有ifconfig,ethtool

>>> psutil.net_if_stats()['eth0'].speed

#单位 Mb/s

4.CPU使用情况

查看cpu的使用情况我们使用psutil 更加方便。

#!/usr/bin/env python3

# @Author : knight

import psutil

#检测cpu的使用率

#psutil获取系统cpu使用率的方法是cpu_percent(),其有两个参数,分别是interval和percpu,interval指定的是计算cpu使用率的时间间隔,percpu则指定是选择总的使用率还是每个cpu的使用率

print(psutil.cpu_percent(interval=20,percpu=False))

#查看物理cpu的个数

print(psutil.cpu_count(logical=False))

#查看cpu的总使用情况

print(psutil.cpu_times_percent())

# #每个cpu的使用情况

print(psutil.cpu_times_percent(percpu=True))

#cpu的使用率

psutil.cpu_percent()

```

我们执行上面的脚本,执行结果如下:

```

$python3 test.py

2.8

4

scputimes(user=1.0, nice=0.0, system=1.8, idle=97.2, iowait=0.0, irq=0.0, softirq=0.0, steal=0.0, guest=0.0, guest_nice=0.0)

[scputimes(user=0.0, nice=0.0, system=1.0, idle=98.0, iowait=1.0, irq=0.0, softirq=0.0, steal=0.0, guest=0.0, guest_nice=0.0), scputimes(user=1.0, nice=0.0, system=2.0, idle=97.0, iowait=0.0, irq=0.0, softirq=0.0, steal=0.0, guest=0.0, guest_nice=0.0), scputimes(user=0.0, nice=0.0, system=2.0, idle=97.0, iowait=0.0, irq=0.0, softirq=0.0, steal=0.0, guest=0.0, guest_nice=0.0), scputimes(user=0.0, nice=0.0, system=2.0, idle=97.0, iowait=0.0, irq=0.0, softirq=0.0, steal=0.0, guest=0.0, guest_nice=0.0), scputimes(user=2.0, nice=0.0, system=1.0, idle=97.0, iowait=0.0, irq=0.0, softirq=0.0, steal=0.0, guest=0.0, guest_nice=0.0), scputimes(user=0.0, nice=0.0, system=2.0, idle=98.0, iowait=0.0, irq=0.0, softirq=0.0, steal=0.0, guest=0.0, guest_nice=0.0), scputimes(user=1.0, nice=0.0, system=1.0, idle=98.0, iowait=0.0, irq=0.0, softirq=0.0, steal=0.0, guest=0.0, guest_nice=0.0), scputimes(user=3.0, nice=0.0, system=3.0, idle=93.0, iowait=0.0, irq=0.0, softirq=0.0, steal=0.0, guest=0.0, guest_nice=0.0)]

以上的代码能正常的去获取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系统

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值