一文讲清怎么用Python实现Linux系统CPU、内存和磁盘监控管理工具
摘要:在日常的服务器运维和管理工作当中,监控系统资源的使用情况是非常重要的一项任务。特别是在Linux服务器环境中,如果我们能及时了解CPU、内存和硬盘的使用状态,就能更快发现系统的性能瓶颈,提前预防可能出现的问题,从而保障业务稳定、持续地运行。很多人可能会觉得,想要实现这样的监控,必须依赖专业的监控软件才行。其实不然,用Python同样可以轻松开发出一个实用的Linux系统资源监控工具。
Python凭借简洁的语法、丰富的库和强大的数据处理能力,成为Linux系统管理的理想工具。通过Python,我们可以轻松实现对CPU使用率、内存占用、磁盘空间等系统资源的监控与分析。
本文主要讲解如何用Python实现Linux系统CPU、内存和磁盘资源的监控管理,帮助读者掌握实用技能,提升系统运维效率。详细内容请查阅下文。
一、访问Linux系统
1.登录Linux系统
2.查看Python环境
二、Linux系统监控管理工具
说明:这里是一个用 Python 编写的Linux系统的CPU、内存和磁盘等资源管理工具。
1.基本需求
说明:这里要实现的监控工具,主要有以下功能:
(1)实时获取CPU、内存、磁盘的使用情况;
(2)可以定时采集数据,并保存历史记录;
(3)当资源使用率超过阈值时,自动告警(如邮件、日志等);
(4)有简单的命令行或Web界面,方便查看和管理。
2.Python核心库
说明:本例主要用到以下Python库,以实现上述基本需求。
(1)psutil:获取系统资源信息的利器,跨平台,功能强大。
(2)time:用于定时采集。
(3)flask:实现Web界面(可选)。
(4)matplotlib/pandas:数据可视化和历史数据分析(可选)。
3.Linux监控管理工具的实现步骤
步骤一:获取系统资源信息
(1)获取CPU使用率
import psutil
# 获取CPU总使用率(百分比)
cpu_percent = psutil.cpu_percent(interval=1)
print(f"CPU使用率:{cpu_percent}%")
# 获取每个CPU核心的使用率
cpu_per_core = psutil.cpu_percent(interval=1, percpu=True)
print(f"每个核心使用率:{cpu_per_core}")
(2)获取内存使用情况
mem = psutil.virtual_memory()
print(f"内存总量:{mem.total / 1024 / 1024:.2f} MB")
print(f"已用内存:{mem.used / 1024 / 1024:.2f} MB")
print(f"剩余内存:{mem.available / 1024 / 1024:.2f} MB")
print(f"内存使用率:{mem.percent}%")
(3)获取磁盘使用情况
disk = psutil.disk_usage('/')
print(f"磁盘总量:{disk.total / 1024 / 1024 / 1024:.2f} GB")
print(f"已用磁盘:{disk.used / 1024 / 1024 / 1024:.2f} GB")
print(f"剩余磁盘:{disk.free / 1024 / 1024 / 1024:.2f} GB")
print(f"磁盘使用率:{disk.percent}%")
(4)获取磁盘IO和网络IO
# 获取磁盘IO
disk_io = psutil.disk_io_counters()
print(f"读字节数:{disk_io.read_bytes}, 写字节数:{disk_io.write_bytes}")
# 获取网络IO
net_io = psutil.net_io_counters()
print(f"发送字节数:{net_io.bytes_sent}, 接收字节数:{net_io.bytes_recv}")
步骤二:定时采集与历史记录
说明:这里主要是用一个循环,每隔一段时间采集一次数据,并保存到本地文件(如CSV)中。
import time
import csv
def collect_and_save(interval=60, filename="sys_monitor.csv"):
with open(filename, "a", newline='') as f:
writer = csv.writer(f)
# 写表头(只写一次)
if f.tell() == 0:
writer.writerow(["时间", "CPU使用率", "内存使用率", "磁盘使用率"])
while True:
now = time.strftime("%Y-%m-%d %H:%M:%S")
cpu = psutil.cpu_percent(interval=1)
mem = psutil.virtual_memory().percent
disk = psutil.disk_usage('/').percent
writer.writerow([now, cpu, mem, disk])
f.flush()
print(f"{now} | CPU: {cpu}% | 内存: {mem}% | 磁盘: {disk}%")
time.sleep(interval - 1) # 减去cpu_percent的1秒
# 下方取消注释即可运行
# collect_and_save()
步骤三:自动告警功能
说明:当某项资源使用率超过阈值时,可以自动发送邮件或写入日志,本实例主要使用的是集成到监控循环日志。
def monitor_with_alert(cpu_th=90, mem_th=90, disk_th=90):
while True:
cpu = psutil.cpu_percent(interval=1)
mem = psutil.virtual_memory().percent
disk = psutil.disk_usage('/').percent
alert_msgs = []
if cpu > cpu_th:
alert_msgs.append(f"CPU使用率过高:{cpu}%")
if mem > mem_th:
alert_msgs.append(f"内存使用率过高:{mem}%")
if disk > disk_th:
alert_msgs.append(f"磁盘使用率过高:{disk}%")
if alert_msgs:
print(f"CPU: {cpu}% | 内存: {mem}% | 磁盘: {disk}%")
time.sleep(60)
步骤四:Web管理界面展示
说明:这里可以用Flask做一个简单的Web页面。
from flask import Flask, render_template_string
import psutil
app = Flask(__name__)
@app.route('/')
def index():
cpu = psutil.cpu_percent(interval=1)
mem = psutil.virtual_memory().percent
disk = psutil.disk_usage('/').percent
html = f"""
<h2>Linux系统资源监控</h2>
<p>CPU使用率:{cpu}%</p>
<p>内存使用率:{mem}%</p>
<p>磁盘使用率:{disk}%</p>
"""
return html
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
三、完整实例:Linux系统资源监控管理工具
说明:这里将编写一个Linux系统资源监控管理程序,实现数据的可视化与历史分析,实现仪表盘展示功能,支持历史查询。
1.编写程序
说明:使用Linux系统的vim编写Python程序,提前创建程序的存放目录./sys_monitor_app。
执行指令# vim system_monitor.py编写程序
2.运行程序
说明:使用Python3运行程序,提前进入程序的存放目录./sys_monitor_app。
执行指令# python3 system_monitor.py运行程序
3.使用程序
说明:在客户端通过浏览器访问Linux系统资源管理工具,如下图
输入账号密码登录,如下图
可以选定时间段查询历史数据,如下
还可以下载全部历史数据,如下
4.程序功能说明
(1)登录认证页面
访问 http://服务器IP:5000/ 时,首先会跳转到登录页面;输入正确的用户名和密码(如 admin/admin123)才能进入监控仪表盘。
(2)资源监控仪表盘
- 页面布局美观
页面整体采用卡片式和分区布局,适配PC和移动端。右上角有“退出登录”按钮,点击可安全退出账号。
- 实时资源概览
页面顶部以卡片形式展示当前CPU、内存、磁盘使用率,数据每次刷新页面时实时获取。
- 资源趋势可视化
左侧折线图:展示最近一段时间的CPU、内存、磁盘使用率变化趋势。
右侧饼图:展示当前CPU、内存、磁盘的占比。
- IO分区分行展示
磁盘IO分区:单独一行展示磁盘读速率、写速率,并有磁盘IO速率趋势折线图。
网络IO分区:单独一行展示网络发送速率、接收速率,并有网络IO速率趋势折线图。
- 历史数据查询与下载
支持通过时间区间筛选历史数据(起始时间、结束时间)。
历史数据以表格形式展示,包含所有监控指标。
支持一键下载全部历史监控数据(CSV格式)。
(3)数据采集与存储
后台线程每隔10秒自动采集一次系统资源数据(CPU、内存、磁盘、磁盘IO、网络IO),并自动追加保存到./data/sys_monitor.csv文件中。历史数据可长期保存,也可下载到本地磁盘,便于后续分析。