成都创新互联网站制作重庆分公司

shell编程实战之如何监控磁盘分区的使用率-创新互联

这篇文章将为大家详细讲解有关shell编程实战之如何监控磁盘分区的使用率,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

创新互联建站企业建站,10余年网站建设经验,专注于网站建设技术,精于网页设计,有多年建站和网站代运营经验,设计师为客户打造网络企业风格,提供周到的建站售前咨询和贴心的售后服务。对于网站建设、成都网站建设中不同领域进行深入了解和探索,创新互联在网站建设中充分了解客户行业的需求,以灵动的思维在网页中充分展现,通过对客户行业精准市场调研,为客户提供的解决方案。

不知道大家有没有碰到过磁盘分区写满,导致新数据写入不了,造成网站出现了问题。之前自己有几次碰到过这种情况,自己当时紧急解决办法是:删除网站的日志文件,删除了MySQL的binlog日志。

当然我们是不希望发生此类问题的,如果网站总出现不稳定或打不开情况,会给用户一种不靠谱的感觉。所以,对于磁盘分区的使用,我们需要实时监控,当超过预设值时,就发送份邮件或短信给管理员,将错误扼杀至摇篮里。

对于此脚本的编写是很简单的,主要一点就是获取到磁盘分区的使用率。我们知道df命令可以列出各个分区的空间使用情况:

# df 
Filesystem     1K-blocks     Used Available Use% Mounted on
devtmpfs         3986648        0   3986648   0% /dev
tmpfs            3999984        0   3999984   0% /dev/shm
tmpfs            3999984      528   3999456   1% /run
tmpfs            3999984        0   3999984   0% /sys/fs/cgroup
/dev/vda1       41931756 17576208  24355548  42% /
/dev/vdb1       52403200   476572  51926628   1% /data
/dev/vdb2      104806400 29255772  75550628  28% /www
tmpfs             799996        0    799996   0% /run/user/0
/dev/vdb3       52402180   398576  52003604   1% /mnt

我们可以看到各个分区的空间使用情况。然后接口grep命令以及awk命令,过滤掉其他信息,只留下各个分区的使用情况信息。

我们只想得到以/dev/开头的分区信息

# df | grep ^/dev
/dev/vda1       41931756 17576264  24355492  42% /
/dev/vdb1       52403200   476572  51926628   1% /data
/dev/vdb2      104806400 29255980  75550420  28% /www
/dev/vdb3       52402180   398576  52003604   1% /mnt

然后继续使用awk命令过滤不想要的信息

# df | grep ^/dev | awk '{print $1":"$5}'
/dev/vda1:42%
/dev/vdb1:1%
/dev/vdb2:28%
/dev/vdb3:1%

拿到各个分区的使用率后,下面就是对其进行循环遍历,依次判断各个分区的使用情况。

下面给出完成的代码:

#!/bin/bash
# 监控分区的空间使用情况,超过预设值告警
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:~/bin
export LANG=en

# 分区空间使用率阀值
USE_LIM=70
while ((1))
do
    disks=$( df | grep ^/dev | awk '{print $1":"$5}')
    for disk in $disks
    do
        used=$(echo $disk | cut -d: -f2 | cut -d'%' -f1)
        
        if [ "$used" -ge "$USE_LIM" ];then
            # 调用告警脚本,这里直接用echo来替代了
            echo "$(echo $disk | cut -d: -f1) is used $used%"
        fi
    done
    
    sleep 10
done

注意:一般我们服务器上用的语系都是英文的,特别是在编写shell脚本的时候,建议加上这样一行

export LANG=en

因为我们是要做实时的监控,所以脚本里使用了死循环,表示此脚本不会停会一直循环执行。当然,执行速度也是要做限制的,不然占用太多服务器资源就不太好了。所以这里使用了sleep 10,表示10秒监控一次。

另外这里还要一点需要注意,就是过滤掉百分号%。这里我们使用了cut命令来过滤掉%,然后拿到纯数字型的分区使用率和预设值做比较。

关于shell编程实战之如何监控磁盘分区的使用率就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。


名称栏目:shell编程实战之如何监控磁盘分区的使用率-创新互联
标题网址:http://cxhlcq.com/article/igpgi.html

其他资讯

在线咨询

微信咨询

电话咨询

028-86922220(工作日)

18980820575(7×24)

提交需求

返回顶部