#!/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格式。的更多相关文章

  1. Linux 简单命令查询CPU、内存、网卡等信息

    [转自]Linux查询CPU.内存.网卡等信息 看CPU信息(型号)# cat /proc/cpuinfo | grep name | cut -f2 -d: |uniq -c      1  Int ...

  2. linux系统CPU,内存,磁盘,网络流量监控脚本

    前序 1,#cat /proc/stat/ 信息包含了所有CPU活动的信息,该文件中的所有值都是从系统启动开始累积到当前时刻 2,#vmstat –s 或者#vmstat 虚拟内存统计 3, #cat ...

  3. 一键获取linux内存、cpu、磁盘IO等信息脚本编写,及其原理详解

    更多linux知识,请关注公众号:一口Linux 一.脚本 今天主要分享一个shell脚本,用来获取linux系统CPU.内存.磁盘IO等信息. #!/bin/bash # 获取要监控的本地服务器IP ...

  4. 使用.NET FrameWork获取CPU,内存使用率以及磁盘空间

    在以前,我们想获取CPU,内存等信息就不得不借助win32 API来实现.但现在,.NET FrameWork已经把这些API封装到.NET类库中了,所以我们可以借助.NET类库很轻松的获取这些信息. ...

  5. C# 获取CPU序列号、网卡MAC地址、硬盘序列号封装类,用于软件绑定电脑

    using System.Management; namespace GLaLa { /// <summary> /// hardware_mac 的摘要说明. /// </summ ...

  6. 获取CPU序列号、网卡MAC地址、硬盘序列号

    <pre name="code" class="csharp"> using System; using System.Collections; u ...

  7. AIX/Linux/HP-UX查看CPU/内存/磁盘/存储命令

    1.1    硬件环境验证方式 硬件环境主要包括CPU.内存.磁盘/存储.网络设备(如F5等).系统特有设备(如密押设备等)等,其中网络设备和系统特有设备由网络管理员或项目组提供为准,本节主要关注CP ...

  8. js获取get方式提交的参数返回json格式数据

    /** * 获取GET提交的参数 * @return JSON格式 * @author Terry */ function getArgs(){ var args = {}; var match = ...

  9. linux系统CPU内存磁盘监控发送邮件脚本

    #!/bin/bashexport PATHexport LANG=zh_CN.UTF-8###top之后输入数字1,可以查看每颗CPU的情况.###先配置好mailx邮箱账号密码:#cat>/ ...

随机推荐

  1. iOS - SceneKit 3D引擎初探

    最近到处搜集资料研究3D最后还是决定锁定OC框架,找到的学习资料随后慢慢整理 SceneKit 是一个OC 框架,开始之前,先熟悉一下SceneKit 的三维坐标系: 很清楚的看到,SceneKit ...

  2. 【转载】Asp.Net MVC网站提交富文本HTML标签内容抛出异常

    今天开发一个ASP.NET MVC网站时,有个页面使用到了FCKEditor富文本编辑器,通过Post方式提交内容时候抛出异常,仔细分析后得出应该是服务器阻止了带有HTML标签内容的提交操作,ASP. ...

  3. axios拦截登陆过期请求多次

    request.interceptors.response.use( response => { console.log(response.data.code) // console.log(r ...

  4. ReactNative使用 react-navigation 详解

    react-navigation是官方主推的导航组件,致力于解决导航卡顿,数据传递,Tabbar和navigator布局,支持redux. 最新版本为3.x,大多文档介绍的是 1.x 或 2.x 的用 ...

  5. iOS NSString使用stringWithFormat的拼接

    ##保留2位小数点## //.2代表小数点后面保留2位(2代表保留的数量) NSString *string = [NSString stringWithFormat:@"%.2f" ...

  6. 阿里P7详细解答JVM性能调优之监控工具

    javap 和 javac javac -verbose 类名.java java -verbose 类名 javap -c 类名 javap -verbose 类名 JAVAP -HELP 用法: ...

  7. Linux 之 搜索

    locate - 文件名搜索命令 用于查找文件 格式为:locate 文件名 该命令用于查找符合条件的文件,它会去保存文件与目录名称的数据库内,查找合乎范本样式条件的文件或目录. 因为该命令是直接在数 ...

  8. HTML中使用图像

    插入图像 在页面中插入图像的标记只有一个,就是img标记. 语法为:<img src="图片地址" alt="下载失败时的替换文本" title='提示文 ...

  9. VMware15 桥接模式无法上网

    1. 检查宿主机网络连接是否成功 2. 检查宿主机网络适配器列表是否有多余的 loop 等回环类型的适配器(楼主在安装npcap程序后系统出现回环类型的适配器,即把包发回本地,所有的虚拟机的桥接模式都 ...

  10. SSH与ansible 部署方法与核心模块简介

    SSH与ansible 部署方法 部署环境 管理服务器 172.16.1.61 NFS服务器 172.16.1.31 备份服务器 172.16.1.41 1检查SSH服务是否运行并开启服务 netst ...