Logstash将字段拆分为多个字段或将数组拆分为多个字段

问题描述 投票:2回答:1

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

INPUT
@07  
@09
@11

我可以成功地将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个回答
2
投票

您可以通过以下方式实现您的目标,而无需使用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上找到了这个答案。

祝你好运!

© www.soinside.com 2019 - 2024. All rights reserved.