python3 系统监控脚本(2) (监控CPU,内存等信息)
#!/usr/bin/env python3
#create at 2018-12-04
'this is a system monitor scripts'
__author__="yjt" import os
import time
import sys
import datetime
import socket #用于获取主机名
import psutil #用于获取CPU等信息
import re #以下是变量值,自己定义
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]
return {"hostname":hostname,"user_conn":user_conn,"sys_start_time":start_time,"now_time":now_time,"sys_runtime":sys_runtime,"process":process}
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 = [],[],[],[],[],[]
for i in range(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])
info = psutil.Process(pid)
user = info.username()
process_name = info.exe()
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) #def cpu():
#以下获取的是逻辑CPU的瞬时值
with open('/proc/stat','r') as f:
cpu_item = f.readlines()
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_total = 0
for num in cpu_info:
if num.isdigit():
cpu_total += float(num)
cpu_free = float(cpu_info[4])
cpu_use = str(round((1 - cpu_free / cpu_total) * 100 ,2)) + '%'
# print(cpu_number,cpu_use) return {
"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":[{"cpu_number":cpu_number},{"cpu_use":cpu_use}],
"cpu_top10":[
({"user":l1[0]},{"pid":l2[0]},{"cpu_use":l3[0]},{"process_name":l4[0]},{"status":l5[0]}),
({"user":l1[1]},{"pid":l2[1]},{"cpu_use":l3[1]},{"process_name":l4[1]},{"status":l5[1]}),
({"user":l1[2]},{"pid":l2[2]},{"cpu_use":l3[2]},{"process_name":l4[2]},{"status":l5[2]}),
({"user":l1[3]},{"pid":l2[3]},{"cpu_use":l3[3]},{"process_name":l4[3]},{"status":l5[3]}),
({"user":l1[4]},{"pid":l2[4]},{"cpu_use":l3[4]},{"process_name":l4[4]},{"status":l5[4]}),
({"user":l1[1]},{"pid":l2[5]},{"cpu_use":l3[5]},{"process_name":l4[5]},{"status":l5[5]}),
({"user":l1[5]},{"pid":l2[6]},{"cpu_use":l3[6]},{"process_name":l4[6]},{"status":l5[6]}),
({"user":l1[7]},{"pid":l2[7]},{"cpu_use":l3[7]},{"process_name":l4[7]},{"status":l5[7]}),
({"user":l1[8]},{"pid":l2[8]},{"cpu_use":l3[8]},{"process_name":l4[8]},{"status":l5[8]}),
({"user":l1[9]},{"pid":l2[9]},{"cpu_use":l3[9]},{"process_name":l4[9]},{"status":l5[9]})
]
}
print('')
print(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 = [],[],[],[],[],[]
for i in range(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])
info = psutil.Process(pid)
user = info.username()
process_name = info.exe()
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)
return {
"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":[
({"user":l1[0]},{"pid":l2[0]},{"mem_use":l3[0]},{"process_name":l4[0]},{"status":l5[0]}),
({"user":l1[1]},{"pid":l2[1]},{"mem_use":l3[1]},{"process_name":l4[1]},{"status":l5[1]}),
({"user":l1[2]},{"pid":l2[2]},{"mem_use":l3[2]},{"process_name":l4[2]},{"status":l5[2]}),
({"user":l1[3]},{"pid":l2[3]},{"mem_use":l3[3]},{"process_name":l4[3]},{"status":l5[3]}),
({"user":l1[4]},{"pid":l2[4]},{"mem_use":l3[4]},{"process_name":l4[4]},{"status":l5[4]}),
({"user":l1[1]},{"pid":l2[5]},{"mem_use":l3[5]},{"process_name":l4[5]},{"status":l5[5]}),
({"user":l1[5]},{"pid":l2[6]},{"mem_use":l3[6]},{"process_name":l4[6]},{"status":l5[6]}),
({"user":l1[7]},{"pid":l2[7]},{"mem_use":l3[7]},{"process_name":l4[7]},{"status":l5[7]}),
({"user":l1[8]},{"pid":l2[8]},{"mem_use":l3[8]},{"process_name":l4[8]},{"status":l5[8]}),
({"user":l1[9]},{"pid":l2[9]},{"mem_use":l3[9]},{"process_name":l4[9]},{"status":l5[9]})
]
}
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)','(%)'))
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"
return {
"disk":[
{"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": [
{"mount":(d1)},
{"total":(d2)},
{"free":(d3)},
{"used":(d4)},
{"percent":(d5)}
]
}
print('')
print(diskinfo())
#diskinfo() #获取网卡信息
def netinfo():
net_item = list(psutil.net_if_addrs())
for net in net_item:
if re.search(r'bond.*|em.*|eno.*|^eth.*',net):
network_card = net
ip = psutil.net_if_addrs()[net][0].address
recv_1,recv_2,send_1,send_2=0,0,0,0
with open ('/proc/net/dev','r') as f:
net_info = f.readlines()
net_list = str(net_info).lower().split()
if net_list[0] == net:
recv_1 = float(net_list[1])
send_1 = float(net_list[9])
time.sleep(NETT)
with open ('/proc/net/dev','r') as f:
net_info = f.readlines()
net_list = str(net_info).lower().split()
if net_list[0] == net:
recv_2 = float(net_list[1])
send_2 = float(net_list[9])
received = str(recv_2/1024 - recv_1/1024) + "kb/s"
transmit = str(send_2/1024 - send_1/1024) + "kb/s"
return {
"network":[
{"network_card":network_card},
{"ip":ip},
{"transmit":transmit},
{"received":received}
]
}
print('')
print(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)
return {
"LISTEN":n1[0],
"ESTABLISHED":n1[1],
"TIME_WAIT":n1[2],
"CLOSE_WAIT":n1[3],
"LAST_ACK":n1[4],
"SYN_SENT":n1[5]
}
print('')
print(tcpinfo())
python3 系统监控脚本(2) (监控CPU,内存等信息)的更多相关文章
- tomcat监控脚本(监控进程,测试接口,告警动作为发送邮件)
服务器环境:centos7.2 64位 tomcat8.5.6 tomcat 监控功能共需要两个脚本,如下: initMonitor.sh #!/bin/sh #初始化监控脚本相关变量 export ...
- shell监控脚本实例—监控mysql主从复制
分享一例shell脚本,用于监测mysql数据库的主从复制,有需要的朋友不妨参考学习下. 转自:http://www.jbxue.com/article/14103.html(转载请注明出处) 本节内 ...
- Linux Shell 网络层监控脚本(监控包括:连接数、句柄数及根据监控反馈结果分析)
脚本监控: 获取最大句柄数的进程: 链接分析: 脚本片段: case "$handle" in 2) echo "The handle of the process : ...
- Java程序员也应该知道的系统知识系列之(网卡,cpu,内存,硬盘,虚拟化)
https://yq.aliyun.com/articles/1718?spm=5176.100240.searchblog.16.UaGd04 https://yq.aliyun.com/artic ...
- Zabbix Linux http 监控脚本
说明:自定义监控脚本,监控内存是否启用主进程 创建文件:vim check_http.sh #!/bin/bash result=`ps -ef | grep httpd | grep -v grep ...
- linux系统CPU,内存,磁盘,网络流量监控脚本
前序 1,#cat /proc/stat/ 信息包含了所有CPU活动的信息,该文件中的所有值都是从系统启动开始累积到当前时刻 2,#vmstat –s 或者#vmstat 虚拟内存统计 3, #cat ...
- Python 监控脚本(硬盘、cpu、内存、网卡、进程)
#磁盘使用率disk = psutil.disk_partitions()for i in disk: print "磁盘:%s 分区格式:%s"%(i.device,i ...
- Linux 性能监控之CPU&内存&I/O监控Shell脚本2
Linux 性能监控之CPU&内存&I/O监控Shell脚本2 by:授客 QQ:1033553122 思路: 捕获数据->停止捕获数据->提取数据 备注:一些命令的输 ...
- Linux 性能监控之CPU&内存&I/O监控Shell脚本1
Linux 性能监控之CPU&内存&I/O监控Shell脚本1 by:授客 QQ:1033553122 #!/bin/bash # 获取要监控的本地服务器IP地址 IP=`if ...
- linux系统中的基础监控(硬盘,内存,系统负载,CPU,网络等)
Linux系统常见日常监控 系统信息 查看 CentOS 版本号:cat /etc/redhat-release 综合监控 nmon 系统负载 命令:w(判断整体瓶颈) 12:04:52 up 1 ...
随机推荐
- js同时获取多个共同class内容标签内容集合
1.获取标签内容 标签如下: <img image-code="#qq_1_gif#" class="emoji_icon" src="i ...
- 如何实现高性能的IO及其原理?
程序运行在内存以及IO的体现 首先普及一下常识,如图所示: 1.在整个内存空间中,跑着各种各样的程序,有Java程序.C程序,他们共用一块内存空间. 2.对于Java程序,JVM会申请一块堆空间,通过 ...
- 三:MySQL系列之SQL查询
本篇主要介绍使用SQL查询数据库的操作,包括条件查询.排序.聚合函数.分组.分页.连接查询.自关联.子查询等命令操作. 首先我们先创建一个数据库.数据表.插入字段: --------这部分在上篇以及介 ...
- Linux命令——column
参考:Viewing Linux output in columns 功能 column命令把他的输入格式化多列显示.输入可以是文件,也可以是标准输入. 列优先,从左到右 显示的时候首先填满最左列,然 ...
- HTML中使用图像
插入图像 在页面中插入图像的标记只有一个,就是img标记. 语法为:<img src="图片地址" alt="下载失败时的替换文本" title='提示文 ...
- 商汤开源的mmdetection技术报告
目录 1. 简介 2. 支持的算法 3. 框架与架构 6. 相关链接 前言:让我惊艳的几个库: ultralytics的yolov3,在一众yolov3的pytorch版本实现算法中脱颖而出,收到开发 ...
- CUDA中确定你显卡的thread和block数
CUDA中确定你显卡的thread和block数 在进行并行计算时, 你的显卡所支持创建的thread数与block数是有限制的, 因此, 需要自己提前确定够用, 再进行计算, 否则, 你需要改进你的 ...
- Linux用ctrl + r 查找以前(历史)输入的命令
在Linux系统下一直用上下键查找以前输入的命令,这个找刚输入不久的命令还是很方便的,但是比较久远的命令,用上下键效率就不高了.那个history命令也是个花架子,虽然功能多,但不好用,网上找了下,发 ...
- vue-cli 安装使用
全局安装vue-cli,使用命令npm install -g vue-cli. 下载模板代码,使用命令vue init webpack my-project,之后会有一些询问,按需填写即可. 最后会看 ...
- psql主主复制
主主是mysql的概念,通常在mysql中为保证事务一致也是一台主写,一台做读.pg主从可以互为切换 之前没做数据库部署这部分,一个同事离职暂时没人,接受过来的!mysql做的是主主复制,我理解是可以 ...