我正面临这个问题。 我正在尝试使用自定义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" ]
仍然没有运气。
任何帮助都将受到欢迎。
干杯
答案 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_field
是date
过滤器可用的另一个常用选项。一旦将[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"
}