通过logstash filter过滤屏蔽不需要的日志

今天是12-24号,又一个平安夜,祝大家赚多多钱, 泡更美的妹子.  


正题,

今天朋友问我关于elk日志过滤的问题。java程序虽然会写大量的日志(包括垃圾日志) .   但为了精简数据需要logstash agent做日志的过滤,也就是说过滤掉不需要的日志. 


文章写的不是很严谨,欢迎来喷,另外该文后续有更新的,请到原文地址查看更新. 

http://xiaorui.cc/2015/12/24/%E9%80%9A%E8%BF%87logstash-filter%E8%BF%87%E6%BB%A4%E5%B1%8F%E8%94%BD%E4%B8%8D%E9%9C%80%E8%A6%81%E7%9A%84%E6%97%A5%E5%BF%97/

下面是解决过滤屏蔽日志的logstash配置文件.

#blog:  xiaorui.cc
#代码高亮有问题,大于可能会被转义成, 大家注意一下. 

input {
    file    {
                type => "producer"
                path => "/data/buzzMaster/extractor.log"
        }
}
filter {
          if ([message] =~ "^xiaorui.cc") {
             drop {}
          }
}
output  {
    stdout { codec => rubydebug}
}

写入配置文件后,我们开始测试:

首先在客户端测试下.  为什么要和xiaorui.cc这字符串较劲?  我想大家注意到我上面filter配置有个 =~ “^xiaorui.cc” .    只有当日志是xiaorui.cc开头的才会drop屏蔽.

[ root@bj-buzz-dev01:/data/buzzMaster {extractor} ]$ echo “1xiaorui.cc” >>extractor.log
[ root@bj-buzz-dev01:/data/buzzMaster {extractor} ]$ echo “blog.xiaorui.cc” >>extractor.log
[ root@bj-buzz-dev01:/data/buzzMaster {extractor} ]$ echo “xiaorui.cc” >>extractor.log
[ root@bj-buzz-dev01:/data/buzzMaster {extractor} ]$ 

我们再看下logstash server端的反应.  

[ root@bj-buzz-dev01:/data/buzzMaster {extractor} ]$ /usr/local/logstash-1.4.2/bin/logstash -f conf/agent.conf

{
       “message” => “1xiaorui.cc”,
      “@version” => “1”,
    “@timestamp” => “2015-12-24T07:45:58.099Z”,
          “type” => “producer”,
          “host” => “bj-buzz-dev01”,
          “path” => “/data/buzzMaster/extractor.log”
}

{
       “message” => “blog.xiaorui.cc”,
      “@version” => “1”,
    “@timestamp” => “2015-12-24T07:46:12.117Z”,
          “type” => “producer”,
          “host” => “bj-buzz-dev01”,
          “path” => “/data/buzzMaster/extractor.log”
}

通过日志我们可以分析确定drop起到效果了.  需要注意的是在logstash里所有的日志都会放入message里. 

logstash filter还可以根据日志的级别进行drop

如果你有个更加奇特的需求,上面的需求是过滤屏蔽不需要的日志,那如果你想抽样?要部分的随机日志. filter percentage有个百分比抽样参数. 

filter {
  if [loglevel] == “debug” {
    drop {
      percentage => 40
    }
  }
}

另外可以增加字段.

filter {
  drop {
    add_field => { “foo_%{somefield}” => “Hello world, from %{host}” }
  }
}

我们可以通过filter删除指定字段. 

filter {
  drop {
    remove_field => [ “foo_%{somefield}” ]
  }
}

结论,  logstash的filter插件还是很多的.


大家觉得文章对你有些作用! 如果想赏钱,可以用微信扫描下面的二维码,感谢!
另外再次标注博客原地址  xiaorui.cc

1 Response

  1. xianjie 2016年3月9日 / 下午5:23

    非常感谢。

发表评论

邮箱地址不会被公开。 必填项已用*标注