NFS 存储服务器监控与报警工具

这是我在大二小学期获得shell编程赛系第一的项目

NFS 存储服务器监控与报警工具

题目要求

(1)公司需提供一台 NFS 服务器,为内网各服务器提供集中式存储。配置另一台服务器作为文件共享服务器,挂载 NFS 服务器提供的存储,所有员工可以远程登录该文件共享服务器使用存储资源。该文件共享服务器需要利用 shell 脚本判断连接 NFS 服务器的状态,如果断开连接需要立刻发送报警信息给管理员。

(02)在文件共享服务器上,定期计算各用户对共享存储的使用情况,将使用量位居前十的用户记录到日志中。如某个用户使用量超过预设的临界值,需给用户发送提醒信息。
(3)如磁盘空间使用量超过 80%,需给管理员报送报警信息。

项目代码

#!/bin/bash
administratormailbox=$(echo "[email protected]")
sendusermail=$(echo "[email protected]")
sendusermailpasswd=$(echo "jioggmezpavybegj")
usermailfilepwd="/root/userqqmail"
NFSpropor="172.23.19.93:/2100304zu/dir1"
gxdirpwd="/gx/dir"
propor=$(echo "30")
rpm=$(rpm -q mailx | grep mailx-)
if [[ -z $rpm ]]; then
        yum -y install mailx &> /dev/null
fi
NFSmonitoring="/root/NFSmonitoring"
if [ -d $NFSmonitoring ];then
        mkdir $NFSmonitoring 2> /dev/null
fi
usercfpwd="/root/NFSmonitoring/usercf"          #收集所有用户 文件里的用户会有重复的 因为一个用户可能创建很多个文件以及目录 这个文件名翻译为 用户重复文件路径
usernocfpwd="/root/NFSmonitoring/usernocf"      #把重复用户文件去重 写入不重复的文件                                        这个文件名翻译为 用户不重复文件路径
userfile="/root/NFSmonitoring/userfile"         #查看某个用户创建的所有文件的路径写入该文件                                 这个文件名翻译为 用户的文件路径
usersizeall="/root/NFSmonitoring/usersizeall"   #某个用户创建的文件以及目录的大小之和写入这个文件                           这个文件名翻译为 用户全部大小的路径
userdirfile="/root/NFSmonitoring/userdirfile"   #查看某个用户创建的所有目录的路径写入该文件                                 这个文件名翻译为 用户的目录路径
date=$(date +"%Y-%m-%d_%H-%M")                  #把当前时间赋值给变量  目的就是把时间当成日志的文件名
tt=true
disconnect=$(mount | grep "$gxdirpwd")
if [[ -z $disconnect ]];then
        mount=$(mount -o rw,sync $NFSpropor $gxdirpwd)
        if [[ $? -ne 0 ]]; then
                tt=false
                 echo "检测到共享目录并没进行挂载 使用自动挂载且自动挂载失败 请立即处理!!!" | mailx -s "警报通知" -r "$sendusermail" -S smtp=smtp.qq.com:587 -S smtp-auth=login -S smtp-auth-user="$sendusermail" -S smtp-auth-password="$sendusermailpasswd" -S ssl-verify=ignore "$administratormailbox"
        else
                echo "检测共享目录无挂载点 已自动挂载 且自动挂载成功 请及时查看是否出现问题" | mailx -s "提醒通知" -r "$sendusermail" -S smtp=smtp.qq.com:587 -S smtp-auth=login -S smtp-auth-user="$sendusermail" -S smtp-auth-password="$sendusermailpasswd" -S ssl-verify=ignore "$administratormailbox"
        fi
fi
if $tt;then
        ls -l "$gxdirpwd" | awk '{print $3}' > "$usercfpwd"
        sort "$usercfpwd" | uniq  > "$usernocfpwd"
        sed -i '/^$/d' $usernocfpwd
        usernocfcat=$(cat "$usernocfpwd")
        for usere in $usernocfcat
        do
                echo $usere
                find "$gxdirpwd" -type d -user "$usere" > "$userdirfile"
                find "$gxdirpwd" -type f -user "$usere" > "$userfile"
                sum=0
                userfilecat=$(cat "$userfile")
                userdirfilecat=$(cat "$userdirfile")
                for file in $userfilecat
                do
                        echo "1"
                        echo $file
                        filesizee=$(ll $file | awk '{print $5}')
                        ((sum+=$filesizee))
                done
                for dirfile in $userdirfilecat
                do
                        echo "2"
                        echo $dirfile
                        dirfilesize=$(ls -dl $dirfile | awk '{print $5}')
                        ((sum+=$dirfilesize))
                done
                > $userdirfile
                > $userfile
                filesize="/root/NFSmonitoring/NFSlog"
                echo $sum
                if [ ! -d $filesize ];then
                        mkdir "$filesize"
                fi
                datefile=""$filesize"/"$date"NFSlog"
                printf "%-15s %s\n" "$sum" "$usere" >> "$datefile"
                sort -nr "$datefile" -o "$datefile"
                uniq $datefile > $usercfpwd && mv -f $usercfpwd $datefile
                sum=0
        done
        cat "$datefile" > "$usersizeall"
        head -n 10 $datefile > $userfile
        mv -f $userfile $datefile
        sum1=$(awk -F ':' '$3>1000&&$3<65534{print $0}' /etc/passwd | wc -l)
        sum2=$(df -h "$gxdirpwd" | grep -w "$gxdirpwd" | awk '{print $2}' | sed 's/M/ /')
        sum3=$((sum2*1048576))
        a=$((sum3/$sum1))
        echo $a
        filesizeuser=$(awk '{print $2}' "$usersizeall")
        for x in $filesizeuser
        do
                size=$(grep -w ${x} "$usersizeall" | awk '{print $1}')
                if [ $size -gt "$a" ] ; then
                        qqmail=$(grep -w "$x" "$usermailfilepwd" | awk '{print $2}')
                        echo "您的共享目录使用量过高" | mailx -s "提醒通知" -r "$sendusermail" -S smtp=smtp.qq.com:587 -S smtp-auth=login -S smtp-auth-user="$sendusermail" -S smtp-auth-password="$sendusermailpasswd" -S ssl-verify=ignore "$qqmail"
        fi
        done
        percentage=$(df -h 2> /dev/null | grep  "$gxdirpwd" | awk '{print $5}' | sed 's/%/ /')
        if [[ $percentage -gt "$propor" ]];then
                echo "NFS存储服务器 磁盘空间使用量超过%80 请及时处理!!!" | mailx -s "警告通知" -r "$sendusermail" -S smtp=smtp.qq.com:587 -S smtp-auth=login -S smtp-auth-user="$sendusermail" -S smtp-auth-password="$sendusermailpasswd" -S ssl-verify=ignore "$administratormailbox"
        fi
fi

你可能感兴趣的:(服务器,linux,安全)