写一个关于监控的psutil模块

   前几天看到朋友郑彦生分享的psutil模块的使用方法,感觉对于监控又多了一层想法,因为前期主要是通过saltstack,收集数据,但是有时候比较麻烦,在小型规模做监控的时候还是建议用psutil模块,方便快捷:首先介绍psutil模块的一些基本用法:

1、监控cpu:

>>> import psutil
>>> psutil.cpu_count()     #查看线程
24
>>> psutil.cpu_percent()    #查看cpu负载
0.20000000000000001

2、查看内存相关信息:

内存可以查看总共多少内存,使用了多少,还剩多少:

>>> mem = psutil.virtual_memory()

#统计所有的信息

>>> mem
svmem(total=67502866432L, available=61983199232L, percent=8.1999999999999993, used=7092293632L, free=60410572800L, active=5551243264, inactive=410374144, buffers=335728640L, cached=1236897792)
>>> mem.total   #内存总数
67502866432L
>>> mem.used   #使用了多少内存
7092293632L
>>> mem.free   #剩余内存
60410572800L

3、硬盘的IO和使用情况:

#输出硬盘分区信息
>>> psutil.disk_partitions()
[sdiskpart(device='/dev/mapper/VolGroup-lv_root', mountpoint='/', fstype='ext4', opts='rw'), sdiskpart(device='/dev/sda3', mountpoint='/boot', fstype='ext4', opts='rw'), sdiskpart(device='/dev/mapper/VolGroup-lv_home', mountpoint='/home', fstype='ext4', opts='rw')]
#根据分区信息查看大小
>>> psutil.disk_partitions('/')
[sdiskpart(device='/dev/mapper/VolGroup-lv_root', mountpoint='/', fstype='ext4', opts='rw'), sdiskpart(device='proc', mountpoint='/proc', fstype='proc', opts='rw'), sdiskpart(device='sysfs', mountpoint='/sys', fstype='sysfs', opts='rw'), sdiskpart(device='devpts', mountpoint='/dev/pts', fstype='devpts', opts='rw,gid=5,mode=620'), sdiskpart(device='tmpfs', mountpoint='/dev/shm', fstype='tmpfs', opts='rw'), sdiskpart(device='/dev/sda3', mountpoint='/boot', fstype='ext4', opts='rw'), sdiskpart(device='/dev/mapper/VolGroup-lv_home', mountpoint='/home', fstype='ext4', opts='rw'), sdiskpart(device='', mountpoint='/proc/sys/fs/binfmt_misc', fstype='binfmt_misc', opts='rw')]
#硬盘IO的使用情况
>>> psutil.disk_io_counters()
sdiskio(read_count=107158, write_count=20666736, read_bytes=1792485376, write_bytes=133169932288, read_time=130421, write_time=337076882)

4、采集网卡流量和网络IO:
#统计总体信息
>>> psutil.net_io_counters()
snetio(bytes_sent=984192973, bytes_recv=1274031495, packets_sent=3924134, packets_recv=6024010, errin=0, errout=0, dropin=0, dropout=0)
#查看具体每个接口
{'lo': snetio(bytes_sent=349343820, bytes_recv=349343820, packets_sent=1583789, packets_recv=1583789, errin=0, errout=0, dropin=0, dropout=0), 'em1': snetio(bytes_sent=634794145, bytes_recv=823789288, packets_sent=2339457, packets_recv=3623086, errin=0, errout=0, dropin=0, dropout=0), 'em4': snetio(bytes_sent=0, bytes_recv=0, packets_sent=0, packets_recv=0, errin=0, errout=0, dropin=0, dropout=0), 'em3': snetio(bytes_sent=59939, bytes_recv=100907694, packets_sent=932, packets_recv=817226, errin=0, errout=0, dropin=0, dropout=0), 'em2': snetio(bytes_sent=0, bytes_recv=0, packets_sent=0, packets_recv=0, errin=0, errout=0, dropin=0, dropout=0)}

*注:当然还有很多信息,大家可以去官网查看,,我这里就简单解释了

下面是为了方便下次调用的时候写的模块,返回参数单位都是M。大家需要转换成G为单位的话直接/1024即可。

[root@mail test]# cat miontor.py 
#!/usr/bin/env python
import re,pickle
import psutil
import time
def GetcpuLoad():
    cpuLoad=psutil.cpu_percent(interval=1) 
    return cpuLoad
def GetMeminfo():
    mem = psutil.virtual_memory()
    mem_total = mem.total/1024/1024
    mem_user = mem.used/1024/1024
    mem_free = mem.free/1024/1024
    mem_dic =  {'mem_total':float(mem_total),'mem_user':float(mem_user),'mem_free':float(mem_free)}
    return mem_dic
def GetNetworkinfo(eth):
    networkinfo = psutil.net_io_counters(pernic=True)[eth]
    bytes_sent=list(networkinfo)[0]/1024/1024
    bytes_recv=list(networkinfo)[1]/1024/1024
    total = (bytes_sent+bytes_recv)
    return total
def GetNetworkio():
    networkio = psutil.net_io_counters()
    bytes_sent = list(networkio)[0]/1024/1024
    bytes_recv = list(networkio)[1]/1024/1024
    total = (bytes_sent+bytes_recv)
    return total
def GetdiskIO():
    disk_io = psutil.disk_io_counters()
    read_count =list(disk_io)[0]/1024/1024
    write_count =list(disk_io)[1]/1024/1024
    io_total = (read_count+write_count)
    return io_total
def GetdiskSize():
    disk_list = []
    d_list = []
    total_disk = []
    disk_name=list(psutil.disk_partitions())
    for name in disk_name:
          disk_list.append(list(name)[1])  
          with open('fdisk_list.txt','w') as fd:
              pickle.dump(disk_list,fd)
    with open('fdisk_list.txt','r') as fd:
          fdisk_name = pickle.load(fd)
          for n in fdisk_name:
                fdisk_name_list = n
                total=list(psutil.disk_usage(n))[0]/1024/1024
                used =list(psutil.disk_usage(n))[1]/1024/1024
                free =list(psutil.disk_usage(n))[2]/1024/1024
                d_list=[fdisk_name_list,total,used,free]
                total_disk.append(d_list)
                with open('total_list.txt','w') as fd:
                        pickle.dump(total_disk,fd)
if __name__ =='__main__':
#    print GetMeminfo()
    print GetNetworkinfo('em3')

附:刚刚朋友问我以后公司的nginx分析能不能返回状态码出图显示,这里刚刚也写了一下,贴出来:

[root@mail test]# cat nginx_log.py 
#!/usr/bin/env python
def gethttpcode(code):
    n = 0
    f = open('/tmp/www_access.log')
    for d in f.readlines():
        xiaoluo = d.split()
        num = xiaoluo[8]
        if num == code:
            n += 1
    return n
    f.close()
if __name__ =='__main__':
#    print gethttpcode('200')
#    print gethttpcode('304')
     print gethttpcode('500')
我们获取到的这些数据,可以入mysql数据库,通过灵活性,可以适当的结合报表出图。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值