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

发布时间:2020-03-01编辑:脚本学堂
网络是由不同用户的多台主机所组成的。它需要对远程主机的磁盘使用情况进行集中监视。

    网络是由不同用户的多台主机所组成的。它需要对远程主机的磁盘使用情况进行集中监视。
    网络系统管理员需要每天记录网络中所有主机的磁盘使用情况。日志的每一行应该包含日期、主机IP地址、设备、设备容量、占用空间、剩余空间、使用比例、健康状况等细节信息。
    如果任何远程主机中的任意分区使用率超过了80%,那么健康状态应该被设置为ALERT,否则就可以设置为SAFT。

    本文介绍的脚本,负责收集远程主机的详细信息。需要从网络中每台主机收集磁盘使用情况的统计信息,并写入中央主机的日志文件中。可以将负责收集信息并写入日志的脚本调度为每天执行。
注:SSH可用于登录远程系统收集磁盘的使用数据。
有关ssh自动登录的内容,请参考:
linux上ssh配置指南
Linux系统下配置SSH方法
配置ssh,scp自动登陆
ssh,scp自动登陆方法
实现ssh自动登录的四种方法
ssh_config 配置文件详解
使用SSH Key实现安全的密钥证书方式登陆

    首先,我们需要在所有网络中的远程主机上设置一个共用的账户。这个账户供脚本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 %sn" "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中,并将标准输出重定向为日志文件。

您可能感兴趣的文章:
监测服务器内存、磁盘、cpu、swap的脚本
几个shell自动化脚本(定期清理、磁盘空间、搜寻关键字)
shell磁盘监控及报警的脚本
提取磁盘IO与系统负载Load的shell脚本
监控linux中CPU 内存 磁盘数据的shell脚本(图文)
磁盘空间使用状况检测脚本
linux 查看磁盘IO状态的方法
监控磁盘空间使用率的脚本