简单的perl脚本从一台linux主机来统一收集每台SERVER disk空间使用量,用SHELL写一个可能更容易懂.
1.在dmsdb DB中添加一table 将所要收集的server添加到TAB_HOSTS 表中,栏位至少有ip hostname status(这个便于控制关停收集某台)
2.根据上篇文章SSH login without password配置ssh 登陆
3.还要有PERL DBI组件
主要script如下,可以做小修改超过多少percent就发mail出来报警和将每天的记录在DB中.
#!/usr/bin/perl -w
use strict;
use DBI qw(:sql_types);
$ENV{"ORACLE_HOME"} = "/opt/oracle/product/9ir2";
my $dbh = DBI->connect( 'dbi:Oracle:dmsdb',
'username',
'password',
{ RaiseError => 1, AutoCommit => 0 }
) || die "Database connection not made: $DBI::errstr" ;
my $DateTime = `date +'%Y-%m-%d'`;
my $p1 = " " x 10;
chomp($DateTime);
my $sth = $dbh->prepare(qq{SELECT IP,HOSTNAME FROM TAB_HOSTS WHERE STATUS = 'UP'});
$sth->execute();
while ( my ($Ip,$HostName) = $sth->fetchrow_array() ) {
my @OsInfo = split(/\s+/,`ssh -l smmon $Ip "uname -sn"`);
if ($OsInfo[0] =~ /Linux/) {
my @DiskList = `ssh -l smmon $Ip df -k`;
print "\n\n\n";
print "$DateTime ";
print "$HostName $Ip \n";
print "@DiskList";
}
elsif($OsInfo[0] =~ /HP-UX/) {
my @DiskList = `ssh -l smmon $Ip bdf`;
print "\n\n\n";
print "$DateTime ";
print "$HostName $Ip\n";
print "@DiskList";
}
}
$sth->finish;
$dbh->disconnect();