Python实现系统性能监控:获取基础参数并写入文件全攻略
2025.09.25 23:03浏览量:0简介:本文详细介绍如何使用Python获取系统基础性能参数(CPU、内存、磁盘、网络等),并通过代码示例展示如何将这些数据结构化写入文件,适用于系统监控、性能分析等场景。
Python实现系统性能监控:获取基础参数并写入文件全攻略
一、为什么需要监控系统基础性能参数?
在系统运维和开发过程中,实时掌握服务器或本地计算机的基础性能参数至关重要。无论是排查性能瓶颈、优化资源配置,还是构建自动化监控系统,都需要准确获取CPU使用率、内存占用、磁盘I/O等关键指标。Python凭借其丰富的标准库和第三方工具,可以高效完成这一任务,并将数据持久化存储以供后续分析。
二、核心性能参数分类与获取方法
1. CPU相关参数
CPU是系统的核心计算资源,主要监控指标包括:
- 使用率:用户态、内核态、空闲等状态占比
- 负载平均值:1分钟、5分钟、15分钟的平均负载
- 核心数:物理核心与逻辑核心数量
实现代码:
import psutildef get_cpu_info():cpu_info = {"cpu_percent": psutil.cpu_percent(interval=1),"cpu_count": psutil.cpu_count(logical=False), # 物理核心数"cpu_count_logical": psutil.cpu_count(), # 逻辑核心数"load_avg": psutil.getloadavg() # Linux/macOS特有}return cpu_info
2. 内存相关参数
内存监控包括:
- 总内存/可用内存
- 缓存与缓冲区占用
- 交换分区使用情况
实现代码:
def get_memory_info():mem = psutil.virtual_memory()swap = psutil.swap_memory()return {"total_memory_gb": round(mem.total / (1024**3), 2),"available_memory_gb": round(mem.available / (1024**3), 2),"memory_percent": mem.percent,"swap_used_gb": round(swap.used / (1024**3), 2),"swap_percent": swap.percent}
3. 磁盘与文件系统参数
关键磁盘指标:
- 分区使用情况
- 磁盘I/O读写速度
- 文件系统类型
实现代码:
def get_disk_info():disk_info = []partitions = psutil.disk_partitions(all=False)for partition in partitions:usage = psutil.disk_usage(partition.mountpoint)disk_info.append({"device": partition.device,"mountpoint": partition.mountpoint,"fstype": partition.fstype,"total_gb": round(usage.total / (1024**3), 2),"used_gb": round(usage.used / (1024**3), 2),"free_gb": round(usage.free / (1024**3), 2),"percent": usage.percent})return disk_info
4. 网络相关参数
网络监控要点:
- 接口流量统计
- 连接数统计
- 网络错误率
实现代码:
def get_network_info():net_io = psutil.net_io_counters()connections = psutil.net_connections(kind='inet')return {"bytes_sent": net_io.bytes_sent,"bytes_recv": net_io.bytes_recv,"packets_sent": net_io.packets_sent,"packets_recv": net_io.packets_recv,"active_connections": len(connections)}
三、数据结构化与文件写入实现
1. 数据整合与JSON格式化
将所有指标整合为结构化数据:
import jsonfrom datetime import datetimedef collect_all_metrics():metrics = {"timestamp": datetime.now().isoformat(),"cpu": get_cpu_info(),"memory": get_memory_info(),"disk": get_disk_info(),"network": get_network_info()}return metrics
2. 文件写入实现方案
方案一:JSON文件追加写入
def write_to_json_file(data, filename="system_metrics.json"):mode = 'a' if os.path.exists(filename) else 'w'with open(filename, mode) as f:if mode == 'w':json.dump({"metrics": []}, f) # 初始化数组f.seek(0, os.SEEK_END)f.seek(f.tell() - 1, os.SEEK_SET) # 移动到数组末尾f.truncate() # 删除末尾的']'f.write(",\n")json.dump(data, f)f.write("\n]") # 补回数组结束符
方案二:CSV格式(更适合表格分析)
import csvdef write_to_csv(data, filename="system_metrics.csv"):fieldnames = ["timestamp", "cpu_percent", "memory_percent","disk_used_gb", "network_bytes_sent"]# 首次写入创建文件并写入表头first_write = not os.path.exists(filename)with open(filename, 'a', newline='') as f:writer = csv.DictWriter(f, fieldnames=fieldnames)if first_write:writer.writeheader()# 提取关键指标(实际需根据数据结构调整)row = {"timestamp": data["timestamp"],"cpu_percent": data["cpu"]["cpu_percent"],"memory_percent": data["memory"]["memory_percent"],# 其他字段...}writer.writerow(row)
3. 完整实现示例
import osimport jsonimport psutilfrom datetime import datetimedef main():# 收集所有指标metrics = collect_all_metrics()# 写入JSON文件json_filename = "system_metrics.json"if os.path.exists(json_filename):with open(json_filename, 'r+') as f:content = f.read()content = content.rstrip('\n]') # 移除原数组结束符f.seek(0, os.SEEK_SET)f.write(content)f.write(",\n")json.dump(metrics, f)f.write("\n]")else:with open(json_filename, 'w') as f:json.dump({"metrics": [metrics]}, f)print(f"Metrics successfully written to {json_filename}")if __name__ == "__main__":main()
四、进阶优化建议
- 异步采集:使用
asyncio实现非阻塞式数据采集 - 压缩存储:对历史数据采用gzip压缩
- 数据库存储:将数据导入InfluxDB等时序数据库
- 可视化集成:通过Grafana展示实时监控面板
- 异常检测:添加阈值告警机制
五、常见问题解决方案
- 权限问题:确保Python进程有访问
/proc或ioctl的权限 - 跨平台兼容:使用
psutil的跨平台API而非直接系统调用 - 数据丢失防护:实现写入失败时的重试机制
- 性能影响:控制采集频率(建议≥1秒间隔)
六、完整代码仓库建议结构
/system_monitor├── config.py # 配置参数├── collector.py # 数据采集模块├── storage/│ ├── json_writer.py│ └── csv_writer.py├── utils/│ └── time_utils.py└── main.py # 入口程序
通过本文介绍的方案,开发者可以快速构建一个轻量级的系统性能监控工具,既可用于本地开发环境调试,也能扩展为生产环境的监控组件。实际部署时建议结合定时任务(如cron或APScheduler)实现自动化数据采集。

发表评论
登录后可评论,请前往 登录 或 注册