前幾天看到朋友鄭彥生分享的psutil模塊的使用方法,感受對於監控又多了一層想法,由於前期主要是經過saltstack,收集數據,可是有時候比較麻煩,在小型規模作監控的時候仍是建議用psutil模塊,方便快捷:首先介紹psutil模塊的一些基本用法:python
一、監控cpu:mysql
>>> import psutil >>> psutil.cpu_count() #查看線程 24 >>> psutil.cpu_percent() #查看cpu負載 0.20000000000000001
二、查看內存相關信息:nginx
內存能夠查看總共多少內存,使用了多少,還剩多少:sql
>>> 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
三、硬盤的IO和使用狀況:app
#輸出硬盤分區信息 >>> 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) 四、採集網卡流量和網絡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)}
*注:固然還有不少信息,你們能夠去官網查看,,我這裏就簡單解釋了tcp
下面是爲了方便下次調用的時候寫的模塊,返回參數單位都是M。你們須要轉換成G爲單位的話直接/1024便可。ide
[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分析能不能返回狀態碼出圖顯示,這裏剛剛也寫了一下,貼出來:.net
[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數據庫,經過靈活性,能夠適當的結合報表出圖。