抓取日誌

=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};
    }

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章