- 论坛徽章:
- 0
|
本帖最后由 robinylp 于 2011-04-20 23:05 编辑
#!/usr/bin/perl -w
use strict;
use Data::Dumper;
my @alerts;
my %prtrlinkios = ( "match" => qr/UPDOWN.*Port-channel.*down/,
"hosts" => ".*",
lifetime => 600
);
push(@alerts, \%prtrlinkios);
my %prtest = ( "match" => qr/down/,
"hosts" => ".*",
lifetime => 600
);
push(@alerts, \%prtest);
my %uptest = ( "match" => qr/upupupup/,
"hosts" => ".*",
lifetime => 600
);
push(@alerts, \%uptest);
my %known;
my $zahl = 0;
#print Dumper(@alerts);
while(<STDIN>)
{
my $msg = $_;
/^[^ ]+ +[^ ]+ +[^ ]+ +([^ ]+).* %(.+)$/;
my $host = $1 || "";
my $logline = $2 || $msg;
for(my $i=0; $i<=$#alerts; $i++) {
my $match = $alerts[$i]{"match"};
my $hosts = $alerts[$i]{"hosts"};
if ($logline =~ /$match/ and $host =~ /$hosts/) {
print "Got match!\n";
$zahl++;
if ($known{"$host:$logline"}) {
if ((int $known{"$host:$logline"}) < time()) {
delete($known{"$host:$logline"});
} else {
next;
}
}
$known{"$host:$logline"} = time() + $alerts[$i]{"lifetime"};
open (FD, ">>test.txt");
print FD "Logged:\n";
print FD "Message: $msg\n";
print FD "Count: $zahl\n";
close FD;
}
}
}
已经有记录在test.txt文件中间了,但是计数的($zahl)还是没有解决,请帮忙看看,对于不同信息的计数都是错的。是不是 my $zahl = 0; 的位置有问题,应该放在哪里啊?
打入;
upupupup
Got match!
upupupup
Got match!
upupupup
Got match!
down
Got match!
down
Got match!
down
Got match!
down
Got match!
down
Got match!
test.txt输出:
Logged:
Message: upupupup
Count: 1
Logged:
Message: down
Count: 4
计数错误! |
|