所以我有以下格式的日志消息:
[INFO] <blah.blah> 2016-06-27 21:41:38,263 some text [INFO] <blah.blah> 2016-06-28 18:41:38,262 some other text
现在,我想删除所有不包含特定字符串“ xyz”的日志,并保留其余所有日志。我也想索引时间戳。
grokdebug没有太大帮助。
这是我的尝试:
input { file { path => "/Users/username/Desktop/validateLogconf/logs/*" start_position => "beginning" } } filter { grok { match => { "message" => '%{SYSLOG5424SD:loglevel} <%{JAVACLASS:job}> %{GREEDYDATA:content}' } } date { match => [ "Date", "YYYY-mm-dd HH:mm:ss" ] locale => en } } output { stdout { codec => plain { charset => "ISO-8859-1" } } elasticsearch { hosts => "http://localhost:9201" index => "hello" } }
我是新手,所以上面的模式可能没有意义。请帮忙。
要删除不包含字符串的消息xyz:
xyz
if ([message] !~ "xyz") { drop { } }
您的骗子模式没有抓住日志的日期部分。 一旦在grok模式中有一个包含日期的字段,就可以在该字段上调用日期过滤器。 因此,您的grok过滤器应如下所示:
grok { match => { "message" => '%{SYSLOG5424SD:loglevel} <%{JAVACLASS:job}> %{TIMESTAMP_ISO8601:Date} %{GREEDYDATA:content}' } }
我添加了一部分以获取日期,该日期将在字段中Date。然后,您可以使用日期过滤器:
Date
date { match => [ "Date", "YYYY-mm-dd HH:mm:ss,SSS" ] locale => en }
我添加了,,SSS以便格式与Date字段中的格式匹配。解析的日期将存储在@timestamp字段中,除非用target参数另外指定。
,SSS
@timestamp
target