手把手教你打造服务器监控利器:CPU、内存、磁盘实时监控与告警
162
0
0
0
网站的稳定运行离不开对服务器状态的实时监控。作为一名经验丰富的运维老兵,我深知服务器监控的重要性。今天,我就来手把手教你如何打造一个简易但实用的服务器监控工具,它可以实时显示 CPU、内存、磁盘使用率,并在出现异常时发送告警邮件,让你随时掌握服务器的健康状况。
技术选型
在开始之前,我们需要选择合适的技术栈。这里我推荐使用 Python,因为它简单易学,拥有丰富的库,非常适合快速开发。
- 监控数据采集:
psutil是一个跨平台的库,可以轻松获取 CPU、内存、磁盘等系统信息。 - 数据可视化: 虽然我们主要关注告警,但如果需要可视化展示,可以使用
matplotlib或plotly等库。 - 邮件发送:
smtplib和email.mime.text是 Python 自带的库,可以用来发送邮件。 - 定时任务:
schedule库可以方便地设置定时任务,定期采集服务器数据。
实现步骤
安装依赖库
首先,我们需要安装上面提到的依赖库:
pip install psutil schedule编写监控脚本
接下来,创建一个 Python 脚本,例如
monitor.py,并编写以下代码:import psutil import smtplib from email.mime.text import MIMEText import schedule import time # 配置信息 SMTP_SERVER = 'smtp.example.com' # SMTP服务器地址 SMTP_PORT = 587 # SMTP服务器端口 SENDER_EMAIL = 'sender@example.com' # 发件人邮箱 SENDER_PASSWORD = 'your_password' # 发件人邮箱密码或授权码 RECEIVER_EMAIL = 'receiver@example.com' # 收件人邮箱 CPU_THRESHOLD = 80 # CPU使用率阈值,超过此值发送告警 MEMORY_THRESHOLD = 80 # 内存使用率阈值,超过此值发送告警 DISK_THRESHOLD = 80 # 磁盘使用率阈值,超过此值发送告警 DISK_PATH = '/' # 监控的磁盘路径 def send_email(subject, body): msg = MIMEText(body, 'plain') msg['Subject'] = subject msg['From'] = SENDER_EMAIL msg['To'] = RECEIVER_EMAIL try: server = smtplib.SMTP(SMTP_SERVER, SMTP_PORT) server.starttls() server.login(SENDER_EMAIL, SENDER_PASSWORD) server.sendmail(SENDER_EMAIL, RECEIVER_EMAIL, msg.as_string()) server.quit() print('邮件发送成功') except Exception as e: print(f'邮件发送失败: {e}') def check_cpu_usage(): cpu_usage = psutil.cpu_percent(interval=1) print(f'CPU 使用率: {cpu_usage}%') if cpu_usage > CPU_THRESHOLD: subject = 'CPU 使用率过高告警' body = f'CPU 使用率已超过 {CPU_THRESHOLD}%,当前使用率为 {cpu_usage}%,请及时处理。' send_email(subject, body) def check_memory_usage(): memory_usage = psutil.virtual_memory().percent print(f'内存 使用率: {memory_usage}%') if memory_usage > MEMORY_THRESHOLD: subject = '内存 使用率过高告警' body = f'内存 使用率已超过 {MEMORY_THRESHOLD}%,当前使用率为 {memory_usage}%,请及时处理。' send_email(subject, body) def check_disk_usage(): disk_usage = psutil.disk_usage(DISK_PATH).percent print(f'磁盘 使用率: {disk_usage}%') if disk_usage > DISK_THRESHOLD: subject = '磁盘 使用率过高告警' body = f'磁盘 {DISK_PATH} 使用率已超过 {DISK_THRESHOLD}%,当前使用率为 {disk_usage}%,请及时处理。' send_email(subject, body) # 设置定时任务 schedule.every(1).minutes.do(check_cpu_usage) schedule.every(1).minutes.do(check_memory_usage) schedule.every(1).minutes.do(check_disk_usage) while True: schedule.run_pending() time.sleep(1)代码解释:
psutil.cpu_percent(interval=1):获取 CPU 使用率,interval=1表示每隔 1 秒采样一次。psutil.virtual_memory().percent:获取内存使用率。psutil.disk_usage(DISK_PATH).percent:获取磁盘使用率,DISK_PATH是要监控的磁盘路径。send_email(subject, body):发送邮件的函数,使用smtplib和email.mime.text库。schedule.every(1).minutes.do(check_cpu_usage):每隔 1 分钟执行一次check_cpu_usage函数。
注意事项:
- 请务必修改代码中的配置信息,包括 SMTP 服务器地址、端口、发件人邮箱、密码、收件人邮箱、CPU/内存/磁盘使用率阈值和磁盘路径。
- 为了安全起见,建议使用邮箱授权码代替邮箱密码。
运行监控脚本
在终端中运行脚本:
python monitor.py脚本会定期采集服务器数据,并在达到阈值时发送告警邮件。
进阶优化
- 日志记录: 将监控数据和告警信息记录到日志文件中,方便后续分析和排查问题。
- 数据可视化: 使用
matplotlib或plotly等库将监控数据可视化展示,更直观地了解服务器状态。 - 多服务器监控: 将脚本部署到多台服务器上,集中监控所有服务器的状态。
- 集成到现有监控系统: 将脚本集成到现有的监控系统,例如 Zabbix、Nagios 等。
- 使用消息队列: 如果需要处理大量的监控数据,可以使用消息队列(例如 RabbitMQ、Kafka)来解耦数据采集和告警处理。
- 更精细的监控指标: 除了 CPU、内存和磁盘使用率,还可以监控网络流量、进程数量、IO 等指标,更全面地了解服务器状态。
- 更灵活的告警策略: 可以根据不同的指标和时间段设置不同的告警阈值,更精准地告警。
- 使用专业的监控工具: 如果预算充足,可以考虑使用专业的服务器监控工具,例如 Prometheus、Grafana 等,它们提供了更强大的功能和更友好的界面。
总结
通过本文的介绍,相信你已经掌握了如何使用 Python 打造一个简易但实用的服务器监控工具。虽然这个工具比较简单,但它可以帮助你实时了解服务器的健康状况,并在出现异常时及时告警。希望你能根据自己的实际需求,对这个工具进行优化和扩展,打造一个更强大的服务器监控系统。
记住,监控只是手段,保障网站稳定运行才是最终目的。祝你的网站永不宕机!