用于从日志消息中复制一些文本的 Logstash 过滤器

Logstash filter to copy some text from the log message

我目前正在登录一些这样的短信:

"Some text: some variable text"
"Some other text: some other variable text"

而且我需要将消息的可变部分复制到一个新字段,以便有两个像这样的新字段

"field1" : " some variable text"
"field2" : "some other variable text"

到目前为止,只能使用 filebeat 处理器将整个文本消息复制到一个新字段,使用 logstash 也是如此。我做了一些研究,我发现我可以使用条件语句,并使用 mutate 过滤器:

filter {
  if "Some text" in [message] {
    mutate { add_field =>{ "field1" => }}}

但我发现了如何将“一些可变文本”复制到新字段中。有人知道怎么做吗?

一种解决方案是直接使用 grok 过滤器,如下所示:

  filter{
    grok {
        match => { 
          "message" => "^Some text: %{GREEDYDATA:field1}" 
          }
    }
   grok {
        match => { 
          "message" => "^Some other text: %{GREEDYDATA:field2}" 
          }
    }
}

优点是这比 if 条件更具可读性和更易于维护。

您可以更改 grok 以在一行中处理所有情况:

      filter{
        grok {
            match => { 
              "message" => "^(Some text: %{GREEDYDATA:field1}|Some other text: %{GREEDYDATA:field2})" 
              }
        }
}