转载请注明出处:http://blog.csdn.net/gamer_gyt
博主微博:http://weibo.com/234654758
Github:https://github.com/thinkgamer


写在前边的话

grok 作为 Logstash 最广为人知的插件,在性能和资源损耗方面同样也广为诟病。为了应对这个情况,同时也考虑到大多数时候,日志格式并没有那么复杂,Logstash 开发团队在 5.0 版新添加了另一个解析字段的插件:dissect。当日志格式有比较简明的分隔标志位,而且重复性较大的时候,我们可以使用 dissect 插件更快的完成解析工作。


安装和example

##安装
使用之前首先检查自己的logstash plugin中是否包含,如果未包含,请先安装
检查所有插件

/your/logstash/path/bin/logstash-plugin list

安装logstash-filter-dissect

/your/logstash/path/bin/logstash-plugin install logstash-filter-dissect

##example

filter {dissect {mapping => {"message" => "%{ts} %{+ts} %{+ts} %{src} %{} %{prog}[%{pid}]: %{msg}"}convert_datatype => {pid => "int"}}
}

语法解释:

我们看到上面使用了和 Grok 很类似的 %{} 语法来表示字段,这显然是基于习惯延续的考虑。不过示例中 %{+ts} 的加号就不一般了。dissect 除了字段外面的字符串定位功能以外,还通过几个特殊符号来处理字段提取的规则:
● %{+key} 这个 + 表示,前面已经捕获到一个 key 字段了,而这次捕获的内容,自动添补到之前 key 字段内容的后面。
● %{+key/2} 这个 /2 表示,在有多次捕获内容都填到 key 字段里的时候,拼接字符串的顺序谁前谁后。/2 表示排第 2 位。
● %{?string} 这个 ? 表示,这块只是一个占位,并不会实际生成捕获字段存到 Event 里面。
● %{?string} %{&string} 当同样捕获名称都是 string,但是一个 ? 一个 & 的时候,表示这是一个键值对。

比如对 http://rizhiyi.com/index.do?id=123 写这么一段配置:

http://%{domain}/%{?url}?%{?arg1}=%{&arg1}

则最终生成的 Event 内容是这样的:

{domain => "rizhiyi.com",id => "123"
}

该插件的一些配置

该插件支持下边这几种配置,所有的配置都包括在 dissect{ }中。

Setting Input Type Required Default Value
add_field hash No {}
add_tag array No []
convert_datatype hash No {}
enable_metric boolean No true
id string No
mapping hash No {}
periodic_flush boolean No false
remove_field array No []
remove_tag array No []
tag_on_failure arrray No ["_dissectfailure"]

1:add_field

如果此过滤器解析成功,便可以为该事件添加任何字段,字段名称可以是动态的,并使用%{field}包括事件部分
eg:

input{stdin{type => "dissect"}
}
filter {dissect {add_field => {"from_%{host}" => "Hello world, now is %{@timestamp}""new_field" => "new_static_value"}}
}
output{stdout{codec => rubydebug}elasticsearch{hosts => ["http://localhost:9200"]index => "logstash-%{type}"}
}

执行

sudo /usr/share/logstash/bin/logstash -f test.conf

输入hello test
显示:

17:08:26.925 [Api Webserver] INFO  logstash.agent - Successfully started Logstash API endpoint {:port=>9600}
hello test
{"@timestamp" => 2017-03-28T09:08:29.814Z,"new_field" => "new_static_value","@version" => "1","host" => "thinkgamer","message" => "hello test","type" => "dissect","from_thinkgamer" => "Hello world, now is 2017-03-28T09:08:29.814Z"
}

所以说这里的%{somefield} 就是已经存在的字段名称

2:add_tag

替换上边程序的filter为:

filter {dissect {add_tag => ["foo_%{host}","taggedy_tag" ]}
}

运行输入 hello test
显示:

17:12:42.307 [Api Webserver] INFO  logstash.agent - Successfully started Logstash API endpoint {:port=>9600}
hello test
{"@timestamp" => 2017-03-28T09:13:05.728Z,"@version" => "1","host" => "thinkgamer","message" => "hello test","type" => "dissect","tags" => [[0] "foo_thinkgamer",[1] "taggedy_tag"]
}

3:convert_datatype

使用此设置,可以指定int和float数据类型转换,如果在elasticsearch中没有使用mapping的话,这将是很有用的

filter {dissect {convert_datatype{cpu => "float"code => "int"}}
}

4:enable_metric

默认情况下我们可以记录所有的指标,但是你可以通过该项配置来禁止或者启动是否记录这些指标

5:id

向插件实例添加唯一ID,此ID用于跟踪插件特定配置的信息。

6:mapping

field=>value 可以对当前解析的值进行以后的解析
eg:

filter {dissect {mapping => {"message" => "%{field1} %{field2} %{description}""description" => "%{field3} %{field4} %{field5}"}}
}

7:periodic_flush

定期调用过滤器刷新方法,可选

8:remove_field

eg:

filter {dissect {add_field => {"from_%{host}" => "Hello world, now is %{@timestamp}""new_field" => "new_static_value"}remove_field => ["from_%{host}"]}
}

输入hello test
显示:

18:04:09.028 [Api Webserver] INFO  logstash.agent - Successfully started Logstash API endpoint {:port=>9600}
hello test
{"@timestamp" => 2017-03-28T10:04:36.910Z,"new_field" => "new_static_value","@version" => "1","host" => "thinkgamer","message" => "hello test","type" => "dissect"
}

9:remove_tag

删除标签,可以是动态的
eg:

filter {dissect {add_tag => ["foo_%{host}","taggedy_tag" ]remove_tag => ["foo_%{host}"]}
}

