删除syslog过滤器中的多个日期字段

时间:2016-06-02 15:56:29

标签: logstash logstash-configuration

我已经设置了logstash并使用了"默认" syslog过滤器如下:

filter {
  if [type] == "syslog" {
    grok {
      match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" }
    }
    syslog_pri { }
    date {
      match => [ "syslog_timestamp", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]
    }
  }
}

这导致创建了两个字段@timestampsyslog_timestamp,它们基本上包含相同的值,尽管格式不同。

有没有办法在grok中创建一个临时的syslog_timestamp字段,以便它可以传递到日期插件中,或者我必须在我' ve"之后通过mutate显式删除字段。使用"它?例如:

filter {
  if [type] == "syslog" {
    grok {
      match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" }
    }
    syslog_pri { }
    date {
      match => [ "syslog_timestamp", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]
    }
    mutate {
        remove_field => [ "syslog_timestamp" ]
    }
  }
}

感谢您的任何指示。

1 个答案:

答案 0 :(得分:0)

没有真正的临时字段,如果您不想要syslog_timestamp,则必须将其删除。

我建议的一件事是你执行remove_field in your date filter。这样做只会在成功应用日期过滤器时删除该字段,这意味着如果日期过滤器失败,它将使syslog_timestamp字段落后,可能会显示失败的原因。

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