Logstash:从grok到5.X版本的dissect
转载请注明出处: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
![](/assets/blank.gif)
扫一扫 关注微信公众号!号主 专注于搜索和推荐系统,尝试使用算法去更好的服务于用户,包括但不局限于机器学习,深度学习,强化学习,自然语言理解,知识图谱,还不定时分享技术,资料,思考等文章!
Logstash:从grok到5.X版本的dissect相关推荐
- Logstash 配置文件 Grok 语法
Logstash 配置文件 Grok 语法 Grok 是啥? Grok 是一种采用组个多个预定义的正则表达式.用来匹配分割文本,并且映射到关键字的工具.主要用来对日志数据进行预处理.Logstash ...
- logstash之grok过滤
简介 前面我们的nginx日志编码使用的json,logstash直接输入预定义好的 JSON 数据,这样就可以省略掉 filter/grok 配置,但是在我们的生产环境中,日志格式往往使用的是普 ...
- 日志分析logstash插件-grok详解
一般系统或服务生成的日志都是一大长串.每个字段之间用空格隔开.logstash在获取日志是整个一串获取,如果把日志中每个字段代表的意思分割开来在传给elasticsearch.这样呈现出来的数据更加清 ...
- 使用Logstash filter grok过滤日志文件
Logstash提供了一系列filter过滤plugin来处理收集到的log event,根据log event的特征去切分所需要的字段,方便kibana做visualize和dashboard的da ...
- logstash filter grok 用法
在elk+filebeat都安装好,且明白了基本流程后,主要的就是写logstash的filter了,以此来解析特定格式的日志 logstash的filter是用插件实现的,grok是其中一个,用来解 ...
- Logstash的grok正则匹配自定义
文章目录 前言 一.grok-patterns 二.自定义grok-patterns(正则匹配) 1.自定义格式 2.组合现有patterns匹配时间 3.组合现有patterns匹配中文 4.组合现 ...
- Logstash filter grok正则的使用及介绍
一.Logstash企业级插件案例(EFLK架构) 1.常见的插件概述 gork插件:Grok是将⾮结构化⽇志数据解析为结构化和可查询的好⽅法.底层原理是基于正则匹配任意 ⽂本格式.该⼯具⾮常适合sy ...
- logstash之grok正则表达式语法
logstash过滤器插件filter详解及实例 1.logstash过滤器插件filter 1.1.grok正则捕获 grok是一个十分强大的logstash filter插件,他可以通过正则解析任 ...
- Logstash:Grok filter 入门
有效分析和查询送入 Elastic Stack 的数据的能力取决于信息的可读性. 这意味着,当将非结构化数据摄取到系统中时,必须将其转换为结构化数据. 通常,这个至关重要的任务留给 Logstash( ...
- Logstash Grok详解
题外话 如需转载文章,请保留文章出处(blog.csdn.net/knight_zhou).因为我的很多文章一般是会进行更新的.也避免百度搜出来一大推相似的文章,却找不到原创博主. 介绍 Logsta ...
最新文章
- 文本分类的目的和分类的方法
- php proc open 返回,PHP用proc_open新建子进程使用管道通信非阻塞执行PHP脚本
- 高精度定位!“天地一体”基础设施助中国北斗在商用领域“弯道超车”
- SMTPDiag 诊断工具
- 从C语言的角度重构数据结构系列(九)-数据结构哈希表分糖果
- 多线程:为什么wait()需要放在循环中?
- 使用IPSec加强系统安全性
- RHCS创建高可用集群apche服务器
- snmp在php中的使用,在php中转换python代码以计算snmpvlan掩码的最佳方法
- CentOS下Samba文件服务器的安装与配置
- sockert组成部分_Linux TCP/IP 协议栈的关键数据结构Socket Buffer(sk_buff )
- COCO数据集提取自己需要的类,转VOC
- LeetCode刷题(48)--Remove Duplicates from Sorted List II
- 周志华机器学习西瓜书速记第一章绪论
- 安装oracle 10g 的艰难之旅
- 使用JSPanda扫描客户端原型污染漏洞
- 小鱼易连 for mac常见问题解答
- backupexec Oracle授权,通过BackupExec重定向Oracle 8I数据库
- JAVA 二叉树面试题
- Java多线程中wait, notify and notifyAll的使用