Mutate filter plugin参考: https://www.elastic.co/guide/en/logstash/current/plugins-filters-mutate.html

在线匹配:

http://grokdebug.herokuapp.com/

grok github正则:

https://github.com/kkos/oniguruma/blob/master/doc/RE

logstash grok目录:

/usr/local/logstash/vendor/bundle/jruby/1.9/gems/logstash-patterns-core-4.1.2/patterns

主要研究下这个插件的这些功能

增加字段

删除字段

拆分字段

聚合

add_field: 增加字段

  1. input { stdin { codec => "json" } }
  2. filter {
  3. mutate {
  4. add_field => { "status_true" => "1" }
  5. }
  6. }
  7. output {
  8. stdout { codec => rubydebug }
  9. }

remove_field: 删除字段

  1. input { stdin { codec => "json" } }
  2. filter {
  3. mutate {
  4. remove_field => [isp]
  5. }
  6. }
  7. output {
  8. stdout { codec => rubydebug }
  9. }

rename: 重命名字段名

  1. input { stdin { codec => "json" } }
  2. filter {
  3. mutate {
  4. rename => { "isp" => "province_isp" }
  5. }
  6. }
  7. output {
  8. stdout { codec => rubydebug }
  9. }

replace: 修改字段的值(可调用其他字段值)

  1. input { stdin { codec => "json" } }
  2. filter {
  3. mutate {
  4. replace => { "isp" => "阿里飞飞" }
  5. }
  6. }
  7. output {
  8. stdout { codec => rubydebug }
  9. }

// 相对update多了个调用其他字段的能力

  1. input { stdin { codec => "json" } }
  2. filter {
  3. mutate {
  4. replace => { "isp" => "%{isp}: My new message" }
  5. }
  6. }
  7. output {
  8. stdout { codec => rubydebug }
  9. }

update: 更新某字段的值(不能调用其他字段)

  1. input { stdin { codec => "json" } }
  2. filter {
  3. mutate {
  4. update => { "isp" => "My new message" }
  5. }
  6. }
  7. output {
  8. stdout { codec => rubydebug }
  9. }

convert: 转换字段的值的类型

  1. input { stdin { codec => "json" } }
  2. filter {
  3. mutate {
  4. convert => { "success" => "string" }
  5. }
  6. }
  7. output {
  8. stdout { codec => rubydebug }
  9. }
  1. mutate {
  2. convert => { "dest_Port" => "integer" }
  3. convert => { "source_Port" => "integer" }
  4. }
  1. {"mobile" : "15812345606", "province": "上海", "isp": "中国移动","time" : "2017-12-06T09:30:51.244Z", "success" : false}

####################################################

copy: 复制一个字段(重命名字段名/复制字段值)


  1. input { stdin { codec => "json" } }
  2. filter {
  3. mutate {
  4. copy => { "isp" => "isps" }
  5. }
  6. }
  7. output {
  8. stdout { codec => rubydebug }
  9. }

合并2个字段为1个

  1. input { stdin { codec => "json" } }
  2. filter {
  3. mutate {
  4. replace => { "isp_province" => "%{isp} - %{province}" }
  5. remove_field => [isp, province]
  6. }
  7. }
  8. output {
  9. stdout { codec => rubydebug }
  10. }

拆分2个字段为1个

  1. filter {
  2. mutate {
  3. copy => { "source_field" => "dest_field" }
  4. }
  5. }

拆分值

  1. input { stdin { codec => "json" } }
  2. filter {
  3. mutate {
  4. replace => { "isp_province" => "%{isp} - %{province}" }
  5. remove_field => [isp, province]
  6. }
  7. }
  8. output {
  9. stdout { codec => rubydebug }
  10. }

lowercase: 值大小写转换

  1. input { stdin { codec => "json" } }
  2. filter {
  3. mutate {
  4. lowercase => [ "isp" ]
  5. }
  6. }
  7. output {
  8. stdout { codec => rubydebug }
  9. }
  1. {"mobile" : "15812345606", "province": "上海", "isp": "ZGYD","time" : "2017-12-06T09:30:51.244Z", "success" : false}

uppercase: 值大小写转换

  1. input { stdin { codec => "json" } }
  2. filter {
  3. mutate {
  4. uppercase => [ "isp" ]
  5. }
  6. }
  7. output {
  8. stdout { codec => rubydebug }
  9. }
  1. {"mobile" : "15812345606", "province": "上海", "isp": "zgyd","time" : "2017-12-06T09:30:51.244Z", "success" : false}

