Python 脚本实现服务器资源监控
概述
在运维工作中,实时掌握服务器的 CPU、内存、网络及磁盘使用情况至关重要。本文介绍如何在 CentOS Docker 容器中部署 Python 脚本,利用 psutil 和 rich 库实现轻量级的资源监控。通过命令行输出美观的表格数据,便于快速诊断系统状态。
本文介绍在 CentOS Docker 容器中部署 Python 脚本的方法,利用 psutil 和 rich 库实时监控 CPU、内存、网络及磁盘使用率。内容涵盖环境配置、脚本编写详解、自动化调度及扩展建议,适用于日常运维场景下的轻量级资源监控需求。

在运维工作中,实时掌握服务器的 CPU、内存、网络及磁盘使用情况至关重要。本文介绍如何在 CentOS Docker 容器中部署 Python 脚本,利用 psutil 和 rich 库实现轻量级的资源监控。通过命令行输出美观的表格数据,便于快速诊断系统状态。
为了隔离运行环境并方便管理,建议将监控脚本运行在独立的 Docker 容器中。以下示例基于 CentOS 镜像:
docker run -it --name monitor-container centos:7 /bin/bash
安全提示:虽然为了方便调试可能会暴露 SSH 端口(如 22 端口),但在生产环境中应谨慎配置防火墙规则,避免不必要的端口暴露风险。
CentOS 基础镜像通常不包含 Python 3,需要手动编译安装。这里以 Python 3.9.2 为例:
wget https://registry.npmmirror.com/-/binary/python/3.9.2/Python-3.9.2.tgz
tar -zxvf Python-3.9.2.tgz
cd Python-3.9.2
yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make libffi-devel
./configure
make && make install
which python3 && python3 --version
为了避免 pip 下载速度过慢,建议配置国内镜像源(如清华大学镜像):
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
安装监控所需的第三方库:
pip3 install psutil rich
脚本主要使用 psutil 获取系统底层信息,并使用 rich 库美化终端输出。功能涵盖:
创建文件 monitor.py,内容如下:
# -*- encoding: utf-8 -*-
__date__ = '2023/11/02 19:01:26'
import psutil
from rich.table import Table
from rich.console import Console
# 创建新表格
table = Table(show_header=True, header_style="bold magenta", expand=True)
table.add_column("指标", style="dim", width=12)
table.add_column("数值", justify="right")
# 获取系统信息
cpu_percent = psutil.cpu_percent(interval=1)
cpu_freq = psutil.cpu_freq()
cpu_cores = psutil.cpu_count(logical=False)
memory = psutil.virtual_memory()
network_stats = psutil.net_io_counters()
disk_stats = psutil.disk_partitions(all=True)
# 添加 CPU 信息到表格
table.add_row("CPU 使用率", f"{cpu_percent}%")
if cpu_freq is not None:
table.add_row("CPU 频率", f"{cpu_freq.current:.2f} MHz")
else:
table.add_row("CPU 频率", "N/A")
table.add_row("CPU 核心数", f"{cpu_cores} 核")
# 添加内存信息到表格
table.add_row("总内存", f"{memory.total / (1024**3):.2f} GB")
table.add_row("已用内存", f"{memory.used / (1024**3):.2f} GB")
table.add_row("内存使用百分比", f"{memory.percent}%")
# 添加网络信息到表格
table.add_row("发送字节数", f"{network_stats.bytes_sent / (1024**2):.2f} MB")
table.add_row("接收字节数", f"{network_stats.bytes_recv / (1024**2):.2f} MB")
# 添加磁盘信息到表格
for partition in disk_stats:
try:
disk_usage = psutil.disk_usage(partition.mountpoint)
table.add_row(f"{partition.device} ({partition.mountpoint})", f"{disk_usage.percent}%")
except PermissionError:
continue
# 创建 console 对象并输出表格
console = Console()
console.print(table)
代码说明:
try-except 块,防止因权限不足导致脚本报错中断。Table 组件自动对齐列宽,设置表头样式,使终端输出更直观。将编写好的脚本传输至 Docker 容器内执行。在宿主机上操作:
docker cp monitor.py <container_id>:/root/
进入容器并运行:
docker exec -it <container_id> bash
python3 /root/monitor.py
预期输出为格式化的控制台表格,显示各项资源指标。
若需周期性监控,可结合 Linux 的 cron 服务。编辑 crontab:
crontab -e
添加如下条目(每 5 分钟执行一次):
*/5 * * * * /usr/bin/python3 /root/monitor.py >> /var/log/sys_monitor.log 2>&1
当前脚本仅输出文本,如需长期趋势分析,建议进行以下扩展:
sqlite3 或连接 MySQL,将历史数据存入数据库。本文详细演示了如何在 Docker 环境中使用 Python 脚本监控系统资源。通过 psutil 获取数据配合 rich 美化展示,实现了轻量级且高效的监控方案。该方案适合作为日常运维的辅助工具,也可作为构建更复杂监控系统的基础模块。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online