Logstash 转换日志存储的日期MMM dd HH:mm:ss

Logstash 转换日志存储的日期MMM dd HH:mm:ss,logstash,Logstash,我有一个自定义格式的日志文件,日期字段如下所示: Dec 4 23:59:21 Nov 21 23:59:21 在我的日志存储配置中,我为过滤器设置了以下内容: date { type => "custom" # tell it the format custom_timestamp => ["MMM d HH:mm:ss", "MMM dd HH:mm:ss"] # locale didn't help locale => "en

我有一个自定义格式的日志文件,日期字段如下所示:

Dec  4 23:59:21
Nov 21 23:59:21
在我的日志存储配置中,我为过滤器设置了以下内容:

date {
    type => "custom"
    # tell it the format
    custom_timestamp => ["MMM  d HH:mm:ss", "MMM dd HH:mm:ss"]
    # locale didn't help
    locale => "en"
}
mutate{
    type => "custom"
    # replace the timestamp
    replace => ["@timestamp", "%{custom_timestamp}"]
}
这可能会用日志中的自定义时间戳替换logstash时间戳(我正在从旧日志中回填它以进行测试)

如果我打开debug标志并输出到stdout,它会显示
@timestamp
已被
custom_timestamp
替换,但我会收到一条错误消息,告诉我无法导入它:

:exception=>java.lang.IllegalArgumentException: Invalid format: "Dec  4 23:59:21"

如何转换日期格式?

结果表明我使用的示例是错误的。您不需要突变替换,配置如下:

date {
    type => "custom"
    # tell it the format
    custom_timestamp => ["MMM  d HH:mm:ss", "MMM dd HH:mm:ss"]
    # date format is english, computer might not be
    locale => "en"
}
mutate{
    type => "custom"
    #other mutations go here
}

这篇文章中有两个误解:

  • 生成java异常是因为您的格式中没有年份,因此无法安全地解析日期
  • 如果希望其他应用程序将旧导入的日志视为一致的时间线,则需要运行mutate。否则,当您导入所有旧日志时,只会看到几分钟的事件集中(在导入期间)

  • 除此之外,这是一个很好的问题/答案,它帮助我回到了我的特定问题的轨道上;)

    在我的回答中还是在问题中?我的答案让它对我有用,但如果它需要的话,我可以把它清除掉。“type”现在已经被弃用了