使用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 ...
随机推荐
- C# mailKit 发邮件 简单代码
public static async Task<bool> SendMailAsync22(string Name, string receive, string sender, str ...
- openstack-neutron(2)
VXLAN 独立于底层的网络拓扑:反过来,两个 VTEP 之间的底层 IP 网络也独立于 VXLAN.VXLAN 数据包是根据外层的 IP header 路由的,该 header 将两端的 VTEP ...
- NodeList和HTMLCollection区别
关于DOM集合接口,主要不同在于HTMLCollection是元素集合而NodeList是节点集合(既包括元素,也包括节点). 规定一下结果是: . node.childNodes 结果返回类型是 N ...
- js几种数组排序及sort的实现
给出以下数组,并进行排序处理 var arr = new Array('1','3','8','2','3','5'); 1. 插入法排序 Array.prototype.csSort = funct ...
- 【SpringMVC】Validation校验
一.概述 二.步骤 2.1 引入 Hibernate Validator 2.2 配置 2.3 创建CustomValidationMessages 2.4 校验规则 2.5 捕获错误 2.6 在页面 ...
- 四、DDL常见操作汇总
DDL: Data Define Language 数据定义语言,主要用来对数据库.表进行一些管理操作.如:建库.删库.建表.修改表.删除表.对列的增删改等. 一.库的管理 1.创建库 create ...
- CSS之特性相关
一.css的继承性与层叠性 继承性: 面向对象语言都会存在继承的概念,在面向对象语言中,继承的特点:继承了父类的属性和方法.那么我们现在主要研究css,css就是在设置属性的.不会牵扯到方法的层面. ...
- Linux命令——ls
15 Interview Questions on Linux “ls” Command – Part 1 10 Useful ‘ls’ Command Interview Questions – P ...
- 系统API是原子操作吗?
系统API里面也会有简单的指令,类似于a++这种,我们认为的简单指令对应到汇编可能很多条.执行在其中某一条汇编的时候可能就切换进程了.切换进程可能发生在用户态(虚拟内存的用户空间),也可能发生在内核态 ...
- RT-Thread--线程间同步
线程间同步 一个线程从传感器中接收数据并且将数据写到共享内存中,同时另一个线程周期性的从共享内存中读取数据并发送去显示,下图描述了两个线程间的数据传递: 如果对共享内存的访问不是排他性的,那么各个线程 ...