我让logstash实例每天创建一个新目录来存储它的日志。配置文件在下面。它似乎提前一天晚上创建了一个目录(并开始使用它);而不是在午夜之后创建它(当日期实际上发生了变化)。我在西海岸(UTC−08:00)。我在牛津英语口语课上。
配置:
input {
udp {
port => 6379
}
}
filter {
ruby {
code => "event['@timestamp'] = event['@timestamp'].localtime('-08:00')"
}
}
output {
file {
path => ["/logstash-1.4.1/logs/%{+YYYY-MM-dd}/logstash_in.txt"]
}
elasticsearch {
protocol => http
}
stdout {
codec => rubydebug
}
}
我的系统日期和时间是正确的:
[root@xxx]# date
Mon Jul 14 18:22:37 PDT 2014
发布于 2014-07-15 07:02:50
简而言之,文件输出路径时间戳%{+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)创建一个您自己的day字段,并使用您特定的%{+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"
}
}
希望这能帮到你。
发布于 2015-03-26 14:49:56
如果要根据时区的名称转换时区:
filter {
date {
match => [ "@timestamp", "ISO8601" ]
timezone => "America/New_York"
}
}
https://stackoverflow.com/questions/24748601
复制相似问题