Linux监控脚本开发应明确目标、快速验证、稳定落地:Shell适合轻量实时采集,Python适合复杂逻辑与集成,二者协同分工——Shell做搬运工、Python做分析员,并须通过异常测试、日志轮转、健康检查三关。

Linux监控脚本开发不靠堆工具,关键在明确目标、快速验证、稳定落地。Shell适合轻量实时采集(如CPU、磁盘、进程),Python适合逻辑复杂或需对接API/数据库的场景(如日志分析、告警聚合、Web展示)。两者结合——Shell做数据“搬运工”,Python做“分析员”,是最常用也最实用的组合。
Shell监控脚本:聚焦快、稳、小
Shell脚本的核心价值是低开销、高响应、易部署。别追求功能大而全,先确保能准确采集、及时发现异常。
-
用标准命令+简单判断即可覆盖80%基础监控:比如
df -h | awk '$5 > 80 {print $1, $5}'查磁盘超80%;ps aux --sort=-%cpu | head -n 6看CPU Top5进程 -
避免死循环卡系统:用
sleep控制频率(如每30秒执行一次),配合timeout防命令卡住(如timeout 5 curl -s http://localhost:8080/health) -
输出带时间戳和来源,方便排查:用
echo "$(date '+%F %T') [disk] $(df -h | grep '/$' | awk '{print $5}')" > /var/log/monitor/disk.log
Python监控脚本:重逻辑、可扩展、易集成
当监控需要条件判断多、要写入数据库、发邮件/钉钉、或解析JSON日志时,Python明显更清晰可靠。
-
用
psutil替代top/df/ps等命令调用:代码可读性强,跨平台一致,还能获取进程线程、网络连接等Shell不易拿到的信息 - 告警去重和抑制很重要:同一问题连续触发10次告警毫无意义。可用文件记录上次告警时间,或用Redis存状态,30分钟内相同错误只报一次
-
日志解析推荐
re+datetime:例如匹配Nginx访问日志中499/502状态码,并统计每分钟出现次数,超过阈值才告警
Shell + Python协同工作模式
不要把所有逻辑塞进一个语言里。合理分工才能长期维护。
立即学习“Python免费学习笔记(深入)”;
-
Shell负责定时调度与环境准备:用
crontab跑Shell脚本,它检查依赖(如Python是否存在)、拉起Python脚本、重定向日志、处理退出码 -
Python专注数据处理与决策:接收Shell传入的参数(如监控项名称、阈值),采集数据、计算、判断是否告警,并返回简洁结果(如
OK、WARN、CRITICAL) -
统一输出格式便于后续消费:建议Python脚本输出JSON行(如
{"metric":"load_avg","value":3.2,"status":"WARN","ts":1717024560}),Shell可直接用jq解析或转存到文件供Prometheus抓取
上线前必须做的三件事
再小的监控脚本,没过这三关就等于埋雷。
- 在测试机模拟高负载/断网/磁盘满等异常场景:确认脚本能正确识别并退出,不卡死、不狂打日志
-
加日志轮转和大小限制:用
logrotate或Python的RotatingFileHandler,防止日志撑爆磁盘 -
给每个脚本配健康检查入口:比如
./check_disk.sh --health只返回0或1,供Zabbix/Prometheus主动探测脚本自身是否存活










