一文讲清怎么用Python实现Linux系统CPU、内存和磁盘监控管理工具

liftword15小时前技术文章4

摘要:在日常的服务器运维和管理工作当中,监控系统资源的使用情况是非常重要的一项任务。特别是在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文件中。历史数据可长期保存,也可下载到本地磁盘,便于后续分析。

相关文章

Python一键打包为windows的exe文件,无需安装python环境即可执行

一、为什么要将Python打包为 exe?在实际应用中,我们希望Python程序能在没有安装Python环境的电脑上直接运行。将Python代码打包为exe可执行文件,不仅能解决环境依赖问题,还便于程...

Python文件读写操作详解:从基础到实战

Python 文件的读写操作在 Python 中,文件操作非常常见,可以通过内建的 open() 函数进行文件的读取、写入、创建等操作。理解文件操作的模式和 with 语句对于确保代码的简洁性和效率至...

一文讲清Python在Linux系统CPU、内存和磁盘管理方面的应用实例

摘要:在当今快速发展的IT运维和开发世界里,Linux系统凭借其高效能、高稳定性和开源的特性,在服务器管理、云计算服务以及大数据处理等众多领域中占据了核心位置。随着业务规模扩大,系统资源的监控与管理变...

Python文件操作

文件编码编码技术即:翻译的规则,记录了如何将内容翻译成二进制,以及如何将二进制翻译回可识别内容。计算机中有许多可用编码:UTF-8、GBK、Big5等。不同的编码,将内容翻译成二进制也是不同的。编码有...

将python源代码封装成window可执行程序教程

将python源代码封装成window可执行程序教程点击键盘win+r打开运行框在运行框中输入cmd,进入到命令行。在命令行中输入pip list 去查看当前电脑中所有的库检查是否有pyinstall...

Python文件操作:读写txt/csv/json的终极方案

在 Python 编程的世界里,文件操作是一项极为基础且关键的技能。无论是读取配置信息、存储处理结果,还是进行数据分析,我们都离不开对各种文件格式的读写操作。今天,就来给大家分享 Python 文件操...