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

3

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

INPUT
@07  
@09
@11

我可以成功理解、改变和将inputFields分割成一个包含所有值的数组。
模式.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"

我尝试根据我的需求修改这个使用Ruby的回答 Logstash grok filter - name fields dynamically,但它将字段拆分成多个文档或将它们保留在同一字段中而不进行拆分。
有人能帮我处理一下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中使用不同的变量,但无法将它们添加到新字段名称中。
动态命名字段创建了一个新问题。我想使用翻译插件,但必须选择要翻译的特定字段。由于我创建的字段都有不同的名称,因此我无法指向其中任何一个。我尝试使用正则表达式来匹配字段,但translate不支持它。
有什么建议吗?
1个回答

3
您可以通过以下方式实现拆分到新领域的目标,而无需使用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]}" ]
}

我在这个页面上找到了这个答案。

祝你好运!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接