Linux云服务器监控脚本:从需求拆解到实践落地
文章分类:售后支持 /
创建时间:2025-08-07
在Linux云服务器运维中,监控脚本是捕捉异常的关键工具。从CPU峰值到内存告急,从磁盘空间不足到网络阻塞,如何用脚本精准定位问题?本文从需求拆解到实践落地,带你掌握一套可复用的监控脚本开发流程。
明确核心监控需求:场景决定指标
不同业务场景对监控指标的优先级差异显著。例如电商大促期间,高并发的Web应用需重点关注CPU使用率(避免进程阻塞)、网络吞吐量(防止带宽瓶颈);而数据备份服务器则需紧盯磁盘可用空间(避免备份失败)、I/O延迟(保障写入效率)。
除了基础指标,还需考虑:
- 监控频率:高负载业务建议每分钟采集(1分钟/次),低负载场景可放宽至每5分钟
- 告警阈值:生产环境CPU建议设置70%预警、85%紧急通知,避免误报干扰
- 输出方式:日志记录(用于问题回溯)+ 即时通知(邮件/企业微信,关键指标触发时)
工具选型:Shell与Python的优劣势对比
Linux环境下,Shell脚本(Bash)和Python是最常用的两种开发语言。Shell胜在轻量(系统原生支持),适合简单监控(如定时检查磁盘),但复杂逻辑(如数据可视化、多指标关联分析)处理能力有限;Python凭借psutil(跨平台系统监控库)、logging(日志管理)等成熟库,更适合需要扩展的场景(如对接监控平台、生成统计图表)。
以获取CPU使用率为例:
- Shell实现需调用top/mpstat命令并解析输出,易受系统版本影响
- Python通过psutil.cpu_percent(interval=1)可直接获取精确值(精确到0.1%)
Python脚本实战:从基础到扩展
以下是笔者常用的基础监控脚本(已在50+台云服务器验证):
import psutil
import time
import logging
from logging.handlers import RotatingFileHandler
日志配置(自动切割,防止日志过大)
logger = logging.getLogger('server_monitor')
logger.setLevel(logging.INFO)
handler = RotatingFileHandler(
'server_monitor.log', maxBytes=10*1024*1024, backupCount=5
)
formatter = logging.Formatter('%(asctime)s - %(levelname)s: %(message)s')
handler.setFormatter(formatter)
logger.addHandler(handler)
def get_metrics():
# 获取CPU/内存/磁盘指标
cpu = psutil.cpu_percent(interval=1)
memory = psutil.virtual_memory().percent
disk = psutil.disk_usage('/').percent
return {
'cpu': cpu,
'memory': memory,
'disk': disk
}
def check_threshold(metrics):
# 阈值检查逻辑
warnings = []
if metrics['cpu'] > 85:
warnings.append(f'CPU使用率{metrics["cpu"]}%(阈值85%)')
if metrics['memory'] > 90:
warnings.append(f'内存使用率{metrics["memory"]}%(阈值90%)')
if metrics['disk'] > 80:
warnings.append(f'磁盘使用率{metrics["disk"]}%(阈值80%)')
return warnings
if __name__ == '__main__':
while True:
metrics = get_metrics()
# 记录基础指标
logger.info(f'CPU:{metrics["cpu"]}% | 内存:{metrics["memory"]}% | 磁盘:{metrics["disk"]}%')
# 检查告警
warnings = check_threshold(metrics)
if warnings:
logger.warning('异常指标:' + ';'.join(warnings))
# 每60秒执行一次
time.sleep(60)
脚本优化点说明:
- 使用RotatingFileHandler实现日志自动切割(单文件最大10MB,保留5个备份)
- 分离指标获取(get_metrics)和阈值检查(check_threshold)函数,便于后续扩展
- 指标输出格式统一,方便日志分析工具(如ELK)解析
测试与部署:从开发到生产的关键步骤
测试阶段建议分两步走:
1. 本地验证:用stress工具模拟负载(如`stress --cpu 4 --timeout 300`),观察脚本是否能正确触发CPU告警
2. 灰度部署:先在1-2台测试服务器运行,确认日志完整性、资源占用(脚本内存占用应<10MB)后,再推广到生产环境
生产部署推荐使用cron定时任务:
执行`crontab -e`添加以下行(每5分钟执行一次):
`*/5 * * * * /usr/bin/python3 /opt/monitor/server_monitor.py >> /dev/null 2>&1`
日常维护需关注:
- 每周检查日志文件大小,避免磁盘被占满
- 业务变更后(如上线新功能),重新评估阈值设置
- 每季度更新psutil库(`pip3 install --upgrade psutil`),确保兼容新内核
通过这套可复用的开发流程,即使是运维新手也能快速编写出符合业务需求的监控脚本。当云服务器的各项指标在脚本的精准监控下平稳运行时,业务连续性便有了更坚实的技术保障。