filters/mutate 插件是 Logstash 另外一個重要插件。它提供了豐富的基礎類型數據處理能力。包括類型轉換,字符串處理和字段處理等。html
類型轉換是 filters/mutate 插件最初誕生時的惟一功能。其應用場景在以前 Codec/JSON 小節已經提到。json
能夠設置的轉換類型包括:"integer","float" 和 "string"。示例以下:數組
filter { mutate { convert => ["request_time", "float"] } }
注意:mutate 除了轉換簡單的字符值,還支持對數組類型的字段進行轉換,即將 ["1","2"]
轉換成 [1,2]
。但不支持對哈希類型的字段作相似處理。有這方面需求的能夠採用稍後講述的 filters/ruby 插件完成。ruby
gsub => ["urlparams", "[\\?#]", "_"]
filter { mutate { split => ["message", "|"] } }
僅對數組類型字段有效ide
咱們在以前已經用 split
割切的基礎再 join
回去。配置改爲:ui
filter { mutate { split => ["message", "|"] } mutate { join => ["message", ","] } }
filter 區段以內,是順序執行的。因此咱們最後看到的輸出結果是:url
{ "message" => "123,321,adfd,dfjld*=123", "@version" => "1", "@timestamp" => "2014-08-20T16:01:33.972Z", "host" => "raochenlindeMacBook-Air.local" }
filter { mutate { split => ["message", "|"] } mutate { merge => ["message", "message"] } }
{ "message" => [ [0] "123", [1] "321", [2] "adfd", [3] "dfjld*=123", [4] "123", [5] "321", [6] "adfd", [7] "dfjld*=123" ], "@version" => "1", "@timestamp" => "2014-08-20T16:05:53.711Z", "host" => "raochenlindeMacBook-Air.local" }
若是 src 字段是字符串,會自動先轉換成一個單元素的數組再合併。把上一示例中的來源字段改爲 "host":spa
filter { mutate { split => ["message", "|"] } mutate { merge => ["message", "host"] } }
結果變成:.net
{ "message" => [ [0] "123", [1] "321", [2] "adfd", [3] "dfjld*=123", [4] "raochenlindeMacBook-Air.local" ], "@version" => "1", "@timestamp" => "2014-08-20T16:07:53.533Z", "host" => [ [0] "raochenlindeMacBook-Air.local" ] }
看,目的字段 "message" 確實多了一個元素,可是來源字段 "host" 自己也由字符串類型變成數組類型了!插件
下面你猜,若是來源位置寫的不是字段名而是直接一個字符串,會產生什麼奇特的效果呢?
filter { mutate { rename => ["host", "host_syslog"] } }
add_field
參數同樣的效果,自動添加新的字段。
須要注意的是,filter/mutate 內部是有執行次序的。其次序以下:
coerce
rename(event) if @rename update(event) if @update replace(event) if @replace convert(event) if @convert gsub(event) if @gsub uppercase(event) if @uppercase lowercase(event) if @lowercase strip(event) if @strip remove(event) if @remove split(event) if @split join(event) if @join merge(event) if @merge copy(event)
而 filter_matched
這個 filters/base.rb 裏繼承的方法也是有次序的。
@add_field.each do |field, value| end @remove_field.each do |field| end @add_tag.each do |tag| end @remove_tag.each do |tag| end
mutate 過濾器可使用許多配置選項,例如copy,rename,replace,join, uppercase 及 lowercase。
下表概述了它們:
配置選項 | 用途 |
add_field | 向事件中添加新字段 |
remove_field | 從事件中刪除任意字段 |
add_tag | 向事件中添加任意標籤 |
remove_tag | 從事件中刪除標籤(若是存在) |
convert | 將字段值轉換爲另外一種數據類型 |
id | 想現場時間添加惟一的ID |
lowercase | 將字符串字段轉換爲小寫形式 |
replace | 用新值替換字段 |
strip | 刪除開頭和結尾的空格 |
uppercase | 將字符串字段轉換爲等效的大寫字母 |
update | 用新值更新現有的字段 |
rename | 重命名時間中的字段 |
gsub | 用於查找和替換字符串中的替換 |
merge | 合併數組或 hash 事件 |
轉載自:https://blog.csdn.net/UbuntuTouch/article/details/106466873
參考資料:https://www.elastic.co/guide/en/logstash/current/plugins-filters-mutate.html