SystemInfoMonitor.sh - 系统资源监控告警脚本
温馨提醒
总结摘要
SystemInfoMonitor.sh 是一个用于持续监控系统资源的 Shell 脚本,实时检测 CPU、内存、磁盘和网络使用情况,并在超过阈值时通过 Bark推送告警通知。
SystemInfoMonitor.sh - 系统资源监控告警脚本
脚本功能
SystemInfoMonitor.sh 是一个功能全面的系统资源持续监控脚本,实时检测 CPU 利用率、内存使用率、磁盘空间使用率和网络流量。当资源使用率连续超过设定阈值时,通过 Bark 推送告警通知,帮助管理员及时发现和处理系统资源瓶颈。
核心特性:
- 四项核心监控:CPU、内存、磁盘、网络流量
- 持续监控模式:后台持续运行,定期检查系统状态
- 智能告警机制:基于灵敏度阈值,避免误报
- 灵活配置:可自定义各项资源的告警阈值和检测间隔
- 网络接口过滤:自动排除 lo、docker0、veth 等虚拟接口
- Bark 集成:支持 iOS 推送告警通知
- 详细日志:输出带时间戳的监控日志
脚本依赖
系统工具依赖
bash:脚本运行环境(需要 bash shell)top:用于获取 CPU使用率free:用于获取内存使用信息df:用于获取磁盘空间使用情况ip:用于获取网络接口列表curl:用于发送 Bark 告警请求date:用于时间戳和日志记录
外部服务依赖(可选)
- Bark 服务:iOS 推送通知服务(如不需要告警可禁用)
- 服务地址:
https://api.day.app/ - 获取 Bark Key:安装 Bark App 后自动生成
- 服务地址:
环境变量依赖
.env 文件配置
脚本需要加载同目录下的 .env文件,该文件应包含以下变量:
配置文件位置:
- 优先加载当前工作目录的
.env文件 - 其次加载脚本所在目录的
.env文件
参考文档: Bark 使用教程
内置变量说明(可自定义配置)
脚本开头定义了以下可配置变量(第 2-7 行):
变量作用说明:
- 阈值变量:超过此百分比或数值会触发告警逻辑
- 灵敏度阈值:防止瞬时峰值导致误报,需连续 N 次检测超标才告警
- 检测间隔:两次检查之间的等待时间,影响监控频率和系统负载
参数用法
本脚本无命令行参数,通过修改脚本内变量和配置文件进行定制:
- 无参数模式:使用默认阈值和间隔进行持续监控
- 自定义配置:编辑脚本开头的变量定义部分
- 禁用告警:注释掉.env加载部分或Bark相关的curl命令
使用方法
快速安装与使用
下载脚本:
创建配置文件:
自定义配置(可选): 编辑
SystemInfoMonitor.sh脚本,修改第 2-7 行的阈值:运行脚本:
典型使用场景示例
场景 1:测试监控和告警通道
场景 2:生产服务器监控(推荐配置)
| |
场景 3:禁用 Bark 告警仅记录日志
如果不需要 Bark 通知,只保留日志记录:
| |
场景 4:监控关键业务服务器
对于关键服务器,设置更严格的监控策略:
| |
场景 5:扩展其他告警通道
在脚本中添加钉钉机器人告警:
| |
场景 6:临时监控特定资源
只监控 CPU 和内存,暂时关闭磁盘和网络监控:
监控函数详解
CPU 监控(check_cpu)
- 检测原理:使用
top -bn1获取 CPU使用率 - 告警 URL:
https://api.day.app/$bark_key/CPU报警/CPU持续利用率过高 - 触发条件:连续
SENSITIVITY_THRESHOLD次超过CPU_THRESHOLD
内存监控(check_memory)
- 检测原理:使用
free命令计算内存使用百分比 - 告警 URL:
https://api.day.app/$bark_key/内存报警/内存持续利用率过高 - 触发条件:连续
SENSITIVITY_THRESHOLD次超过MEMORY_THRESHOLD
磁盘监控(check_disk_space)
- 检测原理:使用
df命令获取根分区(/)使用率 - 告警 URL:
https://api.day.app/$bark_key/disk报警/disk持续利用率过高 - 触发条件:连续
SENSITIVITY_THRESHOLD次超过DISK_THRESHOLD
网络监控(check_network_activity)
- 检测原理:读取
/sys/class/net/*/statistics/rx_bytes和tx_bytes计算流量速率 - 监控接口:自动排除 lo、docker0、veth-*、br-*等虚拟接口
- 告警 URL:
https://api.day.app/$bark_key/网络报警/网络持续利用率过高 - 触发条件:单个网卡连续
SENSITIVITY_THRESHOLD次超过NETWORK_THRESHOLD
实际应用场景
- 生产服务器监控:7x24 小时持续监控关键业务服务器的资源状态
- 性能瓶颈识别:发现 CPU、内存、磁盘或网络的性能瓶颈
- 容量规划:跟踪资源使用趋势,为硬件升级提供数据支持
- 故障预警:在资源耗尽前提前告警,避免服务中断
- 异常检测:发现异常的资源使用模式(如挖矿病毒、DDoS攻击)
- 开发测试环境:监控开发服务器的资源使用,优化应用性能
- 容器宿主机监控:监控 Docker、Kubernetes节点的物理资源
- 数据库服务器:重点监控数据库服务器的内存和磁盘使用
注意事项
阈值配置建议
CPU 阈值:
- 一般服务器:80-85%
- 计算密集型:90-95%
- 关键业务:70-75%(更早预警)
内存阈值:
- 一般服务器:85-90%
- Java应用服务器:90-95%(考虑 JVM缓存)
- 数据库服务器:80-85%
磁盘阈值:
- 一般服务器:80-85%
- 日志服务器:75-80%(日志增长快)
- 关键业务:70-75%
网络阈值:
- 根据网卡带宽设置
- 百兆网卡:10-50MB/s
- 千兆网卡:50-100MB/s
- 万兆网卡:500MB/s以上
灵敏度调优
高灵敏度(SENSITIVITY_THRESHOLD=2-3):
- 优点:更快发现问题
- 缺点:可能误报,告警频繁
低灵敏度(SENSITIVITY_THRESHOLD=5-10):
- 优点:减少误报,告警更可靠
- 缺点:可能延迟发现问题
建议:根据实际环境调整,生产环境推荐 3-5 次
监控频率选择
高频监控(CHECK_INTERVAL=5-10 秒):
- 适用场景:关键业务、资源紧张环境
- 缺点:监控脚本本身消耗资源
低频监控(CHECK_INTERVAL=30-60 秒):
- 适用场景:一般服务器、资源充足环境
- 优点:监控开销小
Bark 服务配置
- Bark Key 保密性:不要将.env文件提交到代码仓库
- 网络可达性:确保服务器能访问
https://api.day.app/ - 推送频率限制:避免过于频繁的告警触发限制
进程管理
后台运行:建议使用 nohup、screen或tmux运行脚本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21# 使用 nohup nohup ./SystemInfoMonitor.sh > /var/log/sysmonitor.log 2>&1 & # 使用 systemd 服务(推荐) cat > /etc/systemd/system/sysmonitor.service <<EOF [Unit] Description=System Resource Monitor After=network.target [Service] Type=simple ExecStart=/path/to/SystemInfoMonitor.sh Restart=always User=root [Install] WantedBy=multi-user.target EOF systemctl enable sysmonitor systemctl start sysmonitor开机自启:配置 systemd 服务实现开机自动监控
日志管理
日志轮转:配置 logrotate 防止日志文件过大
日志分析:定期查看日志分析资源使用趋势
扩展与定制
- 多通道告警:同时配置 Bark、钉钉、企业微信、邮件等多种告警方式
- Webhook集成:对接 Prometheus Alertmanager、Zabbix等监控系统
- 数据持久化:将监控数据写入 InfluxDB、Prometheus 等时序数据库
- 可视化展示:配合 Grafana 等工具制作监控仪表盘
局限性说明
- 单机监控:仅监控本地资源,不支持分布式监控
- 历史数据:不保存历史数据,仅提供实时监控
- 精度限制:基于系统命令的采样精度,不适合微秒级监控需求
- 容器感知:无法区分宿主机和容器的资源使用(需要在容器内运行)
安全提示
权限控制:建议使用 root 用户运行以获取完整系统信息
文件保护:确保.env文件和日志文件的权限设置合理
网络安全:确保 Bark API调用使用 HTTPS加密传输