从logstash.conf中筛选消息

从logstash.conf中筛选消息,logstash,logstash-grok,logstash-configuration,Logstash,Logstash Grok,Logstash Configuration,我的logstash.conf可以在下面看到 我如何过滤掉包含特定字符串的消息?在本例中,我的一些消息读作“DEBUG:xxx xxx xxx xxx”,我希望这些消息从日志中过滤出来 input { tcp { port => 5000 type => syslog } udp { port => 5000 type => syslog } } filter { if [loglevel] == "debug" {

我的logstash.conf可以在下面看到

我如何过滤掉包含特定字符串的消息?在本例中,我的一些消息读作“DEBUG:xxx xxx xxx xxx”,我希望这些消息从日志中过滤出来

input {
  tcp {
    port => 5000
    type => syslog
  }
  udp {
    port => 5000
    type => syslog
  }
}
filter {
  if [loglevel] == "debug" {
      drop { }
  }

  if [type] == "syslog" {
    grok {
      match => { 
      "message" => "%{SYSLOG5424PRI}%{NONNEGINT:ver} +(?:%  {TIMESTAMP_ISO8601:ts}|-) +(?:%{HOSTNAME:containerid}|-) +(?:%{NOTSPACE:containername}|-) 
      +(?:%{NOTSPACE:proc}|-) +(?:%{WORD:msgid}|-) +(?:%{SYSLOG5424SD:sd}|-|) +%{GREEDYDATA:msg}" }
}   
  syslog_pri { } 
    date {
      match => [ "syslog_timestamp", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]
    }   
   if !("_grokparsefailure" in [tags]) {
     mutate {
        replace => [ "@source_host", "%{syslog_hostname}" ]
        replace => [ "@message", "%{syslog_message}" ]
      }   
    }   
    mutate {
      remove_field => [ "syslog_hostname", "syslog_message", "syslog_timestamp" ]
    }   
  }

}

output {
  elasticsearch { host => "elasticsearch" }
  stdout { codec => rubydebug }
}
编辑: 我应该澄清,如果包含“调试”消息,我希望删除的是GREEDYDATA:msg字段。

您正在查找:

虽然最好使用精确匹配,但也可以使用regexp条件:

filter {
    if [myField] =~ "DEBUG" {
        drop { }
    }
}

对不起,我应该在我的帖子中提到,包含“DEBUG”的是GREEDYDATA消息。我编辑了我的帖子来澄清这一点。当[loglevel]等于debug时,我已经在使用drop。当GREEDYDATA包含“DEBUG”作为字符串的一部分时,这也会起作用吗?
filter {
    if [myField] =~ "DEBUG" {
        drop { }
    }
}