网络是由不同用户的多台主机所组成的。它需要对远程主机的磁盘使用情况进行集中监视。
网络系统管理员需要每天记录网络中所有主机的磁盘使用情况。日志的每一行应该包含日期、主机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点自动运行脚本:
执行crontab -e命令,添加上面一行内容并保存。
cron相关内容,请参考:
不错的crontab教程
linux定时任务设置crontab学习
crontab 命令格式与例子
也可以在需要时手动执行该脚本:
$ ./disklog.sh
该脚本的输出结果示例如下:
注解:
在脚本 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状态的方法
监控磁盘空间使用率的脚本