用Python脚本监控VPS服务器磁盘IO与网络流量
用Python脚本监控VPS服务器磁盘IO与网络流量
想象给10岁孩子解释:VPS服务器就像一个24小时运转的超级仓库,里面的货物(数据)不断被搬进搬出。磁盘IO是仓库内部搬运货物的速度——搬得太慢会堵,搬得太急也会乱;网络流量则是仓库通过公路(网络)收发货物的总量——车太多容易堵车,车太少可能生意冷清。我们可以用Python写个小管家,时刻盯着这两个关键数据。

为什么要监控这两个指标?
用VPS服务器时,磁盘IO和网络流量就像健康检查的血压和心率。磁盘IO(Input/Output,输入输出)反映了硬盘读写数据的快慢:如果连续写入速度突然飙升,可能是某个程序在疯狂写日志;要是读取速度持续低迷,应用响应大概率会变慢。网络流量则是服务器与外界的“对话量”——下载文件、访问网页都会产生流量,流量激增可能是用户增长的好事,也可能是被恶意攻击的信号。监控它们,就像给服务器装了“电子体温计”,异常情况能第一时间发现。
动手前的准备
要写这个监控脚本,首先得确保VPS服务器装了Python环境(一般Linux系统默认已安装)。关键工具是`psutil`(跨平台进程和系统监控库),它能轻松获取磁盘、网络等硬件的实时数据。安装命令很简单:
pip install psutil
编写监控脚本
下面是一个能实时显示磁盘读写速度、网络收发速度的Python脚本:
import psutil
import time
def get_disk_io():
"""获取当前磁盘读写字节数"""
disk_io = psutil.disk_io_counters()
return disk_io.read_bytes, disk_io.write_bytes
def get_network_io():
"""获取当前网络收发字节数"""
network_io = psutil.net_io_counters()
return network_io.bytes_sent, network_io.bytes_recv
def monitor():
# 记录初始状态
prev_disk_read, prev_disk_write = get_disk_io()
prev_net_sent, prev_net_recv = get_network_io()
while True:
time.sleep(1) # 每秒采样一次
# 获取当前状态
current_disk_read, current_disk_write = get_disk_io()
current_net_sent, current_net_recv = get_network_io()
# 计算速度(转换为KB/秒)
disk_read_speed = (current_disk_read - prev_disk_read) / 1024
disk_write_speed = (current_disk_write - prev_disk_write) / 1024
net_sent_speed = (current_net_sent - prev_net_sent) / 1024
net_recv_speed = (current_net_recv - prev_net_recv) / 1024
# 打印结果
print(f"磁盘读取速度: {disk_read_speed:.2f} KB/s | 磁盘写入速度: {disk_write_speed:.2f} KB/s")
print(f"网络发送速度: {net_sent_speed:.2f} KB/s | 网络接收速度: {net_recv_speed:.2f} KB/s\n")
# 更新记录值
prev_disk_read, prev_disk_write = current_disk_read, current_disk_write
prev_net_sent, prev_net_recv = current_net_sent, current_net_recv
if __name__ == "__main__":
monitor()
脚本的逻辑像秒表计时:先记一次初始值,隔1秒再记一次,两次的差值就是这1秒内的变化量,除以时间(1秒)就得到速度。比如,磁盘读取速度=(当前读取字节数-1秒前读取字节数)/1024(转换为KB)。
运行与扩展
把脚本保存成`monitor.py`,在VPS服务器终端输入命令:
python monitor.py
屏幕会每秒刷新一次数据。如果想长期监控,可以把输出重定向到文件(`python monitor.py > log.txt`);想更智能的话,还能加阈值判断——比如磁盘写入速度超过1000KB/s时,自动发邮件提醒。
有了这个脚本,VPS服务器的“健康状况”一目了然,无论是排查程序异常,还是规划硬件升级,都能更有依据。