一尘不染

删除包含特定字符串的日志消息

elasticsearch

所以我有以下格式的日志消息:

[INFO]  <blah.blah>       2016-06-27 21:41:38,263 some text
[INFO]  <blah.blah>       2016-06-28 18:41:38,262 some other text

现在,我想删除所有不包含特定字符串“ xyz”的日志,并保留其余所有日志。我也想索引时间戳。

grokdebug没有太大帮助。

这是我的尝试:

input {
    file {
         path => "/Users/username/Desktop/validateLogconf/logs/*"
      start_position => "beginning"

   }
}

filter {

  grok {
      match => {
      "message" => '%{SYSLOG5424SD:loglevel}  <%{JAVACLASS:job}>       %{GREEDYDATA:content}'
      }
  }

  date {
    match => [ "Date", "YYYY-mm-dd HH:mm:ss" ]
    locale => en
  }

}

output {
  stdout {
codec => plain {
                        charset => "ISO-8859-1"
                }

}
    elasticsearch {
        hosts => "http://localhost:9201"
        index => "hello"

  }
}

我是新手,所以上面的模式可能没有意义。请帮忙。


阅读 228

收藏
2020-06-22

共1个答案

一尘不染

要删除不包含字符串的消息xyz

if ([message] !~ "xyz") {
    drop { }
}

您的骗子模式没有抓住日志的日期部分。
一旦在grok模式中有一个包含日期的字段,就可以在该字段上调用日期过滤器。
因此,您的grok过滤器应如下所示:

grok {
    match => {
        "message" => '%{SYSLOG5424SD:loglevel}  <%{JAVACLASS:job}>       %{TIMESTAMP_ISO8601:Date} %{GREEDYDATA:content}'
    }
}

我添加了一部分以获取日期,该日期将在字段中Date。然后,您可以使用日期过滤器:

date {
    match => [ "Date", "YYYY-mm-dd HH:mm:ss,SSS" ]
    locale => en
}

我添加了,,SSS以便格式与Date字段中的格式匹配。解析的日期将存储在@timestamp字段中,除非用target参数另外指定。

2020-06-22