首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Logstash过早创建目录

Logstash过早创建目录
EN

Stack Overflow用户
提问于 2014-07-15 01:31:32
回答 2查看 795关注 0票数 1

我让logstash实例每天创建一个新目录来存储它的日志。配置文件在下面。它似乎提前一天晚上创建了一个目录(并开始使用它);而不是在午夜之后创建它(当日期实际上发生了变化)。我在西海岸(UTC−08:00)。我在牛津英语口语课上。

配置:

代码语言:javascript
运行
复制
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
  }
}

我的系统日期和时间是正确的:

代码语言:javascript
运行
复制
[root@xxx]# date
Mon Jul 14 18:22:37 PDT 2014
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-07-15 07:02:50

简而言之,文件输出路径时间戳%{+YYYY-MM-dd}指的是UTC时间。这意味着您的目录将在晚上创建。

要获得较长的答案,您可以参考文件输出源代码。路径是

代码语言:javascript
运行
复制
path = event.sprintf(@path)

然后钻研到event.rb

代码语言:javascript
运行
复制
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}字段,这里是我的配置:

代码语言:javascript
运行
复制
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"
    }
}

希望这能帮到你。

票数 1
EN

Stack Overflow用户

发布于 2015-03-26 14:49:56

如果要根据时区的名称转换时区:

代码语言:javascript
运行
复制
filter {
  date {
    match => [ "@timestamp", "ISO8601" ]
    timezone => "America/New_York"
  }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24748601

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档