简而言之,文件输出路径时间戳%{+YYYY-MM-dd}
是指 UTC 时间。这意味着您的目录将在您的晚上时间创建。
对于长答案,您可以参考文件输出源代码。路径是
path = event.sprintf(@path)
并深入到event.rb
t = @data["@timestamp"]
formatter = org.joda.time.format.DateTimeFormat.forPattern(key[1 .. -1])\
.withZone(org.joda.time.DateTimeZone::UTC)
#next org.joda.time.Instant.new(t.tv_sec * 1000 + t.tv_usec / 1000).toDateTime.toString(formatter)
# Invoke a specific Instant constructor to avoid this warning in JRuby
# > ambiguous Java methods found, using org.joda.time.Instant(long)
org.joda.time.Instant.java_class.constructor(Java::long).new_instance(
t.tv_sec * 1000 + t.tv_usec / 1000
).to_java.toDateTime.toString(formatter)
路径参数%{+YYYY-MM-dd}
基于 UTC 时间:(org.joda.time.DateTimeZone::UTC)
.
因此,有两种解决方案可以满足您的需求,
a) 修改 event.rb 以使用您的时区,而不是 UTC。
b)创建一个您自己的日期字段并使用您特定的字段%{+YYYY-MM-dd}
这是我的配置:
filter {
ruby {
code => "
ownTime = event['@timestamp'].localtime('-08:00')
event['day'] = ownTime.strftime('%Y-%m-%d')
"
}
}
output {
file {
path => "/logstash-1.4.1/logs/%{day}/logstash_in.txt"
}
stdout {
codec => "rubydebug"
}
}
希望这可以帮到你。