Logstash 過濾外掛 Mutate(資料修改)
阿新 • • 發佈:2020-12-30
簡介
資料修改外掛 Mutate 提供了豐富的基礎資料處理能力。包括事件中字串處理,型別轉換、欄位處理等。
處理順序
配置檔案中的資料修改按如下的順序執行:
- coerce
- rename
- update
- replace
- convert
- gsub
- uppercase
- capitalize
- lowercase
- strip
- remove
- split
- join
- merge
- copy
可以將 mutate 模組分隔開以控制資料修改的順序,例如:
filter { mutate { split => ["hostname", "."] add_field=> { "shortHostname" => "%{hostname[0]}" } } mutate { rename => ["shortHostname", "hostname" ] } }
Mutate 過濾器配置選項
型別轉換
Convert 型別轉換可以轉換欄位值的型別,例如將字串轉換為整數。如果欄位值是陣列,則會轉換陣列中的所有元素。如果欄位值為雜湊,則不會採取任何措施。
可以設定的轉換型別包括:"integer"、"integer_eu"、"float"、"float_eu"、"string"、"boolean"。示例如下:
filter { mutate { convert => { "fieldname" => "integer" "booleanfield" => "boolean" } } }
注意:當轉換陣列型別的欄位時,可以將 ["1","2"] 轉換成 [1, 2]。但不支援對雜湊型別的欄位做類似處理。
字串處理
- gsub
根據欄位值匹配正則表示式,然後將所有匹配項替換為替代字串。只有當欄位值為字串或者陣列中的值為字串才支援。
filter { mutate { gsub=> [ # 用下劃線替換所有正斜槓 "fieldname", "/", "_", # 用點替換反斜槓、問好、井號、負號 "fieldname2", "[\\?#-]", "." ] } }
注意:在配置檔案需要格外注意反斜杆的轉義。
- split
使用分隔符將欄位拆分為陣列。僅對字串型別的欄位有效。例如用 | 分隔符分隔一串字串:
filter { mutate { split => ["message", "|"] } } { "message" => [ [0] "123", [1] "321", [2] "adfd", [3] "dfjld*=123" ], 。。。 }
- join
用分隔符將數組裡的資料連線起來。僅對陣列型別欄位有效。
filter { mutate { split => ["message", "|"] } mutate { join => ["message", ","] } } { "message" => "123,321,adfd,dfjld*=123", 。。。 }
- merge
合併兩個陣列或雜湊欄位。字串型別的欄位將會被自動轉換成陣列,所以:
`array` + `string` will work `string` + `string` will result in an 2 entry array in `dest_field` `array` and `hash` will not work
欄位處理
- rename
重新命名某個欄位,如果目的欄位已經存在,則會被覆蓋掉:
filter { mutate { rename => ["syslog_host", "host"] } }
- update
更新某個欄位的浽容。如果欄位不存在,不會新建。
filter { mutate { update => { "sample" => "My new message" } } }
- replace
作用和 update 類似,但是當欄位不存在時,會起到 add_field 引數一樣的效果,自動新增新欄位。
filter { mutate { replace => { "message" => "%{source_host}: My new message" } } }