perl anyevent socket监控web日志client

简介:
此脚本为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 ,  $port ,  sub  {
             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  (  defined (  my  $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,如需转载请自行联系原作者

相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
目录
相关文章
|
Prometheus 监控 Cloud Native
基于docker搭建监控系统&日志收集
Prometheus 是一款由 SoundCloud 开发的开源监控报警系统及时序数据库(TSDB),支持多维数据模型和灵活查询语言,适用于大规模集群监控。它通过 HTTP 拉取数据,支持服务发现、多种图表展示(如 Grafana),并可结合 Loki 实现日志聚合。本文介绍其架构、部署及与 Docker 集成的监控方案。
1039 122
基于docker搭建监控系统&日志收集
|
监控 Linux 调度
Veeam ONE 13 之初见 - Web 控制台和 Veeam 监控的未来
Veeam ONE 13 之初见 - Web 控制台和 Veeam 监控的未来
410 1
Veeam ONE 13 之初见 - Web 控制台和 Veeam 监控的未来
|
Prometheus 监控 Java
日志收集和Spring 微服务监控的最佳实践
在微服务架构中,日志记录与监控对系统稳定性、问题排查和性能优化至关重要。本文介绍了在 Spring 微服务中实现高效日志记录与监控的最佳实践,涵盖日志级别选择、结构化日志、集中记录、服务ID跟踪、上下文信息添加、日志轮转,以及使用 Spring Boot Actuator、Micrometer、Prometheus、Grafana、ELK 堆栈等工具进行监控与可视化。通过这些方法,可提升系统的可观测性与运维效率。
1080 1
日志收集和Spring 微服务监控的最佳实践
|
监控 测试技术 Go
告别传统Log追踪!GOAT如何用HTTP接口重塑代码监控
本文介绍了GOAT(Golang Application Tracing)工具的使用方法,通过一个Echo问答服务实例,详细展示了代码埋点与追踪技术的应用。内容涵盖初始化配置、自动埋点、手动调整埋点、数据监控及清理埋点等核心功能。GOAT适用于灰度发布、功能验证、性能分析、Bug排查和代码重构等场景,助力Go项目质量保障与平稳发布。工具以轻量高效的特点,为开发团队提供数据支持,优化决策流程。
1168 90
|
存储 缓存 监控
用 C++ 红黑树给公司电脑监控软件的日志快速排序的方法
本文介绍基于C++红黑树算法实现公司监控电脑软件的日志高效管理,利用其自平衡特性提升日志排序、检索与动态更新效率,并结合实际场景提出优化方向,增强系统性能与稳定性。
290 4
|
消息中间件 运维 监控
智能运维,由你定义:SAE自定义日志与监控解决方案
通过引入 Sidecar 容器的技术,SAE 为用户提供了更强大的自定义日志与监控解决方案,帮助用户轻松实现日志采集、监控指标收集等功能。未来,SAE 将会支持 istio 多租场景,帮助用户更高效地部署和管理服务网格。
820 51
|
数据采集 运维 监控
数据采集监控与告警:错误重试、日志分析与自动化运维
本文探讨了数据采集技术从“简单采集”到自动化运维的演进。传统方式因反爬策略和网络波动常导致数据丢失,而引入错误重试、日志分析与自动化告警机制可显著提升系统稳定性与时效性。正方强调健全监控体系的重要性,反方则担忧复杂化带来的成本与安全风险。未来,结合AI与大数据技术,数据采集将向智能化、全自动方向发展,实现动态调整与智能识别反爬策略,降低人工干预需求。附带的Python示例展示了如何通过代理IP、重试策略及日志记录实现高效的数据采集程序。
796 7
数据采集监控与告警:错误重试、日志分析与自动化运维
|
监控 安全 Apache
什么是Apache日志?为什么Apache日志分析很重要?
Apache是全球广泛使用的Web服务器软件,支持超过30%的活跃网站。它通过接收和处理HTTP请求,与后端服务器通信,返回响应并记录日志,确保网页请求的快速准确处理。Apache日志分为访问日志和错误日志,对提升用户体验、保障安全及优化性能至关重要。EventLog Analyzer等工具可有效管理和分析这些日志,增强Web服务的安全性和可靠性。
734 9
|
监控 容灾 算法
阿里云 SLS 多云日志接入最佳实践:链路、成本与高可用性优化
本文探讨了如何高效、经济且可靠地将海外应用与基础设施日志统一采集至阿里云日志服务(SLS),解决全球化业务扩展中的关键挑战。重点介绍了高性能日志采集Agent(iLogtail/LoongCollector)在海外场景的应用,推荐使用LoongCollector以获得更优的稳定性和网络容错能力。同时分析了多种网络接入方案,包括公网直连、全球加速优化、阿里云内网及专线/CEN/VPN接入等,并提供了成本优化策略和多目标发送配置指导,帮助企业构建稳定、低成本、高可用的全球日志系统。
1579 55