我有一个我正在解析的.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"
]
问题是,我想使用translate插件,它不适用于数组值。
我想将此数组拆分为同一文档中的多个字段。优选地,每个字段将被标记为&#34; 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插件,但您必须选择要翻译的特定字段才能查看。由于我创建的字段都有不同的名称,我不能指出它们中的任何一个。我尝试使用正则表达式来匹配字段,但translate不支持它。
建议??
答案 0 :(得分: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找到了这个答案。
祝你好运!