一尘不染

Syslog时间戳没有年份?

elasticsearch

我正在将日志回填到Elasticsearch中。因此,为了通过时间戳记中的日志日期创建索引,我使用如下date过滤器:

date {
                "locale" => "en"
                match => ["timestamp", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss", "ISO8601"]
                target => "@timestamp"
        }

我正在使用来自syslog的日志,并且syslog时间戳格式没有年份:

# Syslog Dates: Month Day HH:MM:SS
SYSLOGTIMESTAMP %{MONTH} +%{MONTHDAY} %{TIME}

因此,在使用日期过滤器之后,创建的索引就像logstash-2015.12.26
我在阅读2014年12月26日的日志一样。由于时间戳记在日志中不可用,因此默认情况下会选择当前年份。

知道如何制作正确的索引吗?


阅读 915

收藏
2020-06-22

共1个答案

一尘不染

在Joda Time解析的字符串中没有一年的时间,Logstash当前默认为Logstash进程开始的年份。参见github.com/logstash-
plugins/logstash-filter-date错误#3。作为临时的解决方法,添加一个临时过滤器以将正确的年份(2014)附加到时间戳字段的末尾,并调整日期过滤器模式以包括YYYY。

filter {
  mutate {
    replace => ["timestamp", "%{timestamp} 2014"]
  }
  date {
    locale => "en"
    match => ["timestamp",
              "MMM  d HH:mm:ss YYYY",
              "MMM dd HH:mm:ss YYYY",
              "ISO8601"]
  }
}
2020-06-22