使用python2 对服务器监控(监控内存,CPU,网卡流量等)
#!/usr/bin/env python
# -*- coding:utf- -*-
#create at --
'this is a system monitor scripts'
__author__="yjt" import os
import time
import sys
import datetime
import socket
import psutil
import re
import json
import commands #以下是变量值,自己定义
CPUT = #计算CPU利用率的时间间隔
NETT = #计算网卡流量的时间间隔 #获取系统基本信息
def baseinfo():
hostname = socket.gethostname()
user_conn = len(psutil.users())
sys_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")
sys_runtime = os.popen('w').readline().split('users')[].split('up')[].strip()[:-].strip()[:-]
process = os.popen('ps -ef |wc -l').read().split()[]
value_base = {
"baseinfo":
{
"hostname":hostname,
"user_conn":user_conn,
"sys_start_time":sys_start_time,
"now_time":now_time,
"sys_runtime":sys_runtime,
"process":process
}
}
return value_base
#print(baseinfo())
def cpuinfo():
#以下三项值获取瞬时值
#user_cpu_percent = psutil.cpu_times_percent().user #用户使用CPU百分比
#sys_cpu_percent = psutil.cpu_times_percent().system #系统使用cpu百分比
#free_cpu_percent = psutil.cpu_times_percent().idle #CPU空闲百分比 user_time = psutil.cpu_times().user #用户态使用CPU时间
sys_time = psutil.cpu_times().system #系统态使用CPU时间
idle_time = psutil.cpu_times().idle #CPU空闲时间
total_cpu =
for i in range(len(psutil.cpu_times())):
total_cpu += psutil.cpu_times()[i]
user_cpu_percent = float(user_time) / total_cpu *
sys_cpu_percent = float(sys_time) / total_cpu *
free_cpu_percent = float(idle_time) / total_cpu *
#获取CPU多少秒内的平均使用率
cpu_ave_percent = psutil.cpu_percent(CPUT)
#CPU平均负载
cpu_ave_load = ' '.join(os.popen('uptime').readline().split(":")[-].split())
#获取系统逻辑cpu个数和物理CPU个数
logical_cpu = psutil.cpu_count()
pyhsical_cpu = psutil.cpu_count(logical=False)
#获取系统占用cpu最高的前20个进程
i,process_user,pid,process_cpu_percent,process_name,process_status = ,[],[],[],[],[]
while i < :
try:
process_info = psutil.Process(int(os.popen("ps aux|grep -v PID|sort -rn -k +3").readlines()[i].split()[])) #获取进程信息
pid_bak = process_info.pid #获取pid
process_status_bak = process_info.status()#获取进程状态
process_user_bak = process_info.username() #获取进程用户
process_name_bak = ' '.join(os.popen('ps aux |grep -v PID|sort -k3 -nr').readlines()[i].split()[:]) #获取进程名字
process_cpu_percent_bak = ''.join(os.popen('ps aux |grep -v PID|sort -k3 -nr').readlines()[i].split()[]) #获取进程CPU使用 process_cpu_percent.append(process_cpu_percent_bak)
pid.append(pid_bak)
process_status.append(process_status_bak)
process_user.append(process_user_bak)
process_name.append(process_name_bak) i +=
except:
pass
continue
cpu_info = []
cpu_list = ["user","pid","cpu_use","process_cmd","status"]
cpu_value = list(zip(process_user,pid,process_cpu_percent,process_name,process_status))
cpu_value_len = len(cpu_value)
for i in range(cpu_value_len):
cpu_info.append(dict(zip(cpu_list,cpu_value[i])))
#print(cpu_info)
#获取逻辑CPU个数以及使用率
cpu_item = commands.getoutput('cat /proc/stat').split('\n')
cpu_number,cpu_use_percent =[],[]
for i in cpu_item:
if re.search("^cpu[0-9]{1,}",i):
cpu_logi_info = i.split()
cpu_number.append(cpu_logi_info[])
cpu_total =
for num in cpu_logi_info[:]:
cpu_total += float(num)
cpu_free = float(cpu_logi_info[])
cpu_use = ( - cpu_free / cpu_total) *
cpu_use_percent.append(cpu_use)
cpu_logi_info = []
cpu_logi_list = ["cpu_number","cpu_use_percent"]
cpu_logi_value = list(zip(cpu_number,cpu_use_percent))
cpu_logi_len = len(cpu_logi_value)
for i in range(cpu_logi_len):
cpu_logi_info.append(dict(zip(cpu_logi_list,cpu_logi_value[i])))
value_cpuinfo = {
"cpuinfo":{
"ave_load":cpu_ave_load,
"user_use":user_cpu_percent,
"sys_use":sys_cpu_percent,
"idle":free_cpu_percent,
"cpu_pre":cpu_ave_percent,
"logical_cpu":logical_cpu,
"pyhsical_cpu":pyhsical_cpu,
"logical_cpu_use_info":cpu_logi_info,
"cpu_top20":cpu_info
}
}
return value_cpuinfo #print(cpuinfo())
#获取memory信息
def meminfo():
total_mem = psutil.virtual_memory().total / /
use_mem = psutil.virtual_memory().used / /
mem_percent = psutil.virtual_memory().percent
free_mem = psutil.virtual_memory().free / /
swap_mem = psutil.swap_memory().total / /
swap_use = psutil.swap_memory().used / /
swap_free = psutil.swap_memory().free / /
swap_percent = psutil.swap_memory().percent
l1,l2,l3,l4,l5,l6 = [],[],[],[],[],[]
i =
while i < :
try:
info = psutil.Process(int(os.popen('ps aux|grep -v PID|sort -rn -k +4').readlines()[i].split()[]))
pid = info.pid
user = info.username()
process_name = ' '.join(os.popen('ps aux |grep -v PID|sort -k4 -nr').readlines()[i].split()[:])
mem_use = info.memory_percent()
status = info.status()
l1.append(user)
l2.append(pid)
l3.append(mem_use)
l4.append(process_name)
l5.append(status)
i +=
except:
pass
continue
m0 = []
l = ["user","pid","mem_use","process_cmd","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_meminfo = {"mem_info":{
"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_top20":m0
}}
return value_meminfo
#print(meminfo())
#获取磁盘信息
def diskinfo():
disk_num = int(''.join(os.popen("ls /dev/sd[a-z]|wc -l").readlines()[].split()))
d1,d2,d3,d4,d5 = [],[],[],[],[]
disk_total,disk_used,disk_free = ,,
disk_len = len(psutil.disk_partitions())
for info in range(disk_len):
disk = psutil.disk_partitions()[info][]
if len(disk) < :
d1.append(disk)
total = psutil.disk_usage(disk).total //
total_num = psutil.disk_usage(disk).total
disk_total += total_num
free = psutil.disk_usage(disk).free //
disk_free += psutil.disk_usage(disk).free
used = psutil.disk_usage(disk).used //
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_total = disk_total //
disk_free = disk_free //
disk_used = disk_used //
disk_used_percent = float(disk_used) / disk_total *
#disk_free_percent = round(float(disk_free) / disk_total * ,)
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_info":{
"disk":[
{"disk_num":disk_num},
{"disk_total":disk_total},
{"disk_used":disk_used},
{"disk_free":disk_free},
{"disk_used_percent":disk_used_percent}
],
"partitions":d0
}}
return value_disk
#print(diskinfo())
#获取网卡信息
def netinfo():
net_len = len(commands.getoutput('cat /proc/net/dev').split('\n')[:])
net_card,rece_flow,tran_flow,net_ip = [],[],[],[]
rece_1,rece_2,tran_1,tran_2 = [],[],[],[]
for i in range(net_len):
net_cards = commands.getoutput('cat /proc/net/dev').split('\n')[:][i].split(':')[].strip()
net_card.append(net_cards)
ip = psutil.net_if_addrs()[net_card[i]][].address
ip_len = len(ip.split('.'))
if ip_len == :
ip =ip
else:
ip = 'null'
net_ip.append(ip)
net_info_1 = commands.getoutput('cat /proc/net/dev').split('\n')[:][i].split(':')[].split()
rece_1.append(int(net_info_1[]))
tran_1.append(int(net_info_1[]))
time.sleep(NETT)
for i in range(net_len):
net_info_2 = commands.getoutput('cat /proc/net/dev').split('\n')[:][i].split(':')[].split()
rece_2.append(int(net_info_2[]))
tran_2.append(int(net_info_2[]))
for i in range(len(rece_1)):
rece = float(rece_2[i] - rece_1[i]) //NETT
tran = float(tran_2[i] - tran_1[i]) //NETT
rece_flow.append(rece)
tran_flow.append(tran)
net_status = []
net_status_1 = 'PhysicsNetwork'
net_status_2 = 'VirtualNetwork'
net_name = commands.getoutput('ls /sys/devices/virtual/net/').split('\n')
for i in net_card:
if i in net_name:
net_status.append(net_status_2)
else:
net_status.append(net_status_1)
net_data = []
net_list = ["network_card","ip","transmit","received",'net_type']
net_value = list(zip(net_card,net_ip,tran_flow,rece_flow,net_status))
list_len = len(net_value)
for i in range(list_len):
net_data.append(dict(zip(net_list,net_value[i])))
value_net = {"net_info":{
"network":net_data
}}
return value_net
#print(net_card,net_ip,rece_flow,tran_flow)
#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)
value_tcp = {"tcp_info":{
"LISTEN":n1[],
"ESTABLISHED":n1[],
"TIME_WAIT":n1[],
"CLOSE_WAIT":n1[],
"LAST_ACK":n1[],
"SYN_SENT":n1[]
}}
return value_tcp value_json = {}
#获取baseinfo的值
value_baseinfo = baseinfo()
value_json.update(value_baseinfo)
#获取CPU的值
value_cpuinfo = cpuinfo()
value_json.update(value_cpuinfo)
#获取memory的值
value_meminfo = meminfo()
value_json.update(value_meminfo)
#获取disk的值
value_diskinfo = diskinfo()
value_json.update(value_diskinfo)
#获取network的值
value_netinfo = netinfo()
value_json.update(value_netinfo)
#获取tcp的值
value_tcpinfo = tcpinfo()
value_json.update(value_tcpinfo)
#格式化成json
monitor_info = json.dumps(value_json)
print(monitor_info)
住:该脚本不适用于python3,如果要适用于python3,需要适当的修改该脚本,博客里面有关于使用python3监控系统信息的脚本,有需要请查看。
使用python2 对服务器监控(监控内存,CPU,网卡流量等)的更多相关文章
- SqlServer:SqlServer(服务器磁盘监控,创建管理员账号分配权,添加链接服务器,查询CPU,查询内存)
1.服务器磁盘监控 (1)总链接服务上开启所有链接服务器的RPC: ----------------------总链接服务器上面,开启每个服务器的RPC --exec sp_serveroption ...
- Linux常用命令及详细说明 — 结合工作(侧重性能监控,包括CPU、内存、IO、网络、磁盘等)
(一)Linux监控的几个常用命令(对于服务器后端程序猿很重要,必须掌握): 命令 功能 命令 功能 iostat 统计CPU及网络.设备和分区IO的数据 vmstat 展示给定时间服务器的状态值(包 ...
- linux系统CPU,内存,磁盘,网络流量监控脚本
前序 1,#cat /proc/stat/ 信息包含了所有CPU活动的信息,该文件中的所有值都是从系统启动开始累积到当前时刻 2,#vmstat –s 或者#vmstat 虚拟内存统计 3, #cat ...
- 从Container内存监控限制到CPU使用率限制方案
转自:http://blog.csdn.net/Androidlushangderen/article/details/50282593 前言 最近在运维我们部门的hadoop集群时,发现了很多Job ...
- zabbix监控进程的CPU和内存占用量,进程数量
由于需要对公司特定服务进行监控,于是,通过编写脚本获取各个进程占用系统资源的信息,从而使用zabbix采集到这些数据进行特定进程的基础监控. 我这主要需要监控的程序如下: nginx redis my ...
- Zabbix4.0.1使用自带模板监控Linux主机 CPU、内存、硬盘、网卡
环境: 前提已经安装好zabbix服务端.zabbix客户端, zabbix_server端ip和主机名信息: ip:192.168.1.204 hostname: www.test.com ...
- Apache服务器性能监控
Apache服务器性能监控 1.使用自带mod_status模块监控 1)加载mod_status.so 模块 在httpd.conf中打开LoadModule status_module modul ...
- 用 Python 脚本实现对 Linux 服务器的监控
目前 Linux 下有一些使用 Python 语言编写的 Linux 系统监控工具 比如 inotify-sync(文件系统安全监控软件).glances(资源监控工具)在实际工作中,Linux 系统 ...
- Linux 服务器系统监控脚本 Shell【转】
转自: Linux 服务器系统监控脚本 Shell - 今日头条(www.toutiao.com)http://www.toutiao.com/i6373134402163048961/ 本程序在Ce ...
随机推荐
- CentOS 6.x 配置iptables
CentOS 6.x 配置iptables 来源 https://www.cnblogs.com/chillax1314/p/7976067.html iptables -P INPUT DROP-- ...
- iview的table组件中加入超链接组件,可编辑组件,选择组件,日期组件
这篇文章主要介绍了iview的table组件中使用选择框,日期,可编辑表格,超链接等组件. 1.select选择组件 // tableColumn数组响应对象需要传入一个固定的option数组,如果该 ...
- Go 操作 Mysql(一)
关于 Go 的标准库 database/sql 和 sqlx database/sql 是 Go 操作数据库的标准库之一,它提供了一系列接口方法,用于访问数据库(mysql,sqllite,oralc ...
- Python——pip的安装与使用
pip 是 Python 包管理工具,该工具提供了对Python 包的查找.下载.安装.卸载的功能.目前如果你在 python.org 下载最新版本的安装包,则是已经自带了该工具.Python 2.7 ...
- 【转载】Request对象的作用以及常见属性
Request对象是Asp.Net应用程序中非常重要的一个内置对象,其作用主要用于服务器端获取客户端提交过来的相应信息,比较常用的有使用Requset对象获取用户提交的html表单信息,Request ...
- 【SpringMVC】RESTful支持
一.概述 1.1 什么是RESTful 1.2 URL的RESTful实现 二.演示 2.1 需求 2.2 第一步更改DispatcherServlet配置 2.3 第二步参数通过url传递 2.4 ...
- js中的forEach和map的区别
我们先来看两者之间的相同之处 var arr = ['a','b','c','d']; arr.forEach(function(item,index,arr){ //item表示数组中的每一项,in ...
- Go语言中的IO操作、Flag包以及urfave/cli命令行框架
一.格式化输入和输出 1.从终端获取用户的输入 fmt.Scanf 空格作为分隔符,占位符和格式化输出的一致 fmt.Scan 从终端获取用户的输入,存储在Scanln中的参数里,空格和换行符作为 ...
- pringBoot2.0启用https协议
SpringBoot2.0之后,启用https协议的方式与1.*时有点儿不同,贴一下代码. 我的代码能够根据配置参数中的condition.http2https,确定是否启用https协议,如果启用h ...
- Python读excel——xlrd
Python读excel——xlrd Python读取Excel表格,相比xlwt来说,xlrd提供的接口比较多,但过程也有几个比较麻烦的问题,比如读取日期.读合并单元格内容.下面先看看基本的操作: ...