我想用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" ]
}
}
但是它无法筛选出这些详细信息,而只是索引整个日志。谁能指出我在这里做错了什么?任何帮助将非常感激。
最佳答案
模式中有特殊字符。用这个:
%{YEAR}-%{MONTHNUM}-%{MONTHDAY}\|%{HOUR}:%{MINUTE}:%{SECOND}\|%{GREEDYDATA:class}\|%{NUMBER:level}\|%{GREEDYDATA:user}\|%{GREEDYDATA:log}<br/>
我在最后删除了“\ n”,它使我的解析混乱。而且,如果您再次遇到grok模式问题,请使用此网站,它会有所帮助:
http://grokconstructor.appspot.com/do/match
关于elasticsearch - 无法用grok过滤日志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48219533/