HoRain云--多服务器磁盘监控Shell脚本教程
🎬 HoRain 云小助手:个人主页
⛺️生活的理想,就是为了理想的生活!
⛳️ 推荐
前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。
目录
⛳️ 推荐
1. 实现思路
2. 前置准备
3. 完整脚本
4. 关键功能说明
5. 使用方法
6. 进阶优化建议
7. 定时任务配置
1. 实现思路
- SSH免密登录:配置所有被监控服务器与执行脚本的主机之间SSH密钥登录
- 服务器列表:维护需要监控的服务器列表
- 磁盘检查:通过
df
命令获取磁盘利用率 - 阈值判断:设置报警阈值(如80%)
- 结果处理:记录日志并发送报警通知
2. 前置准备
# 生成SSH密钥对(在监控主机执行)
ssh-keygen -t rsa
# 将公钥部署到所有被监控服务器(替换your_username@server_ip)
ssh-copy-id your_username@server_ip
3. 完整脚本
#!/bin/bash
# 配置部分
THRESHOLD=80 # 磁盘使用率报警阈值
SERVER_LIST=("server1" "server2" "192.168.1.100") # 服务器列表
LOG_FILE="/var/log/disk_monitor.log" # 日志文件路径
EMAIL="admin@example.com" # 报警通知邮箱
# 检查磁盘函数
check_disk() {
local server=$1
# SSH连接超时设置为5秒
ssh -o ConnectTimeout=5 $server <<'EOF' 2>/dev/null
# 获取磁盘使用率(排除特殊文件系统)
df -P | awk 'NR>1 && $0!~/tmpfs|devtmpfs/ {print $5 " " $6}'
EOF
}
# 主循环
for server in "${SERVER_LIST[@]}"; do
echo "[$(date +'%Y-%m-%d %H:%M:%S')] Checking $server..." >> $LOG_FILE
if ! ping -c 1 -W 1 $server &> /dev/null; then
echo " $server: Network unreachable!" >> $LOG_FILE
continue
fi
result=$(check_disk $server)
if [ -z "$result" ]; then
echo " $server: SSH connection failed!" >> $LOG_FILE
continue
fi
# 处理检查结果
while read -r line; do
usage=${line%%%*} # 提取使用率数值
mount_point=${line#* } # 提取挂载点
if [ $usage -ge $THRESHOLD ]; then
alert_msg=" [WARNING] $server: $mount_point usage ${usage}%"
echo "$alert_msg" >> $LOG_FILE
# 发送邮件报警(需要配置mailx)
echo "$alert_msg" | mail -s "Disk Alert: $server" $EMAIL
fi
done <<< "$result"
done
4. 关键功能说明
- 网络检测:先通过ping检测服务器可达性
- SSH超时控制:设置5秒连接超时防止脚本阻塞
- 文件系统过滤:排除tmpfs、devtmpfs等特殊文件系统
- 错误处理:
- 网络不可达检测
- SSH连接失败处理
- 空结果检测
- 邮件报警:需要系统配置好mailx或sendmail
5. 使用方法
- 保存为
disk_monitor.sh
- 添加执行权限:
chmod +x disk_monitor.sh
- 测试运行:
./disk_monitor.sh
- 查看日志:
tail -f /var/log/disk_monitor.log
6. 进阶优化建议
- 并行检查:使用
&
和wait
实现并发检查for server in "${SERVER_LIST[@]}"; do ( check_disk $server >> /tmp/$$_$server.tmp ) & done wait
- HTML邮件:生成带表格的HTML格式报警邮件
- 企业微信/钉钉通知:替换邮件通知为Webhook通知
- 历史趋势记录:将结果存储到数据库,生成趋势报表
- 配置文件分离:将服务器列表、阈值等配置移至单独文件
7. 定时任务配置
# 每天检查3次(编辑crontab)
crontab -e
# 添加如下内容:
0 */8 * * * /path/to/disk_monitor.sh
注意事项:
- 确保所有被监控服务器的时间同步(使用ntp)
- 定期清理日志文件(可搭配logrotate)
- 敏感信息(如密码)建议使用加密存储
- 生产环境建议使用专业监控系统(如Prometheus+Alertmanager)
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄
💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍
🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