【发布时间】:2013-12-18 15:17:34
【问题描述】:
我希望有人可以帮助我。我有以下设置:
shipper >> redis >> logstash >> elasticsearch
Logstash 有一个输入,它从 redis 中提取日志数据。以下 JSON 行进入 redis:
{
"@fields": {
"level": "INFO",
"mdc": {},
"file": "ContextLoader.java",
"class": "org.springframework.web.context.ContextLoader",
"line_number": "273",
"method": "initWebApplicationContext"
},
"@timestamp": "2013-12-18T11::29:29.115+01:00",
"@message": "Root WebApplicationContext: initialization started",
"@source_host": "test-host"
}
我使用的logstash配置很简单:
input {
redis {
data_type => "list"
key => "logstash:test:host"
codec => "json"
}
}
filter{
date {
match => [ "@timestamp", "dd-MMM-YYYY:HH:mm:ssZ", "dd-MMM-YYYY:HH:mm:ss Z", "ISO8601" ]
}
}
output {
stdout{
debug => true
}
}
当我使用上述配置时,我看到使用了 logstash 事件的时间戳(2013-12-18T12:53:14.169Z),并且我从调试屏幕中收到以下错误:
Failed parsing date from field {:field=>"@timestamp", :value=>"2013-12-18T12:53:14.177Z", :exception=>#<TypeError: cannot convert instance of class org.jruby.RubyTime to class java.lang.String>, :level=>:warn}
由此,我可以得出以下结论:
当日志条目作为输入进来时,json日志条目的时间戳被logstash的时间戳事件覆盖。然后,当日期过滤器尝试解析时间戳时,它会失败,因为没有匹配。
我想使用 json 日志条目的时间戳作为我的 logstash 事件时间戳。我怎样才能做到这一点?我使用logstash 1.3.1版。
【问题讨论】:
-
错误看起来相关:LOGSTASH-1340: If filter replaces @timestamp with a string flushing of event fails。一些人建议了您可以尝试的解决方法。
-
是的,我想是的。谢谢。
-
"T11::29:29" 在你的例子中必须是一个错字,或者?
-
那么,你是怎么解决的呢?愿意分享吗?谢谢。
标签: json elasticsearch logstash kibana