此脚本为client端的code,主要实现读取日志中的一些关键词进行过滤,以下介绍几个模块的用途:
File::Tail  用于读取日志,功能类似于linux中tail ,只读取最新的日志
AnyEvent  处理异步事件
AnyEvent::Socket  建立socket连接
AnyEvent::Handle  处理Socket中的句柄
Config::Tiny  读取ini配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#!/usr/bin/perl
#use warnings;
#use strict;
use File::Tail;
use AnyEvent;
use AnyEvent::Socket;
use AnyEvent::Handle;
use Config::Tiny;
use FindBin;
use lib "$FindBin::Bin/../module";
use log_grep;
main();
sub main {
    my $client_config_file "$FindBin::Bin/../etc/config.ini";
    my $config             = Config::Tiny->new;
    my $client_config      $config->read($client_config_file);
    my $client_log_info    $client_config->{'client_config_info'};
    my $log_type           $client_log_info->{'log_type'};
    my $user               $client_log_info->{'user'};
    my $port               $client_log_info->{'port'};
    my $log_path           $client_log_info->{'log_path'};
    my $remove_ip          $client_log_info->{'remove_ip'};
    my $local_ip           $client_log_info->{'local_ip'};
    my $apache_reglar =
qr/^((?:\d{1,3}\.){3}\d{1,3})[^[]+\[([^]]+)\]\s+\"([^"]+)\"\s+(\d+).*\"([^"]+)\"$/;
    my $nginx_reglar =
qr/^((?:\d{1,3}\.){3}\d{1,3})[^[]+\[([^]]+)\]\s+\"([^"]+)\"\s+(\d+).*\"([^"]+)\"$/;#这块根据具体情况来编写,
    my $log_grep = log_grep->new();
    my $cv       = AnyEvent->condvar;
               
    {
        tcp_connect $remove_ip$portsub {
            my ($fh) = @_
              or die "tcp_connect: $!";
            my $hdl = new AnyEvent::Handle fh => $fh;
                        
            my $file = File::Tail->new(
                name        => $log_path,
                maxinterval => 1,
                adjustafter => 3
            );
            while definedmy $log_line $file->read ) ) {
                if $log_line =~ $apache_reglar ) {
                    my $date    $log_grep->date_grep($2);
                    my @actions $log_grep->default_grep($3);
                    my @clients $log_grep->default_grep($5);
                    my $base =
"t:$log_type|me:$actions[1]|so:$1|lo:$local_ip|date:$date|opt:$actions[0]|of:$4|u:$user\n";
                    $hdl->push_write($base);
                }
            }
                       
                         
          }
    }
    $cv->recv;
}

以下是log_grep.pm模块

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
package log_grep;
use strict;
use warnings;
sub new {
    my $self  = {};
    my $class shift;
    bless $self;
    return $self;
}
#date format
sub date_grep {
    my $self  shift;
    my $str   shift;
    my %month = (
        "Jan" => 1,
        "Feb" => 2,
        "Mar" => 3,
        "Apr" => 4,
        "May" => 5,
        "Jun" => 6,
        "Jul" => 7,
        "Aug" => 8,
        "Sep" => 9,
        "Oct" => 10,
        "Nov" => 11,
        "Dec" => 12
    );
    my $day$mon$year$hour$minute$sec ) =
      split /\/|:|\s+/, $str )[ 0, 1, 2, 3, 4, 5 ];
    my $format_date "$year-$month{$mon}-$day $hour:$minute:$sec";
    return $format_date;
}
#default format
sub default_grep{
    my $self =shift;
    my $str shift;
    return  split" ",$str;
            
}
1;

配置文件如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[client_config_info]
remove_ip=192.168.6.2
port=9981
local_ip=192.168.6.2
log_path=/var/log/httpd/access_log
log_type=Apache
user=客户端01
[server_config_info]
username=root
password=*******
host=localhost
database=w3a_system
server_ip=192.168.6.2
server_port=9981

本文转自 mcshell 51CTO博客,原文链接:http://blog.51cto.com/mcshell/1362679,如需转载请自行联系原作者

