当前位置: > shell编程 >

监视远程磁盘的健康情况的shell脚本

时间:2014-09-10 19:10来源:linux.it.net.cn 作者:it

       网络是由不同用户的多台主机所组成的。它需要对远程主机的磁盘使用情况进行集中监视。
       网络系统管理员需要每天记录网络中所有主机的磁盘使用情况。日志的每一行应该包含日期、主机IP地址、设备、设备容量、占用空间、剩余空间、使用比例、健康状况等细节信息。

       如果任何远程主机中的任意分区使用率超过了80%,那么健康状态应该被设置为ALERT,否则就可以设置为SAFT。

        本文介绍的脚本,负责收集远程主机的详细信息。需要从网络中每台主机收集磁盘使用情况的统计信息,并写入中央主机的日志文件中。可以将负责收集信息并写入日志的脚本调度为每天执行。
注:SSH可用于登录远程系统收集磁盘的使用数据。 
 

       首先,我们需要在所有网络中的远程主机上设置一个共用的账户。这个账户供脚本disklog登录系统使用。
       我们需要为这个账户配置SSH自动登录。我们假设在所有配置了自动登录的远程主机上都有一个叫做test的用户。

例子:
 

复制代码代码如下:

#!/bin/bash
# 文件名:disklog.sh
# 用途:监视远程系统的磁盘使用情况

logfile="diskusage.log"
if [[ -n $1 ]]
then
   logfile=$1
if
if [ ! -e $logfile ]
then
   printf "%-8s %-14s %-9s %-8s %-6s %-6s %-6s %s\n" "Date" "IP ADDRESS" "Device" "Capacity" "Used" "Free" "Percent" "Status" > $logfile
fi

IP_LIST="127.0.0.1 0.0.0.0"
# 提供远程主机IP地址列表
(
for ip in $IP_LIST
do 
  ssh slynux@$ip 'df -H' | grep ^/dev/ > /tmp/$$.df

  while read line;
  do
    cur_date=$(date +%D)
    printf "%-8s %-14s " $cur_date $ip
    echo $line | awk '{ printf("%-9s %-8s %-6s %-6s %-8s", $1,$2,$3,$4,$5); }'

  pusg=$(echo $line | egrep -o "[0-9]+%")
    pusg=${pusg/\%/};
    if [ $pusg -lt 80 ];
    then
       echo SAFT
    else 
       echo ALERT
    fi
  done< /tmp/$$.df
done
)>>$logfile

我们可以用cron以固定的间隔来调度脚本执行,例如在crontab中加入如此条目,以实现每天上午10点自动运行脚本:
 

复制代码代码如下:
00 10 * * * /home/sh/disklog.sh /home/log/diskusg.log

执行crontab -e命令,添加上面一行内容并保存。
cron相关内容,请参考:
不错的crontab教程
linux定时任务设置crontab学习
crontab 命令格式与例子

也可以在需要时手动执行该脚本:
$ ./disklog.sh

该脚本的输出结果示例如下:
disklog

注解:

    在脚本 disklog.sh 中,我们可以提供日志文件路径作为其命令行参数,否则脚本使用默认的日志文件。

    如果日志文件不存在,它会将日志文件头部写入新文件中。

    -e logfile用来检查文件是否存在。

    远程主机的IP地址列表被存储在变量IP_LIST中,彼此之间以空格做分隔。要确保在IP_LIST中列出的所有远程系统中都有用户test,并且SSH已经配置了自动登录。for循环用来对IP地址进行逐个迭代。通过ssh使用远程命令df -H获取磁盘的剩余空间。这项数据被存储在一个临时文件中,while循环用来逐个读取这个文件。

    用awk提取并打印数据,同时一并打印的还有日期。用egrep提取使用率,并将%删除以获取使用率的数值部分。检查得到的数值,看是否超过了80。如果不足80,将状态设置为SAFT;如果大于或等于80,则将状态设置为ALERT。

    打印出来的所有数据要被重定向到日志文件中。因此代码被放入了子shell中,并将标准输出重定向为日志文件。

(责任编辑:IT)
------分隔线----------------------------
栏目列表
推荐内容