今天是12-24号,又一个平安夜,祝大家赚多多钱, 泡更美的妹子.
正题,
今天朋友问我关于elk日志过滤的问题。java程序虽然会写大量的日志(包括垃圾日志) . 但为了精简数据需要logstash agent做日志的过滤,也就是说过滤掉不需要的日志.
文章写的不是很严谨,欢迎来喷,另外该文后续有更新的,请到原文地址查看更新.
下面是解决过滤屏蔽日志的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插件还是很多的.
非常感谢。