• Shell脚本之linux服务器磁盘利用率监控


    一、需求说明

      作为一名主机运维工程师,日常工作中我们每天都需要巡检服务器的运行情况,包括服务器的网络通断性、磁盘利用率、服务进程等内容。为了减少工作量我们可以通过编写shell脚本,实现服务器的批量巡检。写好脚本之后我们可以设置定时任务,将巡检结果邮件发送给自己就OK啦。我们查看磁盘利用率就是使用df -h的命令,可以显示各磁盘分区的使用情况,此脚本就是基于此命令基础实现。
    在这里插入图片描述

    二、脚本内容

      脚本主要设计思路是通过ssh免密远程登录待巡检主机,并执行df -h命令。通过awk命令过滤中磁盘利用率列值并与阈值进行比较,超过阈值的值记录下来。配置定时任务执行脚本,将巡检结果邮件告知。
      脚本包含文件如下:

    • 主脚本文件:disk_check.sh
    • 待巡检主机列表:hosts.txt
    • 检查结果临时文件:df.txt
    • 超过阈值磁盘信息临时文件:ls.txt

      脚本主体内容如下:

    #!/bin/bash
    #scriptname: disk_check.sh 
    #author: wuhs
    #description: 此脚本用于检查linux服务器的磁盘使用率,超过预警阈值则邮件告警
    #version: v1.0
    
    #参数定义
    #脚本工作目录
    resultfiledir=/root/scripts/xunjian/diskinfo
    #待巡检服务器列表
    hostlist="/root/scripts/xunjian/diskinfo/hosts.txt"
    #告警阈值
    warnsize=95
    #切换到工作目录,定时任务执行时默认在bash路径下执行,所以需要在脚本中切换路径
    curdir=`cd -P $(dirname $0); pwd`
    cd $curdir
    
    #删除上一次执行记录,也可以执行完成脚本后删除,执行前删除是方便收到告警时人工核查
    rm -rf $resultfiledir/df.txt
    #通过while循环读取待巡检服务器列表
    while read line
    do
      #获取带巡检主机名或者IP地址,建议主机名
      host=`echo $line | awk '{print $1}'`
      #获取待巡检主机ssh端口,考虑部分主机考虑安全修改了ssh服务端口
      port=`echo $line | awk '{print $2}'`
      #将当前巡检的主机写入巡检结果df.txt文件
      echo "$host 磁盘检查结果" >> $resultfiledir/df.txt
      #将获取到的df -h数据写入到df.txt文件,记得采用追加写入的方式
      ssh $host -p $port -n df -h >> $resultfiledir/df.txt
    done <"$hostlist"
    #获取磁盘使用率列值
    list=`cat df.txt |awk '{print int($5)}'`
    rm -rf ls.txt
    #使用率值与阈值进行比较
    for val in $list
    do
        if [ "$val" -gt "$warnsize" ];then
            #过滤大于阈值的磁盘结果行和主机名记录行
            cat df.txt |egrep "磁盘检查|$val%" |egrep -B 1 "$val%" >> ls.txt
        fi
    done
    #保证顺序的情况下删除重复项
    awk '!a[$0]++' ls.txt > tmp.txt
    rm -rf ls.txt
    mv tmp.txt ls.txt
    #发送告警邮件
    if [ -s ls.txt ]; then
        mailx -s "有超过磁盘使用率告警阈值$warnsize %的磁盘,请检查!" 
        1234567qq@qq.com < ls.txt
    else
        if [ $(date +%H) -eq 09 ];then
          mailx -s "磁盘使用率检查结果正常!" 1234567qq@qq.com < df.txt
        fi
    fi
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55

    三、使用示例

    1、手动执行脚本

    [root@s146 diskinfo]# sh disk_check.sh
    [root@s146 diskinfo]# ll
    total 16
    -rw-r–r-- 1 root root 1098 Oct 26 17:46 df.txt
    -rwxr–r-- 1 root root 1432 Oct 26 17:17 disk_check.sh
    -rw-r–r-- 1 root root 16 Oct 26 16:47 hosts.txt
    -rw-r–r-- 1 root root 150 Oct 26 17:46 ls.txt
    [root@s146 diskinfo]# cat ls.txt
    s146 磁盘检查结果
    /dev/sda1 1014M 207M 808M 21% /boot
    s166 磁盘检查结果
    /dev/mapper/centos-root 38G 11G 27G 30% /
    在这里插入图片描述

    2、定时任务执行

    • 首先配置定时任务,每天的早上6点到晚上10点之间每个小时执行一次。定时任务的配置可以参考Linux之crontab命令

    [root@s146 diskinfo]# crontab -l
    ####磁盘使用率监测定时任务####
    12 6-22/1 * * * /root/scripts/xunjian/diskinfo/diskinfo_check.sh &> /tmp/diskinfo_check.log

  • 相关阅读:
    SpringBoot定时任务 - 开箱即用分布式任务框架xxl-job
    【元宇宙】区块链上的游戏,你的所有资产都是开放的
    微信小程序商城如何构建私域流量池?
    设计模式总结
    如何制定并切实有效地量化职能人员考核标准?
    R语言奇异值分解
    05 【函数(上)】
    高速公路安全监测预警系统的功能优势
    蓝牙基带的基础
    IO流(复习)
  • 原文地址:https://blog.csdn.net/carefree2005/article/details/127517829