簡介
數據修改插件 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" } } }