赞
踩
今天,我将为大家分享一个神奇的Bash脚本,它不仅可以一键监控多台服务器的磁盘使用情况,还能在磁盘使用率超过设定阈值时自动发送警报邮件。这个脚本将极大提升系统管理员的工作效率,让你轻松驾驭海量服务器磁盘管理!
一、脚本功能简介
该脚本通过SSH远程连接到多台服务器,执行df -h
命令获取磁盘使用情况,然后解析输出结果,判断各分区的使用率。如果某个分区的使用率超过了预设的阈值(默认为80%),脚本将自动发送一封警报邮件给管理员,以便及时采取措施。
二、脚本代码详解
下面是脚本的完整代码,我将逐行进行注释和讲解:
#!/bin/bash
# 设定磁盘使用率的最大阈值,默认为80%
FSMAX="80"
# 设定远程连接的用户名,这里为root
remote_user='root'
# 设定要监控的服务器IP地址列表,替换(IP地址列表)为实际的IP地址,多个IP之间用空格分隔
remote_ip=(IP地址列表)
# 初始化服务器IP地址的索引变量
ip_num='0'
# 循环遍历服务器IP地址列表
while [ "$ip_num" -le "$(expr ${#remote_ip[@]} - 1)"]
do
# 初始化读取行数变量
read_num='1'
# 通过SSH远程连接到服务器,并执行df -h命令获取磁盘使用情况,结果重定向到临时文件
ssh "$remote_user"@"${remote_ip[$ip_num]}" df -h > /tmp/diskcheck_tmp
# 使用grep, awk和sed命令解析磁盘使用情况,提取出各分区的使用率并去除百分号,结果重定向到另一个临时文件
grep '^/dev/*' /tmp/diskcheck_tmp | awk '{print $5}' | sed 's/\%//g' > /tmp/diskcheck_num_tmp
# 循环读取磁盘使用率,并进行判断
while [ "$read_num" -le $(wc -l < /tmp/diskcheck_num_tmp) ]
do
# 提取某一行的磁盘使用率
size=$(sed -n "$read_num"p /tmp/diskcheck_num_tmp)
# 判断磁盘使用率是否超过阈值
if [ "$size" -gt "$FSMAX" ]
then
# 如果超过阈值,则发送警报邮件(此处代码有误,稍后修正)
fi
# 提取对应的磁盘分区信息,并追加到邮件内容中(此处代码有误,稍后修正)
# ...(省略部分代码)
# 更新读取行数变量
read_num=$(expr $read_num + 1)
done
# 更新服务器IP地址的索引变量
ip_num=$(expr $ip_num + 1)
done
注意:上述代码中的邮件发送部分存在错误和不完整,接下来我们将对其进行修正和完善。
三、修正和完善脚本
修正邮件发送部分的代码,确保能够正确发送包含警报信息的邮件。
完善邮件内容,包括服务器IP地址、超过阈值的磁盘分区以及实际使用率等信息。
修正后的代码如下:
#!/bin/bash
FSMAX="80"
remote_user='root'
remote_ip=(IP地址列表)
ip_num='0'
MAIL_CONTENT="" # 初始化邮件内容变量
while [ "$ip_num" -le "$(expr ${#remote_ip[@]} - 1)" ]; do
read_num='1'
ssh "$remote_user"@"${remote_ip[$ip_num]}" df -h > /tmp/diskcheck_tmp
grep '^/dev/' /tmp/diskcheck_tmp | awk '{print $5}' | sed 's/\%//g' > /tmp/diskcheck_num_tmp
while [ "$read_num" -le $(wc -l < /tmp/diskcheck_num_tmp) ]; do
size=$(sed -n "$read_num"p /tmp/diskcheck_num_tmp)
if [ "$size" -gt "$FSMAX" ]; then
partition=$(sed -n "$read_num"p /tmp/diskcheck_tmp | awk '{print $6}') # 提取分区信息
usage=$(sed -n "$read_num"p /tmp/diskcheck_tmp | awk '{print $5}') # 提取使用率信息(带百分号)
MAIL_CONTENT="${MAIL_CONTENT}服务器IP: ${remote_ip[$ip_num]}, 磁盘分区: $partition, 使用率: $usage\n"
fi
read_num=$(expr $read_num + 1)
done
ip_num=$(expr $ip_num + 1)
done
if [ -n "$MAIL_CONTENT" ]; then
echo "$MAIL_CONTENT" | mail -s "磁盘使用率警报" admin # 发送邮件给管理员
fi
四、总结
通过以上修正和完善,我们得到了一个功能强大的Bash脚本,能够一键监控多台服务器的磁盘使用情况,并在磁盘使用率超过设定阈值时自动发送警报邮件。这个脚本将极大提升系统管理员的工作效率,让你轻松驾驭海量服务器磁盘管理!赶快试试吧!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。