关于elasticsearch:Logstash将日期转换为有效的joda时间(@timestamp)

Logstash converting date to valid joda time (@timestamp)

希望有人能帮助我!

我有一个关于logstash的问题。 我成功完成以下日期:26 / Jun / 2013:14:00:26 +0200

接下来,我希望将此日期用作事件的@timestamp。 如您所知,logstash自动添加时间戳。

可以通过日期过滤器替换logstash添加的时间戳。 我添加了以下日期过滤器:match => [" date"," dd / MMM / YYYY:HH:mm:ss Z"]

但是,由于某种原因,这是行不通的。 当我对其进行测试时,我看到logstash只是添加了自己的时间戳。

码:

1
2
3
4
5
6
7
8
9
grok {
    type =>"log-date"
    pattern =>"%{HTTPDATE:date}"
}

date{
    type =>"log-date"
    match => ["date","dd/MMM/YYYY:HH:mm:ss Z"]
}

我需要这样做,因此我可以将事件添加到elasticsearch中。

提前致谢!


我使用以下方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# strip the timestamp and force event timestamp to be the same.
# the original string is saved in field %{log_timestamp}.
# the original logstash input timestamp is saved in field %{event_timestamp}.
grok {
  patterns_dir =>"./patterns"
  match => ["message","%{IRODS_TIMESTAMP:log_timestamp}" ]
  add_tag =>"got_syslog_timestamp"
  add_field => ["event_timestamp","%{@timestamp}" ]
}

date {
  match => ["log_timestamp","MMM dd HH:mm:ss" ]
}

mutate {
        replace => ["@timestamp","%{log_timestamp}" ]
}

我现在的问题是,即使替换了@timestamp,我也要先将其转换为与ISO8601兼容的格式,以便其他程序在解析它时不会遇到问题,例如" event_timestamp"中的时间戳:

1
2
3
4
5
6
7
8
9
10
11
12
    "@timestamp" =>"Mar  5 14:38:40",
      "@version" =>"1",
          "type" =>"irods.relog",
          "host" =>"ids-dev",
          "path" =>"/root/logstash/reLog.2013.03.01",
           "pid" =>"5229",
         "level" =>"NOTICE",
 "log_timestamp" =>"Mar  5 14:38:40",
"event_timestamp" =>"2013-09-17 12:20:28 UTC",
          "tags" => [
    [0]"got_syslog_timestamp"
]

由于您具有年份信息,因此可以轻松进行转换...就我而言,我将不得不从"路径"(文件名)属性中解析出它……但是,仍然似乎没有convert_to_iso8901 => @ 时间戳指令。

希望这对您的问题有所帮助! :)


上面的答案只是解决方法,请尝试在代码中添加locale =>"en"
如果未添加,则将使用默认的平台区域设置语言(西班牙语,法语或其他语言)来解析日期的工作日和月份名称,这就是为什么它不起作用的原因(因为您的日志为英文)。

1
2
3
4
5
date{
    type =>"log-date"
    match => ["date","dd/MMM/YYYY:HH:mm:ss Z"]
    locale =>"en"
}