局域网python封装linux监控模块
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)
局域网