在当今这个数据为王的时代,服务器的磁盘空间使用情况成为了系统管理员日常关注的重要指标之一。磁盘空间不足可能导致服务中断,数据丢失,甚至整个系统崩溃。因此,及时监控磁盘空间,预防潜在风险,成为了每个系统管理员的必修课。
今天,我将为大家分享一个神奇的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脚本,能够一键监控多台服务器的磁盘使用情况,并在磁盘使用率超过设定阈值时自动发送警报邮件。这个脚本将极大提升系统管理员的工作效率,让你轻松驾驭海量服务器磁盘管理!赶快试试吧!