【问题标题】:Logstash filter to copy some text from the log messageLogstash 过滤器从日志消息中复制一些文本
【发布时间】:2021-02-11 11:55:40
【问题描述】:

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

"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" => }}}

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

【问题讨论】:

    标签: elasticsearch logstash filebeat elk logstash-filter


    【解决方案1】:

    一种解决方案是像这样直接使用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})" 
                  }
            }
    }
    

    【讨论】:

    • 好的,主要问题是我有 5 条日志消息,我想创建自定义字段,而不是弄乱其余的日志消息。这就是我考虑条件的原因,但我的问题是如何实现它。
    • 我已更改我的解决方案以匹配您的用例
    • 似乎无法创建字段...我确实按照您的教程进行操作,但是由于我将日志转到 filebeat,我不知道为什么要创建字段。跨度>
    • 你能举一个数据线的例子吗?可能是 GEEDYDATA 与完整字符串不匹配。
    • 您好,您结束了使用 grok 处理器和摄取节点管道,它的工作就像一个魅力。感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-09
    相关资源
    最近更新 更多