elasticsearch 如何在logstash中覆盖来自json的时间戳字段,elasticsearch,logstash,logstash-configuration,filebeat,metricbeat,elasticsearch,Logstash,Logstash Configuration,Filebeat,Metricbeat" /> elasticsearch 如何在logstash中覆盖来自json的时间戳字段,elasticsearch,logstash,logstash-configuration,filebeat,metricbeat,elasticsearch,Logstash,Logstash Configuration,Filebeat,Metricbeat" />

elasticsearch 如何在logstash中覆盖来自json的时间戳字段

elasticsearch 如何在logstash中覆盖来自json的时间戳字段,elasticsearch,logstash,logstash-configuration,filebeat,metricbeat,elasticsearch,Logstash,Logstash Configuration,Filebeat,Metricbeat,我随身携带以下类型的json,使用filebeat{@timestamp:“2017-02-10T06:30:51.424Z”,“beat”:{“主机名”:“myhostname”,“名称”:“mydevice logger”,“version”:“5.2.0”},“fields”:{“device_type”:“mydevice”,“env”:“staging”},“metricset”:{“module”:“system”,“name”:“cpu”,“rtt”:211,“system”:{“

我随身携带以下类型的json,使用filebeat
{@timestamp:“2017-02-10T06:30:51.424Z”,“beat”:{“主机名”:“myhostname”,“名称”:“mydevice logger”,“version”:“5.2.0”},“fields”:{“device_type”:“mydevice”,“env”:“staging”},“metricset”:{“module”:“system”,“name”:“cpu”,“rtt”:211,“system”:{“cpu”:{“cores”:4,“idle”:{“pct”:0.000000},“iowait”:{“pct”:0.000000},“irq”:{“pct”:0.000000},“nice”:{“pct”:0.000000},“softirq”:{“pct”:0.000000},“偷取”:{“pct”:0.000000},“系统”:{“pct”:0.000000},“用户”:{“pct”:0.000000},“标签”:“[“自动”、“盒子”],“测试日志”>

我的logstash(5.1.1版)配置包含输入、筛选和输出,如下所示-

input { 
  beats {
        port => 5046
        codec => json
  }
}

filter {
    if ...{}
    else if [type] == "metricbeat-test-log" {

      date {
        match => ["@timestamp", "ISO8601"]
      }

      }
    }

}


output {
    if ...{}
    else if [type] == "metricbeat-test-log" {
        stdout { codec => rubydebug   }
    }
} 

类型正确,但日期筛选器不起作用。
@timestamp
最终始终使用当前时间戳。我想用json中的原始
@timestamp
替换它。

您应该在日期筛选器中使用目标设置:

目标

值类型为字符串

默认值为“@timestamp”


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

我在这个旧线程后面得到了答案,解释了
“@timestamp”:“2017-02-10T06:30:51.424Z“
在上面的日志行中是@timestamp字段及其值的JSON表示。根据这些建议,我在filebeat中添加了json配置,它对我很有用

- input_type: log
  paths:
    - /var/logs/mylogs/*.log
  fields:
    environment: testing
  document_type: test-metric-document

  json.keys_under_root: true   # added this line 
  json.overwrite_keys: true    # added this line 

虽然我对这个解决方案不满意,因为我真正需要的是获取时间戳、logstash事件一(在其他变量中)和login@timestamp的时间戳。

你真的在使用Filebeat将Metricbeat的JSON数据写入Elasticsearch吗?是的,原因是它是一个离线设备。我收集metricbeat日志并将其放入elastic Search虽然我可以简单地使用python脚本将整个json转储到ES中,但是我发现使用filebeat对我的casebren更实用,我也有同样的想法并尝试过,它给出了
\u dateparsefailure
,因为它找不到@timestamp字段@日志中的时间戳通常不是字符串,而是对象。有关更多详细信息,请参阅