我正在使用logstash来读取一些日志。我有一个日志文件,其中时间戳只包含时间字段,即08:28:20,500,但没有日期字段。我想用今天的日期时间来映射它。我应该怎么做日期过滤器。Logstash解析日期问题
我的日志文件的一行是这样的。
08:28:20,500 INFO [org.jboss.as.connector.subsystems.datasources] (ServerService Thread Pool -- 27) JBAS010403: Deploying JDBC-compliant driver class org.h2.Driver (version 1.3)>>"C:\CIGNA\jboss\jboss.log"
有没有人可以帮助解决这个问题?提前致谢。
编辑 使用ruby作为过滤器后,我设法解决了这个问题。但是,偶尔会有一个ruby例外。从下面看,第一条消息遇到了ruby异常,而第二条消息正常运行。我会想知道这是怎么发生的,如果有人可以给我一些建议。谢谢。
{
"message" => "10:30:39 FATAL [org.jboss.as.server] (default task-1) JBAS015957: Server boot has failed in an unre
coverable manner; exiting. See previous messages for details.\r",
"@version" => "1",
"@timestamp" => "2016-07-26T02:43:17.379Z",
"path" => "C:/CIGNA/jboss/jboss.log",
"host" => "SIMSPad",
"type" => "txt",
"Time" => "10:30:39",
"Level" => "FATAL",
"JavaClass" => "org.jboss.as.server",
"Message" => "(default task-1) JBAS015957: Server boot has failed in an unrecoverable manner; exiting. See previo
us messages for details.\r",
"tags" => [
[0] "_rubyexception"
]
}
{
"message" => "10:30:39 DEBUG [org.jboss.as.quickstarts.logging.LoggingExample] (default task-1) Settings reconfig
ured: JBOSS EAP Resettlement\r",
"@version" => "1",
"@timestamp" => "2016-07-26T02:30:39.000Z",
"path" => "C:/CIGNA/jboss/jboss.log",
"host" => "SIMSPad",
"type" => "txt",
"Time" => "10:30:39",
"Level" => "DEBUG",
"JavaClass" => "org.jboss.as.quickstarts.logging.LoggingExample",
"Message" => "(default task-1) Settings reconfigured: JBOSS EAP Resettlement\r"
}
而且我的logstash .conf文件中更新的过滤器部分如图所示。
filter {
grok {
match => { "message" => '\A%{TIME:Time}%{SPACE}%{WORD:Level}%{SPACE}\[%{PROG:JavaClass}]%{SPACE}%{JAVALOGMESSAGE:Message}'}
}
ruby {
code => "
p = Time.parse(event['message']);
event['@timestamp'] = LogStash::Timestamp.new(p);
"
}
}
我没有看到你的样本日志行任何时间戳(日期或时间)。 – Val
对不起,我错了。我现在编辑它。感谢提醒。 –
我假设日期过滤器匹配“时间”而不是“时间戳”?或者是“Timestamp”另一个字段? – pandaadb