局域网python封装linux监控模块

2017-05-26

sutil是一个跨平台库,能够轻松实现获取系统运行的进程、系统利用率、CPU信息、内存信息、磁盘信息、网络信息。下面是小编收集整理的局域网python封装linux监控模块,希望对大家有帮助~~

局域网python封装linux监控模块

一、简介

psutil是一个跨平台库,能够轻松实现获取系统运行的进程、系统利用率、CPU信息、内存信息、磁盘信息、网络信息。它主要应用于系统监控,分析和限制系统资源及进程管理。以下是小编实现的网页版效果。

二、安装步骤

1.开发环境:centos 7

2.开发语言:python 2.7.5

3.依赖软件

(1).安装setuptools

下载地址:https://pypi.python.org/pypi/setuptools

#wget https://pypi.python.org/packages/xxx/setuptools-xxx.tar.gz

#tar xf setuptools-xxx.tar.gz

#cd setuptools-xxx

#python setup.py install

(2).安装pip

下载地址:https://pypi.python.org/pypi/pip

#wget https://pypi.python.org/packages/xxx/pip-xxx.tar.gz

#tar xf pip-xxx.tar.gz

#cd pip-xxx

#python setup.py install

(3).安装psutil

#pip install psutil

4.封装CPU信息

info = psutil.cpu_times()

res = dict(

user=info.user, # 执行用户进程的时间百分比

system=info.system, # 执行内核进程和中断的时间百分比

iowait=info.iowait, # 由于IO等待而使CPU处于idle(空闲)状态的时间百分比

idle=info.idle, # CPU处于idle状态的时间百分比

cpucount1=psutil.cpu_count(), # 获取CPU的逻辑个数

cpucount2=psutil.cpu_count(logical=False) # 获取CPU的物理个数

)

5.封装内存信息

meminfo = psutil.virtual_memory()

swapinfo = psutil.swap_memory()

res = dict(

mem=dict(

total=round(meminfo.total / (1024 ** 3), 2), # 内存总数

available=round(meminfo.available / (1024 ** 3), 2), # 可用内存数

percent=meminfo.percent,

used=round(meminfo.used / (1024 ** 3), 2), # 已使用的内存数

free=round(meminfo.free / (1024 ** 3), 2), # 空闲内存数

active=round(meminfo.active / (1024 ** 3), 2), # 活跃内存数

inactive=round(meminfo.inactive / (1024 ** 3), 2), # 不活跃内存数

buffers=round(meminfo.buffers / (1024 ** 3), 2), # 缓冲使用数

cached=round(meminfo.cached / (1024 ** 3), 2), # 缓存使用数

shared=round(meminfo.shared / (1024 ** 3), 2) # 共享内存数

),

swap=dict(

total=round(swapinfo.total / (1024 ** 3), 2), # 交换分区总数

used=round(swapinfo.used / (1024 ** 3), 2), # 已使用的交换分区数

free=round(swapinfo.free / (1024 ** 3), 2), # 空闲交换分区数

percent=swapinfo.percent,

sin=round(swapinfo.sin / (1024 ** 3), 2), # 输入数

sout=round(swapinfo.sout / (1024 ** 3), 2) # 输出数

)

)

6.封装磁盘信息

partinfo = psutil.disk_usage("/") #获取磁盘完整信息

diskinfo = dict(

free=round(partinfo.free / (1024 ** 3), 2), #磁盘剩余量

used=round(partinfo.used / (1024 ** 3), 2),#磁盘使用量

total=round(partinfo.total / (1024 ** 3), 2),#磁盘总量

)

7.封装网络信息

allnetio = psutil.net_io_counters() # 获取网络总的IO信息

onenetio = psutil.net_io_counters(pernic=True) # 输出每个网络接口的IO信息

res = dict(

allnetio=dict(

bytes_sent=allnetio.bytes_sent, # 发送字节数

bytes_recv=allnetio.bytes_recv, # 接受字节数

packets_sent=allnetio.packets_sent, # 发送数据包数

packets_recv=allnetio.packets_recv, # 接受数据包数

errin=allnetio.errin,

errout=allnetio.errout,

dropin=allnetio.dropin,

dropout=allnetio.dropout

),

onenetio=[

dict(

name=v[0],

bytes_sent=v[1].bytes_sent, # 发送字节数

bytes_recv=v[1].bytes_recv, # 接受字节数

packets_sent=v[1].packets_sent, # 发送数据包数

packets_recv=v[1].packets_recv, # 接受数据包数

errin=v[1].errin,

errout=v[1].errout,

dropin=v[1].dropin,

dropout=v[1].dropout

)

for v in onenetio.iteritems()

]

)

8.用户信息

usersinfo = psutil.users() # 当前登录系统的用户信息

res = dict(

usersinfo=[

dict(

name=v.name, # 当前登录用户名

terminal=v.terminal, # 打开终端

host=v.host, # 登录IP地址

started=datetime.datetime.fromtimestamp(v.started).strftime("%Y-%m-%d %H:%M:%S") # 登录时间

)

for v in usersinfo

],

boottime=datetime.datetime.fromtimestamp(psutil.boot_time()).strftime("%Y-%m-%d %H:%M:%S") # 开机时间

)

9.进程信息

pidsinfo = psutil.pids() # 列出所有进程pid

pinfo = map(lambda v: psutil.Process(v), pidsinfo) # 实例化进程状态

res = dict(

pinfo=[

dict(

pid=v[0], # 进程pid

name=v[1].name(), # 进程名称

exe=v[1].exe(), # 进程bin路径

cwd=v[1].cwd(), # 进程工作目录绝对路径

status=v[1].status(), # 进程状态

create_time=datetime.datetime.fromtimestamp(v[1].create_time()).strftime("%Y-%m-%d %H:%M:%S"),

# 进程创建时间

uids=dict(

real=v[1].uids().real,

effective=v[1].uids().effective,

saved=v[1].uids().saved,

), # 进程uid信息

gids=dict(

real=v[1].gids().real,

effective=v[1].gids().effective,

saved=v[1].gids().saved,

), # 进程gid信息

cpu_times=dict(

user=v[1].cpu_times().user, # 用户cpu时间

system=v[1].cpu_times().system, # 系统cpu时间

), # 进程cpu时间

cpu_affinity=v[1].cpu_affinity(), # 进程cpu亲和度

memory_percent=round(v[1].memory_percent(), 2), # 进程内存利用率

memory_info=dict(

rss=v[1].memory_info().rss, # 进程内存rss信息

vms=v[1].memory_info().vms # 进程内存vms信息

), # 进程内存信息

io_counters=dict(

read_count=v[1].io_counters().read_count, # 读IO数

write_count=v[1].io_counters().write_count, # 写IO数

read_bytes=v[1].io_counters().read_bytes, # IO读字节数

write_bytes=v[1].io_counters().write_bytes, # IO写字节数

), # 进程IO信息

num_threads=v[1].num_threads(), # 进程开启的线程数

# connections = v[1].connections()#打开进程socket的namedutples列表

)

for v in zip(pidsinfo, pinfo)

]

)

res["pinfo"] = sorted(res["pinfo"], key=lambda v: v["memory_percent"], reverse=True)

局域网

更多相关阅读

最新发布的文章