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: 增加字段

input { stdin { codec => "json" } }

filter {
mutate {
add_field => { "status_true" => "1" }
}
} output {
stdout { codec => rubydebug }
}

remove_field: 删除字段

input { stdin { codec => "json" } }

filter {
mutate {
remove_field => [isp]
}
} output {
stdout { codec => rubydebug }
}

rename: 重命名字段名

input { stdin { codec => "json" } }

filter {
mutate {
rename => { "isp" => "province_isp" }
}
} output {
stdout { codec => rubydebug }
}

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

input { stdin { codec => "json" } }

filter {
mutate {
replace => { "isp" => "阿里飞飞" }
}
} output {
stdout { codec => rubydebug }
}

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

input { stdin { codec => "json" } }

filter {
mutate {
replace => { "isp" => "%{isp}: My new message" }
}
} output {
stdout { codec => rubydebug }
}

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

input { stdin { codec => "json" } }

filter {
mutate {
update => { "isp" => "My new message" }
}
} output {
stdout { codec => rubydebug }
}

convert: 转换字段的值的类型

input { stdin { codec => "json" } }

filter {
mutate {
convert => { "success" => "string" }
}
} output {
stdout { codec => rubydebug }
}
mutate {
convert => { "dest_Port" => "integer" }
convert => { "source_Port" => "integer" }
}
{"mobile" : "15812345606", "province": "上海", "isp": "中国移动","time" : "2017-12-06T09:30:51.244Z", "success" : false}

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

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


input { stdin { codec => "json" } } filter {
mutate {
copy => { "isp" => "isps" }
}
} output {
stdout { codec => rubydebug }
}

合并2个字段为1个

input { stdin { codec => "json" } }

filter {
mutate {
replace => { "isp_province" => "%{isp} - %{province}" }
remove_field => [isp, province]
}
} output {
stdout { codec => rubydebug }
}

拆分2个字段为1个

filter {
mutate {
copy => { "source_field" => "dest_field" }
}
}

拆分值

input { stdin { codec => "json" } }

filter {
mutate {
replace => { "isp_province" => "%{isp} - %{province}" }
remove_field => [isp, province]
}
} output {
stdout { codec => rubydebug }
}

lowercase: 值大小写转换

input { stdin { codec => "json" } }

filter {
mutate {
lowercase => [ "isp" ]
}
} output {
stdout { codec => rubydebug }
}
{"mobile" : "15812345606", "province": "上海", "isp": "ZGYD","time" : "2017-12-06T09:30:51.244Z", "success" : false}

uppercase: 值大小写转换

input { stdin { codec => "json" } }

filter {
mutate {
uppercase => [ "isp" ]
}
} output {
stdout { codec => rubydebug }
}
{"mobile" : "15812345606", "province": "上海", "isp": "zgyd","time" : "2017-12-06T09:30:51.244Z", "success" : false}

split: 值的分割

input { stdin { codec => "json" } }

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

kibana效果

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

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

input { stdin { codec => "json" } }

filter {
mutate {
strip => ["field1", "field2"]
}
} output {
stdout { codec => rubydebug }
}

type&add_tag设type,打tag

打tag为了过滤

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

参考: 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,不知道为什么

input { stdin { codec => "json" } }

filter {
mutate {
id => "ABC"
}
} output {
stdout { codec => rubydebug }
elasticsearch {
hosts => [ "localhost:9200" ]
}
}
{"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. 关于fmri数据分析的两大类,四种方法

    关于fmri数据分析的两大类,四种方法: 数据驱动: tca:其实这种方法,主要是提取时间维的特征.如果用它来进行数据的分析,则必须要利用其他的数据方法,比如结合ICA. ica:作为pca的一般化实 ...

  2. 简单的内存缓存模块 - Smache

    介绍 [sm]art + c[ache] = smache Smache 是一个方便的内存缓存模块,可以通过一些简单缓存策略避免无限占用更多的内存,同时确保最常用最应该被缓存的对象被缓存. GitHu ...

  3. MySQL round函数

    在mysql中,round函数用于数据的四舍五入,它有两种形式: 1.round(x,d)  ,x指要处理的数,d是指保留几位小数 这里有个值得注意的地方是,d可以是负数,这时是指定小数点左边的d位整 ...

  4. 把Java数组转换为List时的注意事项

    本文由 ImportNew - 飘扬叶 翻译自 mlangc.欢迎加入翻译小组.转载请见文末要求. 不幸的是并不是每件事都尽如人意.举个例子,现在将一个Java数组转换为List.当然,我们可以使用A ...

  5. Python学习(四)数据结构 —— str

    Python 字符串 str 本章大致介绍了 Python 的字符串类型 str,包括字符串的赋值及转义.字符串运算符.字符串格式化输出 以及 一些字符串的内建函数等. 字符串赋值及转义 我们可以使用 ...

  6. 由学习《软件设计重构》所想到的代码review(一)

    前言 对于一个程序猿来讲怎样来最直接的来衡量他的技术能力和产出呢?我想最直观的作法是看他的代码编写能力,就拿我常常接触的一些程序猿来看,他们买了非常多技术重构类书籍.可是看完后代码编写能力并没有显著提 ...

  7. uva 10518 - How Many Calls?(矩阵快速幂)

    题目链接:uva 10518 - How Many Calls? 公式f(n) = 2 * F(n) - 1, F(n)用矩阵快速幂求. #include <stdio.h> #inclu ...

  8. 转:RSA算法原理说明

    转:http://www.joenchen.com/archives/979 RSA算法可以说在我们使用计算机的每一方面都在发挥着作用, EXE文件的签名算法用的是SHA1 + RSA. 我们每天登陆 ...

  9. 转:Tortoise SVN 版本控制常用操作知识

    转自:http://www.cnblogs.com/csharp4/archive/2010/11/26/1889317.html 今天老大跑过来问我如何把SVN服务器上的当前版本回退到某一个版本上去 ...

  10. 0x8002801D:库没有注册

    同一段代码,在测试机上运行成功,但在用户机上运行失败,并报错:无法将类型为GeoProcessorClass的COM对象强制转换为接口类型IGeoProcessor,此操作失败的原因是COM组件调用Q ...