python脚本实现服务器内存和cpu使用监控,并记录日志,可以设置阈值和采样频率

server/2025/3/18 12:57:52/

Python 脚本,实现以下功能:

  1. 按日期自动生成日志文件(例如 cpu_mem_20231001.csv
  2. 当 CPU 或内存超过阈值时触发记录
  3. 独立记录报警事件(保存到 alert.log
  4. 支持自定义阈值和监控间隔

脚本代码

python">import psutil
import time
import csv
import argparse
from datetime import datetime
import osdef parse_args():"""解析命令行参数"""parser = argparse.ArgumentParser(description='监控 CPU 和内存使用情况')parser.add_argument('--cpu-threshold', type=float, default=80.0,help='CPU 使用率阈值(默认 80%%)')parser.add_argument('--mem-threshold', type=float, default=80.0,help='内存使用率阈值(默认 80%%)')parser.add_argument('--interval', type=int, default=5,help='监控间隔时间(秒,默认 5)')parser.add_argument('--log-dir', type=str, default='logs',help='日志存储目录(默认 ./logs)')return parser.parse_args()def get_log_path(log_dir):"""生成按日期命名的日志文件路径"""os.makedirs(log_dir, exist_ok=True)date_str = datetime.now().strftime("%Y%m%d")return os.path.join(log_dir, f"cpu_mem_{date_str}.csv")def init_log_file(file_path):"""初始化日志文件(写入表头)"""if not os.path.exists(file_path):with open(file_path, 'w', newline='') as f:writer = csv.writer(f)writer.writerow(["Timestamp", "CPU%", "Memory%", "Memory_Used_GB", "Memory_Total_GB", "Alert"])def log_alert(message, log_dir):"""记录报警事件到独立文件"""alert_path = os.path.join(log_dir, "alert.log")with open(alert_path, 'a') as f:f.write(f"[{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}] {message}\n")def monitor():args = parse_args()current_log_path = Nonewhile True:# 获取当前日志路径(按日期)new_log_path = get_log_path(args.log_dir)if new_log_path != current_log_path:current_log_path = new_log_pathinit_log_file(current_log_path)# 获取系统数据timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")cpu_percent = psutil.cpu_percent(interval=1)mem = psutil.virtual_memory()mem_percent = mem.percentmem_used_gb = round(mem.used / (1024 ** 3), 2)mem_total_gb = round(mem.total / (1024 ** 3), 2)# 判断是否触发报警alert = ""if cpu_percent > args.cpu_threshold:alert += f"CPU超过阈值({args.cpu_threshold}%) "if mem_percent > args.mem_threshold:alert += f"内存超过阈值({args.mem_threshold}%)"# 写入日志with open(current_log_path, 'a', newline='') as f:writer = csv.writer(f)writer.writerow([timestamp, cpu_percent, mem_percent,mem_used_gb, mem_total_gb, alert.strip()])# 记录独立报警日志if alert:log_alert(alert, args.log_dir)# 等待下次监控time.sleep(args.interval)if __name__ == '__main__':monitor()

功能说明

1. 按日期生成日志
  • 日志文件保存在 ./logs 目录(可通过 --log-dir 修改路径)
  • 每日生成一个文件,例如 cpu_mem_20231001.csv
  • 文件结构示例:
    Timestamp,CPU%,Memory%,Memory_Used_GB,Memory_Total_GB,Alert
    2023-10-01 14:30:00,15.2,32.1,4.2,13.0,
    2023-10-01 14:30:05,89.5,85.3,11.1,13.0,"CPU超过阈值(80.0%) 内存超过阈值(80.0%)"
    
2. 阈值报警
  • 默认阈值:CPU > 80% 或 内存 > 80%(可命令行修改)
  • 报警记录位置logs/alert.log,内容示例:
    [2023-10-01 14:30:05] CPU超过阈值(80.0%) 内存超过阈值(80.0%)
    
3. 命令行参数
# 示例:设置 CPU 阈值 70%,内存阈值 90%,间隔 10 秒
python3 monitor.py --cpu-threshold 70 --mem-threshold 90 --interval 10
  • 参数列表
    • --cpu-threshold:CPU 报警阈值(百分比)
    • --mem-threshold:内存报警阈值(百分比)
    • --interval:监控间隔(秒)
    • --log-dir:日志目录路径

运行方式

1. 安装依赖
pip install psutil
2. 启动监控
# 后台运行(日志保存到 ./logs)
nohup python3 monitor.py > /dev/null 2>&1 &
3. 查看日志
# 实时跟踪当天日志
tail -f logs/cpu_mem_$(date +%Y%m%d).csv# 查看报警日志
cat logs/alert.log


http://www.ppmy.cn/server/175959.html

相关文章

HCIA-PPP

一、基本概念 1、定义:PPP 协议是一种数据链路层协议,在两点之间建立直接通信连接。常用于拨号上网、宽带接入、路由器间通信等。 2、核心功能: ①链路控制:建立、配置和测试数据链路连接。 ②网络层协议支持:支持…

【密码学——基础理论与应用】李子臣编著 第四章 SM4分组密码算法 课后习题

免责声明 这里都是自己搓或者手写的。 里面不少题目感觉有问题或者我的理解有偏颇,请大佬批评指正! 不带思考抄作业的请自动退出,我的并非全对,仅仅提供思维! SM4的python实现 基于AI生成的SM4加密算法-CSDN博客 题…

【云原生技术】容器技术的发展史

一、Jail 时代 容器不是一个新概念或者新技术,很早就有了,只是近几年遇到了云计算,整个技术 被彻底引爆了。 1.1 1979年 贝尔实验室发明 chroot chroot系统调用是在 1979 年开发第 7 版 Unix 期间引入的。贝尔实验室在 Unix V7 的 开发过程…

【STM32】USART串口协议串口外设-学习笔记

串口协议 通信接口 通信的目的:将一个设备的数据传送到另一个设备,扩展硬件系统。比如STM32芯片内部集成了很多功能模块,像定时器计数、PWM输出、AD采集等等。这些都是芯片内部的电路,这些电路的配置寄存器,数据寄存…

C++ 类和对象----构造函数

一、构造函数 概念&#xff1a; 在平时初始化&#xff0c;都要调用Init公有方法来初始化&#xff0c;调用比较频繁&#xff0c;因此&#xff0c;构造函数就是在对象创建时&#xff0c;就将信息设置进去。 没有构造函数前&#xff1a; #include<iostream> using namesp…

【蓝桥杯速成】| 5.动态规划

学习资料 代码随想录 动态规划五部曲 确定dp数组&#xff08;dp table&#xff09;以及下标的含义确定递推公式dp数组如何初始化确定遍历顺序举例推导dp数组 简单题 509. 斐波那契数 - 力扣&#xff08;LeetCode&#xff09; 70. 爬楼梯 - 力扣&#xff08;LeetCode&#…

网络层协议

目录 一、网段划分的发展过程 &#xff08;1&#xff09;固定长度的网络号 &#xff08;2&#xff09;子网掩码---网络号长度不再固定 二、公有IP和私有IP &#xff08;1&#xff09;私有IP &#xff08;2&#xff09;NAT技术 三、IP协议报头 分片操作 四、查看一下li…

Windows 图形显示驱动开发-WDDM 3.0功能- 硬件翻转队列(一)

WDDM 3.0 之前的翻转队列模型 许多新式显示控制器支持对按顺序显示的多个帧排队的能力。 从 WDDM 2.1 开始&#xff0c;OS 支持将在下一个 VSync 中显示的多个未完成的翻转覆盖请求。 显示微型端口驱动程序 (KMD) 通过 DXGK_DRIVERCAPS 中的 MaxQueuedMultiPlaneOverlayFlipVS…