perl anyevent socket监控web日志client相关推荐

  1. perl anyevent socket监控web日志server

    上篇已经讲过client端的CODE 这部分code主要用来接收client端发送来的日志,从数据库中读取reglar然后去匹配. 如果出现匹配则判断为XSS***. server端的SOCKET接收 ...

  2. 强大的Web日志分析工具_AWSTATS 应用实例

    释义: AWStats在Sourceforge发展很快的一个基于Perl的WEB日志分析工具. 相对于另外一个非常优秀的开放源代码的日志分析工具Webalizer,AWStats的优势在于: 1.界面 ...

  3. 课时 12:可观测性-监控与日志(莫源)

    本文主要分为四个部分: 在 K8s 中监控和日志的背景信息: 在 K8s 中监控方案的演进,以及常见的监控方案的提供: 日志采集的一些细节以及常见的日志的开源系统: 课程总结,介绍一下阿里云容器服务上 ...

  4. 从零开始入门 K8s | 可观测性:监控与日志

    作者 | 莫源 阿里巴巴技术专家 一.背景 监控和日志是大型分布式系统的重要基础设施,监控可以帮助开发者查看系统的运行状态,而日志可以协助问题的排查和诊断. 在 Kubernetes 中,监控和日志属 ...

  5. k8s里面的项目怎么暴露端口让用户访问_从零开始入门 K8s | 可观测性:监控与日志...

    作者 | 莫源 阿里巴巴技术专家 一.背景 监控和日志是大型分布式系统的重要基础设施,监控可以帮助开发者查看系统的运行状态,而日志可以协助问题的排查和诊断. 在 Kubernetes 中,监控和日志属 ...

  6. 《hadoop进阶》web日志系统 KPI指标的分析与实现

    推广一下个人的微信公众号[搜索与推荐Wiki] 转载请注明出处: 转载自  Thinkgamer的CSDN博客:blog.csdn.net/gamer_gyt 代码下载地址:点击查看 1:Web日志分 ...

  7. Kubernetes CKA认证运维工程师笔记-Kubernetes监控与日志

    Kubernetes CKA认证运维工程师笔记-Kubernetes监控与日志 1. 查看集群资源状况 2. 监控集群资源利用率 3. 管理K8s组件日志 4. 管理K8s应用日志 1. 查看集群资源 ...

  8. 海量Web日志分析 用Hadoop提取KPI统计指标

    海量Web日志分析 用Hadoop提取KPI统计指标 Hadoop家族系列文章,主要介绍Hadoop家族产品,常用的项目包括Hadoop, Hive, Pig, HBase, Sqoop, Mahou ...

  9. python监控web扩张时间脚本

    场景: 服务器被搞了,挂了很多暗链,网马,手动清除了后不到一天又生产好多,由于web程序有漏洞,已经重新开发了,所以决定写个脚本坚守2个月,然后等新网站上线.综合***动作的特点生成接近300M的ht ...

最新文章

  1. IOS/Android模拟器运行APP调试方法
  2. 网络广告计费方式常用术语
  3. HTML DOM getElementsByTagName() 方法
  4. 【代码】ReentrantLock还可以指定为公平锁
  5. Git如何修改文件夹看不清的蓝色显示
  6. nginx重新安装 引起的问题
  7. fate服务器维护,活动维护公告(2020年4月1日 14时)
  8. java ip输入框_JavaScript实现IP地址的输入框方式
  9. 软件测试:做一些简单工作经历总结,自己想到那算那吧
  10. 修改MFC标题栏上的图标和修改MFC窗口标题(转)
  11. linux mint17.2 安装fcitx输入法
  12. paper 94:视觉领域博客资源1之中国部分
  13. 数据库_关键字的使用
  14. 雅可比(Jacobi)矩阵与行列式
  15. Java面试_代理模式
  16. Vscode配置Python虚拟环境
  17. 接入GoogleAnalytics 统计
  18. Ktor: Kotlin Web后端框架 快速开始入门
  19. 如何正确地提出热处理工艺
  20. 手机浏览器微信h5支付

热门文章

  1. excel有必要用python_为什么Python比VBA更适合自动化处理Excel数据?
  2. 在VMware 14中安装Centos7
  3. 学习WPF——使用Font-Awesome图标字体
  4. 【Mac】Chrome中添加截图扩展插件FireShot方法
  5. Debian耳机声音问题
  6. codeforces 几道题目
  7. 使用window.createPopup创建无限级跨帧下拉菜单
  8. MFC与OpenCv中的图片转换实例
  9. IOS15 的UITableViewController 如何初始化
  10. vs2013和mysql连接_安装VS2013后与数据库的连接问题