【问题标题】:Logstash split field into multiple fields or split array into multiple fieldsLogstash 将字段拆分为多个字段或将数组拆分为多个字段
【发布时间】:2016-07-25 17:15:45
【问题描述】:

我有一个我正在解析的 .txt 文件,其中一个字段 inputFields 有多个值。

INPUT
@07  
@09
@11

我可以成功地 grok、mutate 和 split inputFields 到一个包含所有值的数组中。

pattern.txt

INPUT_FIELDS (?<inputFields>INPUT\s*(@\d*)*)

logstash.conf

grok {
        match => [ "message", "%{INPUT_FIELDS}"]
    }
mutate {
        gsub => ["inputFields", "INPUT\s*@", ""]
        split => ["inputFields", "@"]
    }

给我这个输出

"inputFields" => [
  [0] "07",
  [1] "09",
  [2] "11"
 ] 

问题是,我想使用翻译插件,它不适用于数组值。

我想将此数组拆分为同一文档中的多个字段。最好每个字段都标记为“input_field[i]。

例如:

"input_field1" => "07",
"input_field2" => "09", 
"input_field3" => "11"

我已尝试定制此响应 Logstash grok filter - name fields dynamically,它使用 Ruby,以满足我的需求,但它将字段拆分为多个文档,或者将它们保留在同一字段中而不拆分。

谁能帮我看看 Ruby 代码,或者拆分插件配置?

更新 我能够为输入字段创建单独的事件,但我无法创建带有索引的字段。我必须使用字段本身来动态创建一个新字段。

我删除了 mutate { split },并改为使用 Ruby 拆分它。

这是我的新代码

ruby {
        code => "
            inputs = event['inputFields'].split('@')
            for input in inputs
                event['inputField_' + input] = input
            end
        "
    }

这会创建

"inputField_07" => "07"
"inputField_09" => "09"
"inputfield_11" => "11"

对于如何将这些更改为 inputField_[index],我仍然会接受任何建议。我尝试在 Ruby 中使用不同的变量,但无法将它们添加到新字段名称中。

动态命名字段产生了一个新问题。我想使用翻译插件,但您必须选择一个特定的字段才能翻译查看。由于我创建的字段都有不同的名称,我无法指向它们中的任何一个。我曾尝试使用正则表达式来匹配该字段,但翻译不支持它。

建议??

【问题讨论】:

    标签: arrays split logstash translate logstash-configuration


    【解决方案1】:

    您可以通过以下方式实现无需 ruby​​ 代码拆分成新字段的目标:

    mutate {
        # split the field on ::
        split => ["api_class" , "::"]
        # save the last element of the array as the api_method.
        add_field => ["api_method", "%{[api_class][-1]}" ]
    }
    

    我自己在 this page 上找到了这个答案。

    祝你好运!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-26
      • 1970-01-01
      • 2013-08-28
      • 2010-10-12
      相关资源
      最近更新 更多