Logstash使用JSON字段日期而不是@timestamp

时间:2018-06-27 17:12:39

标签: json timestamp logstash

我正面临这个问题。 我正在尝试使用自定义JSON日志日期作为我的“可用”日期,而不是@timestamp日期字段。

我的JSON文件将由Logstash处理(来自filebeat):

{
    "start":    {
       "timestamp": {
            "time": "Wed, 04 Apr 2018 09:36:39 GMT",
            "timesecs": 1522834599
        }
    }
}

我的logstash.yml文件:

input {
  beats {
    port => 1337
    codec => "json_lines"
  }
}

filter {
   date {
      match => [ "time", "EEE, dd MM yyyy hh:mm:ss ZZZ" ]
   }
}

output {
  stdout {
    codec => rubydebug
  }
  elasticsearch {
    hosts => "localhost:9200"
    index => "testing"
  }
}

也尝试过:

match => [ "[start][timestamp][time]", "EEE, dd MM yyyy hh:mm:ss ZZZ" ]

仍然没有运气。

任何帮助都将受到欢迎。

干杯

2 个答案:

答案 0 :(得分:1)

当您使用match过滤器date过滤日期时,它将匹配的时间戳存储到给定的target字段中。如果未提供target,它将仅使用新的匹配@timestamp更新事件的time字段。

  

目标

     

将匹配的时间戳存储到给定的目标字段中。如果不   提供,默认情况下更新事件的@timestamp字段。

target将自动创建一个不存在的字段。

所以下面的代码就足够了

date {
     match => [ "[start][timestamp][time]", "EEE, dd MMM yyyy HH:mm:ss z" ]
     target => "newTimeField"
     locale => "en"
     remove_field => [ "[start][timestamp][time]" ]  
}
上面的

remove_fielddate过滤器可用的另一个常用选项。一旦将[start][timestamp][time]字段存储在新字段中,该字段就会被删除。

答案 1 :(得分:0)

找到这样的解决方案:

mutate {
     add_field => {
             "mytime" => ""
     }
}

date {
     match => [ "[start][timestamp][time]", "EEE, dd MMM yyyy HH:mm:ss z" ]
     target => "mytime"
     locale => "en"
}