最近一直在看dancer,发现真心好用,之前在看mojo,搞了好久没有搞懂.只能怪自己太挫了.

作为练手就写了一套简易的监控系统,主要是利用net::ssh2模块监控AIX服务器的CPU,IO负载,还有磁盘空间.当然如果你是linux/unix作为监控服务器简易使用net::ssh:perl 或者使用SNMP来获取服务器信息.

在lib下添加

login.pm

package login;
use Dancer ':syntax';
use Net::SSH2;
use Data::Dumper;
$| = 1;
prefix '/monitor';
my $envMon = {
    NST => {
        '192.168.1.100' => [ 'user', 'passwd' ],
        '192.168.1.101' => [ 'user', 'passwd' ],
          '192.168.1.102' => [ 'user', 'passwd' ],
   },
    UAT => {
       '192.168.1.103' => [ 'user', 'passwd' ],
       '192.168.1.104' => [ 'user', 'passwd' ],
    }
};
sub mon {
    my ( $host, $user, $passwd, $env ) = @_;
    my @monArr;
    my $monOut;
    my $ssh2 = Net::SSH2->new();
    my $row;
    $ssh2->connect("$host") or die "$!";
    if ( $ssh2->auth_password( "$user", "$passwd" ) ) {
        my $chan = $ssh2->channel();
        # $chan->blocking(1);
        $chan->shell();
        #monitor memory useage
  这款是监控内存,因为linux/unix内存机制都是有多少用多少,所以就去掉了
        # print $chan "svmon -G\n";
        #
        # while(<$chan>){
        # if(/^memory\s+([\d.]+)\s+([\d.]+)\s+([\d.]+)/){
        # push @{$monOut->{'memory'}},sprintf"%0.2f",$2/$1*100;
        # }
        #}
        #monitor disk data
        print $chan "df -g\n";
        while (<$chan>) {
            if (/^\S+\s+([\d.]+)\s+([\d.]+)\s+(\d+)%\s+[^\/]+(\S+)$/) {
                # push @monArr, $3, $1, $2;
                if ( $3 > 80 ) {
                    push @{ $monOut->{'disk'} }, $4, $1, $2,
                        ''
                      . $3
                      . '%