热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

丰富的过滤器插件是logstash如此强大的一个很重要的因素。这篇主要来说说我常用的一些插件。过滤屏蔽不需要的日志:先来看一下日志吧。下面是tomcat报的一些日志:2016-

丰富的过滤器插件是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:
<USER_VALIDATE_RESULT>
<TEXT_MSG />
<ERROR_MSG>验证不通过ERROR_MSG>
<RESULT>-1RESULT>
...

因为 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 类似,只是如果如果字段不存在,会自动创建新的字段。

推荐阅读
author-avatar
周扒pi
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有