logstash 学习三 过滤器插件(Filter)

本文探讨了logstash的过滤器插件,重点在于如何过滤INFO和WARN级别的日志,以及Grok正则表达式的使用。通过Grok预定义的正则模式匹配日志,实现对日志数据的有效捕获。同时提到了Grok的patterns_dir配置和match操作。此外,还简单提及了GeoIP插件用于地址归属查询,以及Mutate插件的数据类型转换功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

丰富的过滤器插件是logstash 如此强大的一个很重要的因素。这篇主要来说说我常用的一些插件。

  • 过滤屏蔽不需要的日志 :
    先来看一下日志吧。下面是tomcat 报的一些日志:
2016-06-17 13:54:24,148  INFO (com.yudao.framework.db.connection.LocalDataSourceFactory:35) - loadJDBCConfig...
2016-06-17 13:54:24,148  WARN (com.yudao.framework.util.SystemConfigUtil:61) - INITIALIZING THE CONFIGMANAGER
2016-06-17 14:17:25,499 ERROR (org.apache.struts2.dispatcher.Dispatcher:38) - Exception occurred during processing request: null
java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
...

上面日志文件可以看到有三类: INFO 、WARN 、ERROR 。通常我们只需要解析 ERROR 类型的,也就是说需要过滤掉 INFO 、WARN 类型。

filter{
   #如果日志不包含 "ERROR" ,就过滤掉
   if [message] !~ "ERROR"{
       drop {}
    }
}

当然,上面的配置并不能过滤掉全部不需要的日志,比如说下面这种

2016-07-11 14:35:30,985  INFO (com.yudao.test.testAction:1008) - verifyEirUser webservice  result:<?xml version="1.0" encoding="utf-8"?>
<USER_VALIDATE_RESULT>
  <TEXT_MSG />
  <ERROR_MSG>验证不通过</ERROR_MSG>
  <RESULT>-1</RESULT>
  ...

因为 ERROR_MSG 的存在,就不能过滤。这种情况还得加一层过滤。这个跟日志正则配置有关。这里先不说了。

  • Grok 正则捕获
    grok 是logstash 最重要的插件。我们可以在 grok 预定义好命名正则表达式,然后(grok 参数或其它正则表达式)引用它。
filter{
    grok{
       patterns_dir => ["d:/java/logstash-2.3.4/bin/patterns"]
       match =>{"message"=> "TEST-LOG"}
     }
}

解释:
patterns_dir : 对应的是个绝对路径, d:/java/logstash-2.3.4/bin/patterns 目录下有一个文件,我命名为 j2ee , 里面是一些配置文件,举个栗子 :

JAVALOGMESSAGE (.*)
#配置日期格式 
#2014-01-09 20:03:28,269
COMMA_TIME %{NUMBER:year}-%{MONTHNUM:month}-%{MONTHDAY:day} %{HOUR:hour}:%{MINUTE:minute}:%{SECOND:second},%{NUMBER:millisecond}

# 日志解析
#2016-06-17 14:17:25,499 ERROR (org.apache.struts2.dispatcher.Dispatcher:38) - Exception occurred during processing request: null
TEST-LOG %{COMMA_TIME}( |  )%{LOGLEVEL:level} %{LINE:class} - %{JAVALOGMESSAGE:logmessage}

match : 作用是日志文件是否能匹配上TEST-LOG 正则格式。
篇幅问题,下一章说配置。

  • GeoIP 地址归属类查询: 下面的IP 是参数,不是固定值。
filter {
    geoip {
       source => "IP"
    }
}
  • Mutate 数据修改 :
    1、类型转换 : 可以设置的转换类型包括 “integer”,”float” 和 “string” 。
    filter{
        mutate{
            convert{"COMMA_TIME" , "float"}
        }
    }
   2、字符串处理 

      2.1 gsub : 仅对字符串字段有效
         filter{
             mutate{
                # protocol 字段中的 "-" 换为""
                gsub => [ "protocol", "-", "" ]
             }
         }
      2.2  split 拆分字段 。
            filter {
                mutate {
                   split => ["message", "|"]
                }
             }
         如果message 的内容为: "test|1|as|zx*=123",运行结果为:
        "message" => [
           [0] "test",
           [1] "1",
           [2] "as",
           [3] "zx*=123"
        ],
       2.3 、join  仅对数组类型字段有效
          filter{
              mutate {
                   split => ["message", "|"]
              }
              mutate {
                   json=> ["message", ","]
              }
          }
       filter 区间是按 顺序执行的,所以,运行后的结果:
         {"message" : "test,1,as,zx*=123"}
       2.4  rename 种命名某个字段,如果字段已经,会背覆盖掉。       
           filter{
               mutate{
                   rename =>["prjName","prjN"]
               }
           }
       2.5   update  更新某个字段的内容,如果字段不存在,不会创建。
       2.6   replace 作用与update 类似,只是如果如果字段不存在,会自动创建新的字段。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值