一文讲清怎么用Python实现Linux系统CPU、内存和磁盘监控管理工具
gudong366 2025-06-13 06:59 6 浏览
摘要:在日常的服务器运维和管理工作当中,监控系统资源的使用情况是非常重要的一项任务。特别是在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文件中。历史数据可长期保存,也可下载到本地磁盘,便于后续分析。
相关推荐
- 由浅入深学shell,70页shell脚本编程入门,满满干货建议收藏
-
不会Linux的程序员不是好程序员,不会shell编程就不能说自己会Linux。shell作为Unix第一个脚本语言,结合了延展性和高效的优点,保持独有的编程特色,并不断地优化,使得它能与其他脚本语言...
- 小白7天掌握Shell编程:脚本的创建和执行
-
一、课前声明1、本分享仅做学习交流,请自觉遵守法律法规!2、搜索:Kali与编程,学习更多网络攻防干货!二、知识点详解Shell脚本的格式要求:脚本要以!#/bin/bash开头,其中bash可以替换...
- 飞牛fnNAS搭建Web版Linux系统(飞牛网改版升级说明)
-
飞牛NAS本身就是Linux内核(Debian发行版),那为何还要安装一个Linux呢?因为飞牛的Linux是特殊版本,并不能运行PC端的带UI的程序,比如我需要登录微信,需要使用wps打字……,这是...
- 如何在 Linux 中使用 Sysctl 命令?
-
sysctl是一个用于配置和查询Linux内核参数的命令行工具。它通过与/proc/sys虚拟文件系统交互,允许用户在运行时动态修改内核参数。这些参数控制着系统的各种行为,包括网络设置、文件...
- Apple尝试使用轻量级Linux虚拟机实现容器化
-
Apple于本周一发布了一个开源的容器化框架,用于在Mac上创建和运行Linux容器镜像。软件容器将应用程序及其依赖项组合成一个单元,在主机上运行于隔离环境中。由于它们基于符合OCI标准...
- Docker 安全与权限控制:别让你的容器变成“漏洞盒子”
-
在享受容器带来的轻量与灵活的同时,我们也必须面对一个现实问题:安全隐患。容器并不是天然安全,错误配置甚至可能让攻击者“越狱”入侵主机!本篇将带你从多个层面强化Docker的安全防护,构建真正可放心...
- 网络安全必备!Linux firewalld 防火墙原理 + 配置实战(放行http)
-
5.1了解firewall防火墙基础概念与原理5.1.1Linux防火墙概述在网络安全领域,防火墙是保障网络安全的关键屏障,Linux系统中的firewall防火墙(firewalld服...
- 从零开始搭建 Linux PXE 无盘启动服务器
-
在企业环境或实验室中,PXE(PrebootExecutionEnvironment,无盘启动)被广泛用于大规模批量部署操作系统。通过PXE,无需U盘或CD,就能远程启动和安装Linux...
- [250417] Fedora 42 正式发布,搭载 Linux 6.14 内核和 GNOME 48 桌面环境
-
Fedora42正式发布FedoraLinux42现已正式发布!此版本基于最新的Linux内核6.14构建,带来了众多激动人心的新特性和改进,旨在提供更现代化、更强大、更易用的Li...
- Linux Kernel学习003——内核源码
-
Linux学习笔记:老版本内核的坑,新工具救场,代码门道藏着啥秘密.最近想学Linux内核,网上查资料发现现在的稳定版本都已经到5.x了,但我跟着教程选的是2.6.34。官网下载链接卡着老卡,后来用清...
- Linux:实现Hadoop集群Master无密码登录
-
以下所介绍的安装方式都是在线安装方式,如果你需要连网请参考:Linux:宿主机通过桥接方式连接的VMware内部Linux14.04虚拟机(静态IP)实现上网方案环境:OS:LinuxUbuntu1...
- 除了Win10,微软还发布了一套“专业版Linux”系统
-
IT之家讯9月21消息,不知道大家是否还记得,微软CEO纳德拉曾在去年的一次活动中公开宣称“微软爱Linux”,其实那个时候的微软就已经在服务器方面拥抱Linux了。而最近,除了最新Windows1...
- Linux系统匿名上网小技巧(linux匿名文件)
-
Tails可以做什么+优点Tails所有数据连接通过Tor网络传输,可以为个人用户提供最好的匿名性和安全性,并且它是一个Linux系统,不会感染Windows系统的病毒,它可以存储在闪存盘上运行。-...
- Linux环境中DeepSeek AI大模型使用与管理之七:安装Cherry Studio
-
简介:在Linux系统中成功通过Ollama部署DeepSeek-R1大模型后,用户通常需要一个直观且易于操作的客户端来访问和交互。为了满足这一需求,本文将详细介绍如何在Linux环境中安装和配置Ch...
- Linux系统部署Go编程环境(一)使用Go语言编写简单web服务器
-
摘要:Go语言是一个开源的编程语言,Go语言被称为“互联网时代的C语言”。Go语言的风格类似于C语言。其语法在C语言的基础上进行了大幅的简化,去掉了不需要的表达式括号,循环也只有for一种表示...
- 一周热门
- 最近发表
-
- 由浅入深学shell,70页shell脚本编程入门,满满干货建议收藏
- 小白7天掌握Shell编程:脚本的创建和执行
- 飞牛fnNAS搭建Web版Linux系统(飞牛网改版升级说明)
- 如何在 Linux 中使用 Sysctl 命令?
- Apple尝试使用轻量级Linux虚拟机实现容器化
- Docker 安全与权限控制:别让你的容器变成“漏洞盒子”
- 网络安全必备!Linux firewalld 防火墙原理 + 配置实战(放行http)
- 从零开始搭建 Linux PXE 无盘启动服务器
- [250417] Fedora 42 正式发布,搭载 Linux 6.14 内核和 GNOME 48 桌面环境
- Linux Kernel学习003——内核源码
- 标签列表
-
- linux一键安装 (31)
- linux运行java (33)
- ln linux (27)
- linux 磁盘管理 (31)
- linux 内核升级 (30)
- linux 运行python (28)
- linux 备份文件 (30)
- linux 网络测试 (30)
- linux 网关配置 (31)
- linux jre (32)
- linux 杀毒软件 (32)
- linux语法 (33)
- linux博客 (33)
- linux 压缩目录 (37)
- linux 查看任务 (32)
- 制作linux启动u盘 (35)
- linux 查看存储 (29)
- linux乌班图 (31)
- linux挂载镜像 (31)
- linux 软件源 (28)
- linux题目 (30)
- linux 定时脚本 (30)
- linux 网站搭建 (28)
- linux 远程控制 (34)
- linux bind (31)