输入hello test
显示:

18:06:10.097 [Api Webserver] INFO  logstash.agent - Successfully started Logstash API endpoint {:port=>9600}
hello test
{"@timestamp" => 2017-03-28T10:06:35.259Z,"@version" => "1","host" => "thinkgamer","message" => "hello test","type" => "dissect","tags" => [[0] "taggedy_tag"]
}

10:tag_on_failure

当解析失败时,将值附加到标签字段


Over !


【技术服务】,详情点击查看: https://mp.weixin.qq.com/s/PtX9ukKRBmazAWARprGIAg


扫一扫 关注微信公众号!号主 专注于搜索和推荐系统,尝试使用算法去更好的服务于用户,包括但不局限于机器学习,深度学习,强化学习,自然语言理解,知识图谱,还不定时分享技术,资料,思考等文章!


Logstash:从grok到5.X版本的dissect相关推荐

  1. Logstash 配置文件 Grok 语法

    Logstash 配置文件  Grok 语法 Grok 是啥? Grok 是一种采用组个多个预定义的正则表达式.用来匹配分割文本,并且映射到关键字的工具.主要用来对日志数据进行预处理.Logstash ...

  2. logstash之grok过滤

    简介   前面我们的nginx日志编码使用的json,logstash直接输入预定义好的 JSON 数据,这样就可以省略掉 filter/grok 配置,但是在我们的生产环境中,日志格式往往使用的是普 ...

  3. 日志分析logstash插件-grok详解

    一般系统或服务生成的日志都是一大长串.每个字段之间用空格隔开.logstash在获取日志是整个一串获取,如果把日志中每个字段代表的意思分割开来在传给elasticsearch.这样呈现出来的数据更加清 ...

  4. 使用Logstash filter grok过滤日志文件

    Logstash提供了一系列filter过滤plugin来处理收集到的log event,根据log event的特征去切分所需要的字段,方便kibana做visualize和dashboard的da ...

  5. logstash filter grok 用法

    在elk+filebeat都安装好,且明白了基本流程后,主要的就是写logstash的filter了,以此来解析特定格式的日志 logstash的filter是用插件实现的,grok是其中一个,用来解 ...

  6. Logstash的grok正则匹配自定义

    文章目录 前言 一.grok-patterns 二.自定义grok-patterns(正则匹配) 1.自定义格式 2.组合现有patterns匹配时间 3.组合现有patterns匹配中文 4.组合现 ...

  7. Logstash filter grok正则的使用及介绍

    一.Logstash企业级插件案例(EFLK架构) 1.常见的插件概述 gork插件:Grok是将⾮结构化⽇志数据解析为结构化和可查询的好⽅法.底层原理是基于正则匹配任意 ⽂本格式.该⼯具⾮常适合sy ...

  8. logstash之grok正则表达式语法

    logstash过滤器插件filter详解及实例 1.logstash过滤器插件filter 1.1.grok正则捕获 grok是一个十分强大的logstash filter插件,他可以通过正则解析任 ...

  9. Logstash:Grok filter 入门

    有效分析和查询送入 Elastic Stack 的数据的能力取决于信息的可读性. 这意味着,当将非结构化数据摄取到系统中时,必须将其转换为结构化数据. 通常,这个至关重要的任务留给 Logstash( ...

  10. Logstash Grok详解

    题外话 如需转载文章,请保留文章出处(blog.csdn.net/knight_zhou).因为我的很多文章一般是会进行更新的.也避免百度搜出来一大推相似的文章,却找不到原创博主. 介绍 Logsta ...

最新文章

  1. 文本分类的目的和分类的方法
  2. php proc open 返回,PHP用proc_open新建子进程使用管道通信非阻塞执行PHP脚本
  3. 高精度定位!“天地一体”基础设施助中国北斗在商用领域“弯道超车”
  4. SMTPDiag 诊断工具
  5. 从C语言的角度重构数据结构系列(九)-数据结构哈希表分糖果
  6. 多线程:为什么wait()需要放在循环中?
  7. 使用IPSec加强系统安全性
  8. RHCS创建高可用集群apche服务器
  9. snmp在php中的使用,在php中转换python代码以计算snmpvlan掩码的最佳方法
  10. CentOS下Samba文件服务器的安装与配置
  11. sockert组成部分_Linux TCP/IP 协议栈的关键数据结构Socket Buffer(sk_buff )
  12. COCO数据集提取自己需要的类,转VOC
  13. LeetCode刷题(48)--Remove Duplicates from Sorted List II
  14. 周志华机器学习西瓜书速记第一章绪论
  15. 安装oracle 10g 的艰难之旅
  16. 使用JSPanda扫描客户端原型污染漏洞
  17. 小鱼易连 for mac常见问题解答
  18. backupexec Oracle授权,通过BackupExec重定向Oracle 8I数据库
  19. JAVA 二叉树面试题
  20. Java多线程中wait, notify and notifyAll的使用

热门文章

  1. 计算机软件服务票可以抵扣吗,航天的软件技术维护费是否可以全额抵扣?
  2. 104 自定义大头针
  3. 微处理器和由微型计算机构成,微处理器的组成
  4. 第5章-构建Spring Web应用程序
  5. Inception-V3论文翻译——中文版
  6. 拒绝精神内耗,5个适合中年人的自学网站,让你脱胎换骨
  7. 体外诊断丨艾美捷游离维多珠单抗ADA水平检测试剂盒
  8. cupload怎么保存图片_微信透明头像怎么弄 专用透明头像图片更换设置教程
  9. ONVIF PTZ控制
  10. RecyclerView侧滑删除按钮