【问题标题】:Logstash use JSON field date instead of @timestampLogstash 使用 JSON 字段日期而不是 @timestamp
【发布时间】:2018-06-27 17:12:39
【问题描述】:

我正面临这个问题。 我正在尝试使用自定义 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" ]

还是没有运气。

欢迎任何帮助。

干杯,

【问题讨论】:

    标签: json timestamp logstash


    【解决方案1】:

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

    目标

    将匹配的时间戳存储到给定的目标字段中。如果不 提供,默认更新事件的@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] 字段存储到新字段后删除。

    【讨论】:

    • 感谢您的回复。做到了 - 感谢您的解释。
    【解决方案2】:

    得到这样的解决方案:

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

    【讨论】:

      猜你喜欢
      • 2013-12-22
      • 1970-01-01
      • 1970-01-01
      • 2016-01-13
      • 1970-01-01
      • 2021-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多