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("\033[31mdisk_info:\033[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
python3监控系统资源最终版(获取CPU,内存,磁盘,网卡等信息),返回json格式。的更多相关文章
- Linux 简单命令查询CPU、内存、网卡等信息
[转自]Linux查询CPU.内存.网卡等信息 看CPU信息(型号)# cat /proc/cpuinfo | grep name | cut -f2 -d: |uniq -c 1 Int ...
- linux系统CPU,内存,磁盘,网络流量监控脚本
前序 1,#cat /proc/stat/ 信息包含了所有CPU活动的信息,该文件中的所有值都是从系统启动开始累积到当前时刻 2,#vmstat –s 或者#vmstat 虚拟内存统计 3, #cat ...
- 一键获取linux内存、cpu、磁盘IO等信息脚本编写,及其原理详解
更多linux知识,请关注公众号:一口Linux 一.脚本 今天主要分享一个shell脚本,用来获取linux系统CPU.内存.磁盘IO等信息. #!/bin/bash # 获取要监控的本地服务器IP ...
- 使用.NET FrameWork获取CPU,内存使用率以及磁盘空间
在以前,我们想获取CPU,内存等信息就不得不借助win32 API来实现.但现在,.NET FrameWork已经把这些API封装到.NET类库中了,所以我们可以借助.NET类库很轻松的获取这些信息. ...
- C# 获取CPU序列号、网卡MAC地址、硬盘序列号封装类,用于软件绑定电脑
using System.Management; namespace GLaLa { /// <summary> /// hardware_mac 的摘要说明. /// </summ ...
- 获取CPU序列号、网卡MAC地址、硬盘序列号
<pre name="code" class="csharp"> using System; using System.Collections; u ...
- AIX/Linux/HP-UX查看CPU/内存/磁盘/存储命令
1.1 硬件环境验证方式 硬件环境主要包括CPU.内存.磁盘/存储.网络设备(如F5等).系统特有设备(如密押设备等)等,其中网络设备和系统特有设备由网络管理员或项目组提供为准,本节主要关注CP ...
- js获取get方式提交的参数返回json格式数据
/** * 获取GET提交的参数 * @return JSON格式 * @author Terry */ function getArgs(){ var args = {}; var match = ...
- linux系统CPU内存磁盘监控发送邮件脚本
#!/bin/bashexport PATHexport LANG=zh_CN.UTF-8###top之后输入数字1,可以查看每颗CPU的情况.###先配置好mailx邮箱账号密码:#cat>/ ...
随机推荐
- 数据结构与算法(周测3-Huffman树)
判断题 1.Given a Huffman tree for N (≥2) characters, all with different weights. The weight of any non- ...
- Python中闭包的原理
定义: 如果在一个内部函数里,对在外部作用域(但不是在全局作用域)的变量进行引用,那么内部函数就被认为是闭包(closure). 简单闭包的例子: 下面是一个使用闭包简单的例子,模拟一个计数器,通过将 ...
- TR-银行主数据相关BAPI
BAPI_BANKDETAIL_CREATE FI01:BAPI_BANK_CREATE FI12:BAPI_HOUSE_BANK_REPLICATE 1011 Business Object Ban ...
- 【日语】【ZZ】日语人称小结
[ZZ]日语人称小结 日语中有关人称的词很多,也有不少朋友问 现整理了一下,希望能对那些不太清楚的朋友有点帮助 如果您认为在下有写错的地方,或者您有什么高见,请不吝赐教 第一人称 “我” 1.私 わた ...
- BHD钱包部署【生态池/合作池】
前序 BHD网址:https://btchd.org/#wallet 注:我这里是centos7, 所以我选linuxPC 部署 解压与配置 tar -zxf bhd-v1.3.4.0-d909c0e ...
- 【SpringMVC】Validation校验
一.概述 二.步骤 2.1 引入 Hibernate Validator 2.2 配置 2.3 创建CustomValidationMessages 2.4 校验规则 2.5 捕获错误 2.6 在页面 ...
- HBase hbase-site.xml 参数
该文档是用hbase默认配置文件生成的,文件源是 hbase-default.xml. 在实际的HBase生产环境中应用于%HBASE_HOME%/conf/hbase-site.xml中. hbas ...
- Python基础——细琐知识点
注释 Python注释有两种方式 使用# 类似于Shell脚本的注释方式,单行注释 使用'''或者""" 使用成对的'''或者""".这种注 ...
- Linux学习之五-Linux系统终端常用的快捷键
Linux系统终端常用的快捷键 (使用快捷键能大大提高效率,部分用在远程登录的工具如Xshell下) 剪切板操作(终端不支持,因为终端是纯命令行) Ctrl+insert 复制 Shift+i ...
- 删除svn用户
以win7为例 1.进入c:/Users/[你的用户名]/AppData/Roaming/Subversion/auth目录,删除该目录下的所有文件: 2.重启eclipse/myeclipse,提交 ...