Logstash 過濾插件 Mutate(數據修改)


簡介

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM