使用logstashfiltergrok过滤日志文件(代码片段)

Ido Ido     2022-10-20     519

关键词:

Logstash提供了一系列filter过滤plugin来处理收集到的log event,根据log event的特征去切分所需要的字段,方便kibana做visualize和dashboard的data analysis。所有logstash支持的event切分插件查看这里。下面我们主要讲grok切分。

Grok基本介绍

  1. Grok 使用文本片段切分的方式来切分日志事件,语法如下:
%SYNTAX:SEMANTIC
* `SYNTAX`代表匹配值的类型,例如,`0.11`可以`NUMBER`类型所匹配,`10.222.22.25`可以使用`IP`匹配。
* `SEMANTIC`表示存储该值的一个变量声明,它会存储在`elasticsearch`当中方便`kibana`做字段搜索和统计,你可以将一个`IP`定义为客户端IP地址`client_ip_address`,eg:`%IP:client_ip_address`,所匹配到的值就会存储到`client_ip_address`这个字段里边,类似数据库的列名,也可以把event log中的数字当成数字类型存储在一个指定的变量当中,比如响应时间`http_response_time`,假设event log record如下:
55.3.244.1 GET /index.html 15824 0.043

可以使用如下grok pattern来匹配这种记录

%IP:client_id_address %WORD:method %URIPATHPARAM:request %NUMBER:bytes %NUMBER:http_response_time

在logstash conf.d文件夹下面创建filter conf文件,内容如下

# /etc/logstash/conf.d/01-filter.conf
filter 
  grok 
    match =>  "message" => "%IP:client_id_address %WORD:method %URIPATHPARAM:request %NUMBER:bytes %NUMBER:http_response_time" 
  

以下是filter结果

client_id_address: 55.3.244.1
method: GET
request: /index.html
bytes: 15824
http_response_time: 0.043

grok内置的默认类型有很多种,查看所有默认类型

  1. 使用自定义类型
    更多时候logstash grok没办法提供你所需要的匹配类型,这个时候我们可以使用自定义
    • 第一种,直接使用oniguruma语法去匹配文本片段,语法如下
      (?<field_name>the pattern here)
      
      假设你需要匹配的文本片段为一个长度为10或11的十六进制的值,使用下列语法可以获取该片段,并把值赋予queue_id
      (?<queue_id>[0-9A-F]10,11)
      
    • 第二种,创建自定义pattern文件
      • 创建文件夹patterns,在此文件夹下面创建一个文件,文件名随意,eg: postfix
      # contents of ./patterns/postfix:
      POSTFIX_QUEUEID [0-9A-F]10,11
      
      • 然后将patterns file引入,告诉logstash你的自定义类型文件,以下面的event log record为例子:
      55.3.244.1 GET /index.html 15824 0.043 ABC24C98567
      
      在logstash conf.d文件夹下面创建filter conf文件,内容如下
      filter 
      grok 
       patterns_dir => ["./patterns"]
       match =>  "message" => "%IP:client_id_address %WORD:method %URIPATHPARAM:request %NUMBER:bytes %NUMBER:http_response_time %POSTFIX_QUEUEID:queue_id" 
      
      
      

匹配结果如下:

client_id_address: 55.3.244.1
method: GET
request: /index.html
bytes: 15824
http_response_time: 0.043
queue_id: ABC24C98567

推荐使用grokdebugger来写匹配模式,输入event log record,再逐步使用pattern微调切分,下方会根据你所写的模式将输入切分字段。

 
技术分享图片
 

 
技术分享图片
 

 

  1. 其他常用内置方法
    • add_field: 当pattern匹配切分成功之后,可以动态的对某些字段进行特定的修改或者添加新的字段,使用%fieldName来获取字段的值
      Exmaple:
filter 
  grok
    add_field =>  "foo_%somefield" => "Hello world, %somefield" 
  

# You can also add multiple fields at once:
filter 
  grok 
    add_field => 
      "foo_%somefield" => "Hello world, %somefield"
      "new_field" => "new_static_value"
    
  

如果somefield=dad,logstash会将foo_dad新字段加入elasticsearch,并将值Hello world, dad赋予该字段

  • add_tag: 为经过filter或者匹配成功的event添加标签
    Example:
filter 
  grok 
    add_tag => [ "foo_%somefield" ]
  

# You can also add multiple tags at once:
filter 
  grok 
    add_tag => [ "foo_%somefield", "taggedy_tag"]
  

更多内置方法在这里



作者:eason02
链接:https://www.jianshu.com/p/d46b911fb83e
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。










使用过滤器提升日志记录

】使用过滤器提升日志记录【英文标题】:boostloggingwithfilters【发布时间】:2012-01-1417:53:36【问题描述】:我是boost-log的新手,并试图使trivialloggingwithfilters示例与boost-log1.1一起工作。代码如下所示:#include<boost/log/core.hpp>#incl... 查看详情

oozie日志查看oozie日志过滤(代码片段)

...泛的。oozie其实支持多种丰富类型的action,但在实际使用中可能大多数开发会直接选择shaction(俺也一样…)。在开发调试和上线的过程中,日志的查看都很重要,可以帮助我们了解ooize工作的基本流程和快速... 查看详情

如何使用 GoAccess 正确过滤我的访问日志?

】如何使用GoAccess正确过滤我的访问日志?【英文标题】:HowtofilterproperlymyaccesslogswithGoAccess?【发布时间】:2017-05-3122:36:41【问题描述】:我想生成一个只包含POST/xmlrpc.php请求的报告,所以我运行以下命令:zcataccess.log.*.gz|grep\'POS... 查看详情

新版logcat使用指南

...#xff0c;不同过滤命令间只需要用空格隔开。过滤包名:使用package:来过滤不同包中的日志,其中mine表示当前包按日志级别进行过滤:使用level:来过滤日志级别。根据日志的不同级别有以下选项:level:VERBOSE:... 查看详情

powershellpowershell:使用querylist过滤器查询windows事件日志(代码片段)

查看详情

新版logcat使用指南

...#xff0c;不同过滤命令间只需要用空格隔开。过滤包名:使用package:来过滤不同包中的日志,其中mine表示当前包按日志级别进行过滤:使用level:来过滤日志级别。根据日志的不同级别有以下选项:level:VERBOSE: 查看详情

Angular 8过滤器:保留文本区域输入的换行符

...ainput【发布时间】:2020-03-1521:56:17【问题描述】:我尝试使用angular8制作一个过滤器,以在我的文本区域输入中保留文本换行符,文本输入将放置在图像上方:<divclass="form-groupcol-10"><spanclass="badge 查看详情

可以应用哪些核心图像过滤器来改善文本文档的图像?

...nt?【发布时间】:2015-11-1403:28:41【问题描述】:我们已经使用iPhone相机扫描了文档的几页。现在我们想应用一些图像过滤器来提高这些扫描的质量,比如将其转换为黑白、去除阴影、高对比度等。我们可以应用哪些CI过滤器和参... 查看详情

nxlog.conf 过滤 Windows 事件日志问题

...【发布时间】:2017-07-0614:44:16【问题描述】:我正在尝试使用nxlog提取特定的Windows事件日志并将它们显示在灰色日志中。它可以很好地检索日志,但是,我的问题是:即使使用查询,它似乎仍然会提取查询中未指定的大量数据(... 查看详情

在 aws cloudwatch 中过滤日志流

...tch【发布时间】:2017-09-0307:49:57【问题描述】:是否可以使用CloudWatch控制台过滤带有模式的日志流?例如,我在一个日志组中有以下日志流-日志组:\'/var/prod/logs\'。日志流:/prod/[node_instance_id]/nginx_access/prod/[node_insta 查看详情

自定义logback日志过滤器

参考技术ALogback提供两种类型的过滤器,常规过滤器和turbo过滤器。本例讲述基于常规过滤器的自定义实现。常规的logback-classic过滤器扩展了Filter抽象类,它基本上由一个decide()以ILoggingEvent实例作为参数的方法组成。过滤器基于... 查看详情

使用 anotar catel nlog 日志记录时无法过滤类名(在 NLog.config 中)

】使用anotarcatelnlog日志记录时无法过滤类名(在NLog.config中)【英文标题】:Unabletofilteronclassname(inNLog.config)whenusinganotarcatelnloglogging【发布时间】:2014-01-2513:53:12【问题描述】:我正在使用anotarcatelfody登录我的应用程序。在NLog.con... 查看详情

根据日期范围过滤日志文件条目

...布时间】:2011-12-0402:24:52【问题描述】:我的服务器的CPU使用率异常高,我可以看到Apache使用了太多内存。我有一种感觉,我正在被一个IPDOS-也许你能帮我找到攻击者?我使用以下行来查找10个最“活跃”的IP:cataccess.log|awk\'prin... 查看详情

尝试通过 terraform 设置 cloudwatch 日志过滤器时出现 InvalidParameterException

...【发布时间】:2020-12-1910:22:40【问题描述】:我正在尝试使用以下资源元素使用terrafom设置cloudwatch日志过滤器( 查看详情

博文评论与在线消息提示[开发日志-springboot+vue](代码片段)

...言要点评论结构获取评论评论组件流程数据返回发布评论过滤评论保存消息转发回复总结前言没想到就两个礼拜左右没有碰一起的项目代码,就忘得差不多了。还熟悉了一下代码,跪了。okey~接下来的话,来看到今天... 查看详情

我每天产生 2 GB 的 Web 服务器日志,如何过滤它们?

...2016-07-2916:20:28【问题描述】:我有网络服务器,其他网站使用一些GET参数重定向到该服务器。我的情况:目前我每天生成2GB的Web服务器日志。我需要过滤至少半年的日志(约350GB的日志)。我正在使用Amazon基础设施将日志存储在S 查看详情

logstash使用filter删除不需要的日志

参考技术A日志的流转路径:logstash收集log4j的日志,并对日志进行过滤,输出给elasticsearch,kibana从es的索引中查询数据进行展示。有一部分日志没有多大的意义,但是占据了很大的磁盘空间,因此想通过filter将其过滤掉,再将有... 查看详情

elk——elasticstack日志分析平台(代码片段)

...台ELK日志采集与分析系统概述ELK架构Filebeat重读日志文件使用Processors(处理器)过滤和增强数据LogstashLogstash安装使用Grok过滤器插件解析Web日志使用Geoip过滤器插件增强数据编辑**配置接受Beats的输入ES集群基本介绍集群概... 查看详情