天天看點

python監控系統資訊(CPU,記憶體,磁盤,網絡,程序)

作者:正直芒果冰
#encoding=utf-8
import winreg
import logging
import socket
logging.basicConfig(level=logging.INFO,format='%(asctime)s %(name)s %(levelname)s %(message)s')
log = logging.getLogger(__name__)

'''
監控CPU資訊
'''
import psutil
class CpuInfo():
    def __init__(self,cpu_time,cpu_time_each,physisc_count,logic_count,cpu_score,cpu_score_each):
        self.physisc_count = physisc_count
        self.logic_count = logic_count
        self.cpu_score = cpu_score
        self.cpu_score_each = cpu_score_each
        self.cpu_time = cpu_time
        self.cpu_time_each = cpu_time_each
        
class MemInfo():
    def __init(self,total,available,percent,used,free):
        self.total = total
        self.available = available
        self.percent = percent
        self.used = used
        self.free = free
  
class NetInfo():
    def __init__(self,net_name,family,address,netmask,broadcast,ptp):
        self.net_name = net_name
        self.family = family
        self.address = address
        self.netmask = netmask
        self.broadcast = broadcast
        self.ptp = ptp

class ProcInfo():
    def __init__(self,pid,name,username,cpu,memory,threads,memory_percent):
        self.pid = pid
        self.name = name
        self.username = username
        self.cpu = cpu
        self.memory = memory
        self.threads = threads
        self.memory_percent = memory_percent
     
def getCpuInfo():
    cpu_time = psutil.cpu_times()
    cpu_time_each = psutil.cpu_times(percpu=True)
    logic_count = psutil.cpu_count()
    physisc_count= psutil.cpu_count(logical=False)
    cpu_score = psutil.cpu_percent()
    cpu_score_each = psutil.cpu_percent(percpu=True)
    cpuInfo = CpuInfo(cpu_time,cpu_time_each,physisc_count,logic_count,cpu_score,cpu_score_each)
    return cpuInfo

def testCpu():
    info = getCpuInfo()
    log.info('CPU實體數量:{}'.format(info.logic_count))
    log.info('CPU(邏輯CPU的平均) 占用時間的詳細資訊:{}'.format(info.cpu_time))
    log.info('擷取每個CPU占用時間的詳細資訊:{}'.format(info.cpu_time_each))
    log.info('CPU邏輯數量:{}'.format(info.physisc_count))
    log.info('每個CPU的占比:{}'.format(info.cpu_score_each))
    log.info('CPU占比:{}'.format(info.cpu_score))

def getNetInfo():
    result = psutil.net_if_addrs()
    net_list = []
    for k,v in result.items():
        net_name = k
        for snicaddr in v:
            address = snicaddr.address
            netmask = snicaddr.netmask
            family = snicaddr.family
            log.info('網絡名稱:{},MAC位址:{},netmask:{},family:{}'.format(net_name,address,netmask,family))
            #netInfo = NetInfo()

'''
監控記憶體資訊
'''
def getMem():
    mem = psutil.virtual_memory()
    memInfo = MemInfo()
    total = int(mem.total/(1024*1024))
    available = int(mem.available/(1024*1024))
    used = int(mem.used/(1024*1024))
    free = int(mem.free/(1024*1024))
    log.info('記憶體總共:{}MB'.format(total))
    log.info('可使用記憶體:{}MB'.format(available))
    log.info('已使用記憶體:{}MB'.format(used))
    log.info('剩餘記憶體:{}MB'.format(free))
    
'''
監控磁盤資訊
'''
def getDisk():
    disks = psutil.disk_partitions()
    log.info('磁盤資訊:{}'.format(disks))
    usage = psutil.disk_usage('/')
    log.info('磁盤使用情況:{}'.format(usage))
    
'''
監控網絡資訊
'''
def getNetInfo2():
    #擷取網絡讀寫位元組/包的個數
    count = psutil.net_io_counters()
    print (count)
    addrs = psutil.net_if_addrs()
    print (addrs,type(addrs))

'''
擷取程序資訊
'''
def getPids():
    pids = psutil.pids()
    #log.info('程序集合:{}'.format(pids))
    proc_list = []
    for proc in psutil.process_iter(attrs=['pid','name','username']):
        pc = proc.info
        name = pc['name']
        pid = pc['pid']
        process = psutil.Process(pid)
        pi = ProcInfo(pc['pid'],pid,pc['username'],process.cpu_times(),process.memory_info(),process.num_threads(),process.memory_percent())
        proc_list.append(pi)
    for k in proc_list:
        log.info('PID:{},程序名稱:{},username:{},cpu占用:{},記憶體占用:{},線程數:{},記憶體占比:{}'.format(k.pid,k.name,k.username,k.cpu,k.memory,k.threads,k.memory_percent))
if __name__=='__main__':
    #testCpu()
    #getMem()
    #getDisk()
    #getNetInfo()
    #getNetInfo()
    getPids()