总结摘要
SystemInfoMonitor.sh 是一个用于持续监控系统资源的 Shell 脚本,实时检测 CPU、内存、磁盘和网络使用情况,并在超过阈值时通过 Bark推送告警通知。
脚本功能
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命令
使用方法
快速安装与使用
下载脚本:
1 2 3 4 5# 使用主下载地址 bash <(curl -sL sc.eli1.top) SystemInfoMonitor download # 或使用备用地址 bash <(curl -sL download.elisky.cn) SystemInfoMonitor download创建配置文件:
1 2 3 4 5 6# 复制模板文件 cp .env-template .env # 编辑.env文件,填入 Bark Key vim .env # 添加:bark_key=your_bark_key_here自定义配置(可选): 编辑
SystemInfoMonitor.sh脚本,修改第 2-7 行的阈值:1 2 3 4 5 6 7 8# 调整 CPU 告警阈值为 90% CPU_THRESHOLD=90 # 调整内存告警阈值为 85% MEMORY_THRESHOLD=85 # 调整检测间隔为 30 秒 CHECK_INTERVAL=30运行脚本:
1 2 3 4 5 6 7 8 9 10 11 12 13# 赋予执行权限 chmod +x SystemInfoMonitor.sh # 前台运行(查看实时日志) ./SystemInfoMonitor.sh # 后台运行(推荐) nohup ./SystemInfoMonitor.sh > /var/log/sysmonitor.log 2>&1 & # 或使用 screen/tmux screen -S sysmonitor ./SystemInfoMonitor.sh # 按 Ctrl+A 然后 D 分离会话
典型使用场景示例
场景 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 防止日志文件过大
1 2 3 4 5 6 7 8 9 10 11cat > /etc/logrotate.d/sysmonitor <<EOF /var/log/sysmonitor.log { daily rotate 7 compress delaycompress missingok notifempty create 0644 root root } EOF日志分析:定期查看日志分析资源使用趋势
1 2 3 4 5# 查看最近的告警记录 grep "exceeds" /var/log/sysmonitor.log | tail -20 # 统计 CPU 告警次数 grep "CPU usage" /var/log/sysmonitor.log | wc -l
扩展与定制
- 多通道告警:同时配置 Bark、钉钉、企业微信、邮件等多种告警方式
- Webhook集成:对接 Prometheus Alertmanager、Zabbix等监控系统
- 数据持久化:将监控数据写入 InfluxDB、Prometheus 等时序数据库
- 可视化展示:配合 Grafana 等工具制作监控仪表盘
局限性说明
- 单机监控:仅监控本地资源,不支持分布式监控
- 历史数据:不保存历史数据,仅提供实时监控
- 精度限制:基于系统命令的采样精度,不适合微秒级监控需求
- 容器感知:无法区分宿主机和容器的资源使用(需要在容器内运行)
安全提示
权限控制:建议使用 root 用户运行以获取完整系统信息
文件保护:确保.env文件和日志文件的权限设置合理
1 2chmod 600 .env chmod 644 /var/log/sysmonitor.log网络安全:确保 Bark API调用使用 HTTPS加密传输






















