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