簡體   English   中英

Logstash 將字段拆分為多個字段或將數組拆分為多個字段

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM