• python3监控系统资源最终版(获取CPU,内存,磁盘,网卡等信息),返回json格式。


    #!/usr/bin/env python3
    #-*- coding:utf-8 -*-
    #create at 2018-12-07
    'this is a system monitor scripts'
    __author__="yjt"
    
    import os
    import time
    import sys
    import datetime
    import socket
    import psutil  
    import re
    import json
    
    #以下是变量值,自己定义
    CPUT = 2      #计算CPU利用率的时间间隔
    NETT = 2      #计算网卡流量的时间间隔"""
    #LOOPT = 2     """#脚本循环时间间隔"""
    
    #获取系统基本信息"""
    def baseinfo():
        hostname = socket.gethostname()
        user_conn = len(psutil.users())
        start_time = datetime.datetime.fromtimestamp(psutil.boot_time()).strftime("%Y-%m-%d %H:%M:%S")
        now_time = time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))
    #    sys_runtime = time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time() - psutil.boot_time()))
        sys_runtime = os.popen('w').readline().split('users')[0].split('up')[1].strip()[:-1].strip()[:-1]
        process = os.popen('ps -ef |wc -l').read().split()[0]
        value = {"hostname":hostname,"user_conn":user_conn,"sys_start_time":start_time,"now_time":now_time,"sys_runtime":sys_runtime,"process":process}
        value_json = json.dumps(value)
        return value_json
    print('')
    print(baseinfo())
    #获取CPU信息
    def cpuinfo():
        ave_load = os.popen('uptime').readline().split(":")[-1].split()
        ave_load = ' '.join(ave_load) #CPU平均负载
        #以下四项值都是获取的瞬时值
        user_time = psutil.cpu_times().user  #用户态使用CPU时间
        sys_time = psutil.cpu_times().system #系统态使用CPU时间
        idle_time = psutil.cpu_times().idle #CPU空闲时间
        iowait_time = psutil.cpu_times().iowait #IO等待时间
        total_cpu = 0
        for i in range(len(psutil.cpu_times())):
            total_cpu += psutil.cpu_times()[i]  
        user_use = str(round(user_time / total_cpu * 100,2)) + '%'
        sys_use = str(round(sys_time / total_cpu * 100,2)) + '%'
        idle = str(round(idle_time / total_cpu * 100,2)) + '%'
        iowait = str(round(iowait_time / total_cpu * 100,2)) + '%'
        cpu_pre = str(psutil.cpu_percent(CPUT)) + "%"
        logical_cpu = psutil.cpu_count()
        pyhsical_cpu = psutil.cpu_count(logical=False)
        #获取CPU使用最高的前十行
        #top10 = len(os.popen('ps aux|grep -v PID|sort -rn -k +3|head -10').readlines())
    #    dic1 = {"ave_load":ave_load,"user_use":user_use,"sys_use":sys_use,"idle":idle,"iowait":iowait,"cpu_pre":cpu_pre,"logical_cpu":logical_cpu,"pyhsical_cpu":pyhsical_cpu}
        l1,l2,l3,l4,l5,l6 = [],[],[],[],[],[]
        i = 0
        while i < 10:
            #user = os.popen('ps aux|grep -v PID|sort -rn -k +4|head').readlines().[info].split()[0]
            #pid = int(os.popen('ps aux|grep -v PID|sort -rn -k +3|head -10').readlines()[i].split()[1])
            #a = os.popen('ps aux |sort -k3 -nr').readlines()[i].split()
            try:
                info = ''
                info = psutil.Process(int(os.popen("ps aux|grep -v PID|sort -rn -k +3").readlines()[i].split()[1]))
                #if bool(info):
                #pid = psutil.Process(int(os.popen('ps aux|grep -v PID|sort -rn -k +3').readlines()[i].split()[1])).pid
                pid = info.pid
                user = info.username()
                process_name = info.name()
                cpu_use = str(info.cpu_percent()) + '%'
                status = info.status()
                l1.append(user)
                l2.append(pid)
                l3.append(cpu_use)
                l4.append(process_name)
                l5.append(status)
                i += 1
            except:
                pass
            continue
        c0 = []
        l = ["user","pid","cpu_use","process_name","status"]
        cpu_value = list(zip(l1,l2,l3,l4,l5))
        cpu_len = len(cpu_value)
        for i in range(cpu_len):
            c0.append(dict(zip(l,cpu_value[i])))
    #def cpu():
    #以下获取的是逻辑CPU的瞬时值
        with open('/proc/stat','r') as f:
            cpu_item = f.readlines()
        cpu_number,cpu_use = [],[]
        for i in cpu_item:
            if re.search("^cpu[0-9]{1,}",i):
                cpu_info = i
                cpu_info = cpu_info.split(' ')
                #cpu_number = cpu_info[0]
                cpu_number.append(cpu_info[0])
                cpu_total = 0
                for num in cpu_info:
                    if num.isdigit():
                        cpu_total += float(num)
                    cpu_free = float(cpu_info[4])
                cpu_u = str(round((1 - cpu_free / cpu_total) * 100 ,2)) + '%'
                cpu_list = cpu_u.split()
                cpu_str = ''.join(cpu_list)
                cpu_use.append(cpu_str)
        c1 = []
        cpu_l = ["cpu_number","cpu_use"]
        cpu_v = list(zip(cpu_number,cpu_use))
        cpu_len = len(cpu_v)
        for i in range(cpu_len):
            c1.append(dict(zip(cpu_l,cpu_v[i])))
        value =   {
                    "ave_load":ave_load,
                    "user_use":user_use,
                    "sys_use":sys_use,
                    "idle":idle,
                    "iowait":iowait,
                    "cpu_pre":cpu_pre,
                    "logical_cpu":logical_cpu,
                    "pyhsical_cpu":pyhsical_cpu,
                    "logical_cpu_use":c1,
                    "cpu_top10":c0
                  }
        value_json = json.dumps(value)
        return value_json
    print('')
    print(cpuinfo())
    #cpuinfo()
    #获取内存信息
    def meminfo():
        total_mem = str(round(psutil.virtual_memory().total / 1024 /1024/1024)) + 'G'
        use_mem = str(round(psutil.virtual_memory().used / 1024 /1024/1024)) + 'G'
        mem_percent = str(psutil.virtual_memory().percent) + '%'
        free_mem = str(round(psutil.virtual_memory().free / 1024 /1024/1024)) + 'G'
        swap_mem = str(round(psutil.swap_memory().total / 1024 /1024/1024)) + "G"
        swap_use = str(round(psutil.swap_memory().used / 1024 /1024/1024 )) + 'G'
        swap_free = str(round(psutil.swap_memory().free / 1024 /1024/1024))  + 'G'
        swap_percent = str(psutil.swap_memory().percent) + '%'
     #获取memory使用最高的前十行
        #top10 = len(os.popen('ps aux|grep -v PID|sort -rn -k +4|head -10').readlines())
    #    dic1 = {"ave_load":ave_load,"user_use":user_use,"sys_use":sys_use,"idle":idle,"iowait":iowait,"cpu_pre":cpu_pre,"logical_cpu":logical_cpu,"pyhsical_cpu":pyhsical_cpu}
        l1,l2,l3,l4,l5,l6 = [],[],[],[],[],[]
        i = 0
        while i < 10:
            #user = os.popen('ps aux|grep -v PID|sort -rn -k +4|head').readlines().[info].split()[0]
            #pid = int(os.popen('ps aux|grep -v PID|sort -rn -k +4|head -10').readlines()[i].split()[1])
            try:
                info = psutil.Process(int(os.popen('ps aux|grep -v PID|sort -rn -k +4').readlines()[i].split()[1]))
                pid = info.pid
                user = info.username()
                process_name = info.name()
                mem_use = str(round(info.memory_percent(),2)) + '%'
                status = info.status()
                l1.append(user)
                l2.append(pid)
                l3.append(mem_use)
                l4.append(process_name)
                l5.append(status)
                i += 1
            except:
                pass
            continue
        m0 = []
        l = ["user","pid","mem_use","process_name","status"]
        mem_value = list(zip(l1,l2,l3,l4,l5))
        mem_len = len(mem_value)
        for i in range(mem_len):
            m0.append(dict(zip(l,mem_value[i])))
    
        value =  {
                   "total_mem":total_mem,
                   "use_mem":use_mem,
                   "free_mem":free_mem,
                   "mem_percent":mem_percent,
                   "swap_mem":swap_mem,
                   "swap_use":swap_use,
                   "swap_free":swap_free,
                   "swap_percent":swap_percent,
                   "mem_top10":m0
                 }
        value_json = json.dumps(value)
        return value_json
    print('')
    print(meminfo())
    #获取磁盘信息
    def diskinfo():
        #print("33[31mdisk_info:33[0m")
        #print("disk%-10s total%-10s free%-10s used%-10s percent%-10s"%('','(G)','(G)','(G)','(%)'))
        disk_num = int(''.join(os.popen("ls /dev/sd[a-z]|wc -l").readlines()[0].split()))
        d1,d2,d3,d4,d5 = [],[],[],[],[]
        disk_total,disk_used,disk_free = 0,0,0
        disk_len = len(psutil.disk_partitions())
        for info in range(disk_len):
            disk = psutil.disk_partitions()[info][1]
            if len(disk) < 10:
                d1.append(disk)
                total = str(round(psutil.disk_usage(disk).total /1024/1024/1024)) + 'G'
                total_num = psutil.disk_usage(disk).total
                disk_total  += total_num
                free = str(round(psutil.disk_usage(disk).free /1024/1024/1024)) + 'G'
                disk_free += psutil.disk_usage(disk).free
                used = str(round(psutil.disk_usage(disk).used /1024/1024/1024)) + 'G'
                disk_used += psutil.disk_usage(disk).used
                percent = str(psutil.disk_usage(disk).percent) + '%'
                d2.append(total)
                d3.append(free)
                d4.append(used)
                d5.append(percent)
        disk_used_percent = str(round(disk_used / disk_total * 100,2)) + '%'
        disk_free_percent = str(round(disk_free / disk_total * 100,2)) + '%'
        disk_total = str(round(disk_total /1024/1024/1024)) + "G"
        disk_free = str(round(disk_free /1024/1024/1024)) + "G"
        disk_used = str(round(disk_used /1024/1024/1024)) + "G"
        d0 = []
        d = ["mount","total","free","used","percent"]
        disk_value = list(zip(d1,d2,d3,d4,d5))
        disk_len = len(disk_value)
        for i in range(disk_len):
            d0.append(dict(zip(d,disk_value[i])))
        value =  {
                   "disk":[
                            {"disk_num":disk_num},
                            {"disk_total":disk_total},
                            {"disk_free":disk_free},
                            {"disk_used":disk_used},
                            {"disk_used_percent":disk_used_percent},
                            {"disk_free_percent":disk_free_percent}
                          ],
                   "partitions":d0 
                 }
        value_json = json.dumps(value)
        return value_json
    print('')
    print(diskinfo())
    #diskinfo()
    
    
    #获取网卡信息
    def netinfo():
        net_item = list(psutil.net_if_addrs())
        n1,n2,n3,n4,n5,n6 = [],[],[],[],[],[]
        for net in net_item:
            if re.search(r'bond.*|em.*|eno.*|^eth.*',net):
                network_card = net
                n1.append(network_card)
                ip = psutil.net_if_addrs()[net][0].address
                ip_len = len(ip.split('.'))
                if ip_len == 4:
                    ip =ip
                else:
                    ip = 'null' 
                n2.append(ip)
                recv_1,recv_2,send_1,send_2=0,0,0,0
                with open ('/proc/net/dev','r') as f:
                    net_info = f.readlines()[2:]
                   # net_list = str(net_info).lower().split()
                    net_len = len(net_info)
                    for i in range(net_len):
                        net_n_info = net_info[i].split()
                        net_list = net_info[i].split(':')[0].strip(' ')
                        #print(net_list)
                        if net_list == net:
                            recv_1 = float(net_n_info[1])
                        #    print(recv_1)
                            send_1 = float(net_n_info[9])
                time.sleep(NETT)
                with open ('/proc/net/dev','r') as f:
                    net_info = f.readlines()[2:]
                    #net_list = str(net_info).lower().split()
                    net_len = len(net_info)
                    for i in range(net_len):
                        net_n_info = net_info[i].split()
                        net_list = net_info[i].split(':')[0].strip(' ')
                        if net_list == net:
                            recv_2 = float(net_n_info[1])
                            #print(recv_2)
                            send_2 = float(net_n_info[9])
                    received = str(round(recv_2/1024 - recv_1/1024,2)) + "kb/s"
                    transmit = str(round(send_2/1024 - send_1/1024,2)) + "kb/s"
                    n3.append(transmit)
                    n4.append(received)
        #print(n3,n4)
                #网卡带宽
    #            net_speed = list(os.popen("ethtool %s|grep -i speed"%(network_card)).readlines())[0].split()[1]
    #            n5.append(net_speed)
                #网卡模式
    #            net_duplex = list(os.popen("ethtool %s|grep -i Duplex"%(network_card)).readlines())[0].split()[1]
    #            n6.append(net_duplex)
        #print (n1,n2,n3,n4)
        n0 = []
    #    n = ["network_card","ip","transmit","received","net_speed","net_duplex"]
        n = ["network_card","ip","transmit","received"]
        net_value = list(zip(n1,n2,n3,n4))
        net_len = len(net_value)
        for i in range(net_len):
            n0.append(dict(zip(n,net_value[i])))
        value = {
                 "network":n0
                }
        value_json = json.dumps(value)
        return value_json
    print('')
    print(netinfo())
    #netinfo()
    #获取TCP连接数
    def tcpinfo():
        status_list = ["LISTEN","ESTABLISHED","TIME_WAIT","CLOSE_WAIT","LAST_ACK","SYN_SENT"]
        status_init = []
        net_conn =  psutil.net_connections()
        n1 = []
        for key in net_conn:
            status_init.append(key.status)
        for value in status_list:
            num = status_init.count(value)
            n1.append(num)
        value =    {
                "LISTEN":n1[0],
                "ESTABLISHED":n1[1],
                "TIME_WAIT":n1[2],
                "CLOSE_WAIT":n1[3],
                "LAST_ACK":n1[4],
                "SYN_SENT":n1[5]
               }
        value_json = json.dumps(value)
        return value_json
    print('')
    print(tcpinfo())
    

      注:该脚本也适用于python2,当然,需要安装psutil模块,或者已安装anaconda

  • 相关阅读:
    AS/400开发经验点滴(三)如何使用分布式关系数据库
    AS/400开发经验点滴(五)通用日志管理工具
    AS/400开发经验点滴(二)一个批量修改文件属性的工具
    FTP执行AS400命令
    ORA12514 TNS 监听程序当前无法识别连接描述符中请求服务 的解决方法
    Centos 查看系统硬件信息
    [转]Oracle的DBMS_METADATA包
    java读写删.text,.xml文件内容
    oracle 是user_tables里面可以查找到一个表,而用DESC或者insert语句插入时就会报不存在视图。
    Oracle监听服务lsnrctl参数及查询状态详解
  • 原文地址:https://www.cnblogs.com/yjt1993/p/10083123.html
Copyright © 2020-2023  润新知