云计算百科
云计算领域专业知识百科平台

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 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » HoRain云--多服务器磁盘监控Shell脚本教程
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!