split: 值的分割

  1. input { stdin { codec => "json" } }
  2. filter {
  3. mutate {
  4. split => { "isp" => ", " }
  5. }
  6. }
  7. output {
  8. stdout { codec => rubydebug }
  9. elasticsearch {
  10. hosts => [ "localhost:9200" ]
  11. }
  12. }
  1. {"mobile" : "15812345606", "province": "上海", "isp": "移动, 联通, 电信","time" : "2017-12-06T09:30:51.244Z", "success" : false}
  1. {
  2. "@timestamp" => 2017-12-08T01:47:37.860Z,
  3. "province" => "上海",
  4. "success" => false,
  5. "isp" => [
  6. [0] "移动",
  7. [1] "联通",
  8. [2] "电信"
  9. ],
  10. "mobile" => "15812345606",
  11. "@version" => "1",
  12. "host" => "no1.ma.com",
  13. "time" => "2017-12-06T09:30:51.244Z"
  14. }

kibana效果

strip: 去掉字段值的收尾空格

Strip whitespace from field. NOTE: this only works on leading and trailing whitespace.

  1. input { stdin { codec => "json" } }
  2. filter {
  3. mutate {
  4. strip => ["field1", "field2"]
  5. }
  6. }
  7. output {
  8. stdout { codec => rubydebug }
  9. }

type&add_tag设type,打tag

打tag为了过滤

  1. input {
  2. stdin {
  3. type => "isp"
  4. codec => "json"
  5. }
  6. }
  7. filter {
  8. mutate {
  9. add_tag => [ "foo_%{isp}" ]
  10. }
  11. }
  12. // 根据type分流到不同的index
  13. output {
  14. stdout { codec => rubydebug }
  15. if [type] == "isp"{
  16. elasticsearch {
  17. hosts => [ "localhost:9200" ]
  18. }
  19. }
  20. }
  1. {
  2. "@timestamp" => 2017-12-08T02:14:12.042Z,
  3. "province" => "上海",
  4. "success" => false,
  5. "isp" => "ZGYD",
  6. "mobile" => "15812345606",
  7. "@version" => "1",
  8. "host" => "lb-212-222.above.com",
  9. "time" => "2017-12-06T09:40:51.244Z",
  10. "type" => "isp",
  11. "tags" => [
  12. [0] "foo_ZGYD"
  13. ]
  14. }

参考: https://www.elastic.co/guide/en/logstash/current/plugins-filters-mutate.html#plugins-filters-mutate-common-options

http://www.cnblogs.com/qq27271609/p/4762562.html

id字段

这里没帮我改id,不知道为什么

  1. input { stdin { codec => "json" } }
  2. filter {
  3. mutate {
  4. id => "ABC"
  5. }
  6. }
  7. output {
  8. stdout { codec => rubydebug }
  9. elasticsearch {
  10. hosts => [ "localhost:9200" ]
  11. }
  12. }
  1. {"mobile" : "15812345606", "province": "上海", "isp": "ZGYD","time" : "2017-12-06T10:18:51.244Z", "success" : false}

