您的位置:首页 > 其它

抓取日志

2015-11-28 12:05 399 查看
=pod
脚本主要的功能是通过抓取日志里关键字,来统计日志里的所有接口调用量和接口响应时间
=cut
#!/usr/bin/perl
use strict;
use warnings;
use File::Find;
use File::Basename;
use POSIX qw(strftime);

my $date =  strftime("%Y-%m-%d", localtime(time - 24*3600));#yestarday
my $LOG_DIR="/test/test/test/";
my @dirnames;
opendir FL,"$LOG_DIR"
or die "Can't opendir $LOG_DIR:$!\n";

#匹配日志目录
while (my $dir_name = readdir FL)
{
push @dirnames,"$LOG_DIR$dir_name/mamc_api"
if($dir_name =~/test\d+/);
}
my @log_names;
#存储指定的日志文件及路径
sub wanted
{
push  @log_names,"$File::Find::name"
if($File::Find::name =~/test\.log\.$date/);

}

find(\&wanted,@dirnames);

my $count;
my (%h1,%h2);
#统计接口调用总量和平均耗时,单位为毫秒
for my $logfile (@log_names)
{
$count++;
open(LOG,$logfile);
while(<LOG>)
{
if(/(?:.*?)\s+\[INFO\s+\]\s+(?:.*?)\s+<S\=(.*?)\,IP\=(?:.*?)\s+(?:.*?)\s+####### Finish Request\[(.*?)\]\s+Cost\[(.*?)ms\]/)
{
my($str1,$str2,$val)= ($1,$2,$3);
$h1{$str1}{$str2}++;
$h2{$str1}{$str2} += $val;
}
}
#last if $count == 1;
}

#输出接口调用总量和平均耗时
for my $t1 (sort keys %h1)
{
for my $t2 (sort keys %{ $h1{$t1} })
{
print "$t1,$t2,";
printf "%d,%.2f\n",$h1{$t1}{$t2},$h2{$t1}{$t2}/$h1{$t1}{$t2};
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息