作者:捕鱼达人2502873933 | 来源:互联网 | 2023-05-24 11:27
我正在匹配诸如的事件
[Sun Jan 11 10:43:35 2015][3205.51466981] user idp : testing 10.234.22.220 (10.234.22.220) [61673782]
同
%{SYSLOG5424SD:timestamp}%{GREEDYDATA}user %{WORD:user} : testing %{HOST:ip}
它有效,我看到elasticsearch/kibana中的各个领域.具体timestamp
在上面的例子中匹配[Sun Jan 11 10:43:35 2015]
我现在想要使用这个匹配,date
以便拥有正确的@timestamp
.
我试过用 filter
date
{
match => [ "timestamp", "SYSLOG5424SD" ]
}
但这会导致logstash崩溃,并提示输出错误报告 - 我打开了一张票.
与此同时,我尝试通过明确匹配模式
date
{
match => [ "timestamp", "\[EEE MMM dd HH:mm:ss y\]" ]
}
正如您所怀疑的那样 - 它从不匹配,@timestamp
设置为logstash记录事件的时间.
你能发现问题,还是有一种聪明的方法来调试这种情况?
1> Magnus Bäck..:
日期过滤器完成的时间戳匹配不基于正则表达式或grok表达式.这就是为什么把SYSLOG5424SD放在那里是行不通的.除了过滤器文档中列出的几个特殊情况之外,您只能使用Joda-Time库识别的令牌.请参阅joda.time.format.DateTimeFormat类的文档.
你非常接近正确 - 只是不要逃避方括号:
date {
match => ["timestamp", "[EEE MMM dd HH:mm:ss y]"]
}
同样,Joda-Time模式不是正则表达式,因此为了匹配方括号文字,您不需要做任何特殊的事情.引用Joda-Time文档:
模式中不在['a'..'z']和['A'..'Z']范围内的任何字符都将被视为带引号的文本.例如,':','.','','#'和'?'等字符 即使它们没有包含在单引号内,也会出现在生成的时间文本中.