[elk]Mutate filter plugin增删改查字段的更多相关文章

  1. [Django框架 - 静态文件配置、request对象方法初识、 pycharm链接数据库、ORM实操增删改查、django请求生命周期]

    [Django框架 - 静态文件配置.request对象方法初识. pycharm链接数据库.ORM实操增删改查.django请求生命周期] 我们将html文件默认都放在templates文件夹下 将 ...

  2. $Django orm增删改字段、建表 ,单表增删改查,Django请求生命周期

    1 orm介绍  ORM是什么   ORM 是 python编程语言后端web框架 Django的核心思想,“Object Relational Mapping”,即对象-关系映射,简称ORM.  一 ...

  3. django ORM 增删改查 模糊查询 字段类型 及参数等

    ORM 相关 #sql中的表 #创建表: CREATE TABLE employee( id INT PRIMARY KEY auto_increment , name VARCHAR (), gen ...

  4. [译]聊聊C#中的泛型的使用(新手勿入) Seaching TreeVIew WPF 可编辑树Ztree的使用(包括对后台数据库的增删改查) 字段和属性的区别 C# 遍历Dictionary并修改其中的Value 学习笔记——异步 程序员常说的「哈希表」是个什么鬼?

    [译]聊聊C#中的泛型的使用(新手勿入)   写在前面 今天忙里偷闲在浏览外文的时候看到一篇讲C#中泛型的使用的文章,因此加上本人的理解以及四级没过的英语水平斗胆给大伙进行了翻译,当然在翻译的过程中发 ...

  5. django基础之day04,必知必会13条,双下划线查询,字段增删改查,对象的跨表查询,双下划线的跨表查询

    from django.test import TestCase # Create your tests here. import os import sys if __name__ == " ...

  6. Django静态文件配置-request方法-ORM简介-字段的增删改查

    app的创建注意事项: 在Django新创建的app要在seetings.py中添加注册,才会生效 创建app:django-adminapp an startapp app名称 或者 python3 ...

  7. Sql Server xml 类型字段的增删改查

    1.定义表结构 在MSSM中新建数据库表CommunicateItem,定义其中一个字段ItemContentXml 为xml类型 2.编辑表数据,新增一行,发现xml类型不能通过设计器录入数据. 需 ...

  8. 一、数据库表中字段的增删改查,二、路由基础.三、有名无名分组.四、多app共存的路由分配.五、多app共存时模板冲突问题.六、创建app流程.七、路由分发.八、路由别名,九、名称空间.十、反向解析.十一、2.x新特性.十二、自定义转换器

    一.数据库表中字段的增删改查 ''' 直接在modules中对字段进行增删改查 然后在tools下点击Run manage.py Task执行makemigrations和migrate 注意在执行字 ...

  9. MyBatis入门2_增删改查+数据库字段和实体字段不一致情况

    本文为博主辛苦总结,希望自己以后返回来看的时候理解更深刻,也希望可以起到帮助初学者的作用. 转载请注明 出自 : luogg的博客园 谢谢配合! 当数据库字段和实体bean中属性不一致时 之前数据库P ...

随机推荐

  1. Java垃圾回收精粹 — Part3

    Java垃圾回收精粹分4个部分,本篇是第3部分.在第3部分里介绍了串行收集器.并行收集器以及并发标记清理收集器(CMS). 串行收集器(Serial Collector) 串行收集器是最简单的收集器, ...

  2. android开源框架之 andbase

    andbase开发框架介绍:andbase是为Android开发人员量身打造的一款开源类库产品,您能够在本站中获取到最新的代码,演示样例以及开发文档. 下载地址:http://download.csd ...

  3. iOS:文件归档和解归档的详解和使用

    文件归档和解归档: 用途: 所谓文件归档,就是把需要存储的对象数据存储到沙盒的Documents目录下的文件中,即存储到了磁盘上,实现数据的持久性存储和备份.解归档,就是从磁盘上读取该文件下的数据,用 ...

  4. go语言基础之闭包捕获外部变量特点

    1.闭包捕获外部变量特点 示例: package main //必须 import "fmt" func main() { a := 10 str := "mike&qu ...

  5. go语言基础之递归实现数字累加

    1.实现1+100 = 5050 示例: package main import "fmt" //实现1+2+3+……100 func test01() (sum int) { f ...

  6. Servlet介绍以及简单实例

    一.背景介绍: HTTP:超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议.设计HTTP最初的目的是为了提供一种发布和接收 HTM ...

  7. [Python爬虫] 之七:selenium webdriver定位不到元素的五种原因及解决办法(转载)

    转载:http://www.51testing.com/html/87/300987-831171.html 1.动态id定位不到元素for example:        //WebElement ...

  8. 利用MyEclipse开发一个webservice接口

    一直以来对于接口这个东西都很好奇,各种客户也一直在说那个什么什么数据我们提供给你们一个接口就好了,结果还是不是很明白.于是乎就有了下面的小故事,接下来我们就进入正文吧 ---大概可以分为这样的步骤 1 ...

  9. mybatis模糊查询语句

    articletitle like concat('%',#{articletitle},'%')

  10. 说说PHP中的命名空间相关概念

    说说PHP中的命名空间相关概念 1. PHP中的命名空间是什么? 什么是命名空间?"从广义上来说,命名空间是一种封装事物的方法.在非常多地方都能够见到这样的抽象概念. 比如.在操作系统中文件 ...