我想用grok过滤我的日志,我已经浏览了很多文档,但是我找不到解决问题的方法。我有这样的日志,
2017-01-24|15:00:11|UpToDate.Editorial.Service.Topic.IcgDataIslandSaveUtil|1|[(null)]| - Step 0, Start saving data island. 0.0010006 seconds since last step, 0.0020005 seconds since start.
,格式为,
date|time|class|level|user|log
我为此创建了一个conf文件,如下所示
input {
beats {
port => "5044"
}
}
filter {
grok {
match => { "message" => "%{YEAR}-%{MONTHNUM}-%{MONTHDAY}|%{HOUR}:%{MINUTE}:%{SECOND}|%{GREEDYDATA:class}|%{NUMBER:level}|%{GREEDYDATA:user}|%{GREEDYDATA:log}\n" }
}
}
output {
elasticsearch {
hosts => [ "localhost:9200" ]
}
}
但它未能过滤掉这些细节,它只是索引整个日志。谁能指出我在这里做错了什么?任何帮助将非常感激。
答案 0 :(得分:1)
你在模式中有特殊字符。使用此:
%{YEAR}-%{MONTHNUM}-%{MONTHDAY}\|%{HOUR}:%{MINUTE}:%{SECOND}\|%{GREEDYDATA:class}\|%{NUMBER:level}\|%{GREEDYDATA:user}\|%{GREEDYDATA:log}<br/>
我删除了&#39; \ n&#39;最后,它搞砸了我的解析。如果你再次运行grok模式问题,使用这个网站,它会有很大帮助:
http://grokconstructor.appspot.com/do/match