抓取日志

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

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值