[英]Logstash split field into multiple fields or split array into multiple fields
我有一個正在解析的 .txt 文件,其中一個字段 inputFields 具有多個值。
INPUT
@07
@09
@11
我可以成功地理解、改變和拆分 inputFields 到一個包含所有值的數組中。
模式.txt
INPUT_FIELDS (?<inputFields>INPUT\s*(@\d*)*)
日志文件
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 dynamic ,它使用 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 中使用不同的變量,但無法將它們添加到新的字段名稱中。
動態命名字段產生了一個新問題。 我想使用翻譯插件,但您必須選擇一個特定的字段進行翻譯才能查看。 由於我創建的字段都有不同的名稱,我無法指向其中任何一個。 我曾嘗試使用正則表達式來匹配字段,但翻譯不支持它。
建議??
您可以通過以下方式實現無需 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]}" ]
}
我自己在這個頁面上找到了這個答案。
祝你好運!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.