Logstash:Grok filter 入门
有效分析和查询送入 Elastic Stack 的数据的能力取决于信息的可读性。 这意味着,当将非结构化数据摄取到系统中时,必须将其转换为结构化数据。
通常,这个至关重要的任务留给 Logstash(尽管还有其他日志传送器可用,比如 Fluentd)。 无论你定义什么数据源,都必须提取日志并执行一些魔力来美化它们,以确保在将它们输出到Elasticsearch之前正确地对其进行了解析。
Logstash 中的数据操作是使用过滤器插件执行的。 本文重点介绍最流行和有用的过滤器插件之一 - Logstash grok 过滤器,该过滤器用于将非结构化数据解析为结构化数据。
在之前我的另外一篇文章 “Elasticsearch:Elastic可观测性 - 数据结构化及处理”,我也介绍了如何使用 ingest node 来对数据进行加工和格式化。
Logstash 日志解析的 Grok 模式示例
Logstash 日志解析的 Grok 模式示例_哔哩哔哩_bilibili
什么是 Grok?
最初的术语实际上是很新的-由罗伯特·A·海因莱因(Robert A. Heinlein)在他的1961年的《陌生的土地上的陌生人》一书中创造的–指的是理解某种东西,使人们真正沉浸其中。 这是 grok 语言和 Logstash grok 插件的合适名称,它们可以以一种格式修改信息并将其浸入另一种格式(特别是 JSON)。 已经有数百种用于记录的 Grok 模式。
Grok 是如何工作的?
简而言之,grok是一种将行与正则表达式匹配,将行的特定部分映射到专用字段中以及根据此映射执行操作的方法。
内置了超过 200 种 Logstash 模式,用于过滤 AWS,Bacula,Bro,Linux-Syslog 等中的单词,数字和日期等项目。 如果找不到所需的模式,则可以编写自己的自定义模式。 还有多个匹配模式的选项,可简化表达式的编写以捕获日志数据。
这是 Logstash grok 过滤器的基本语法格式:
%{PATTERN:FieldName}
这将匹配预定义的模式,并将其映射到特定的标识字段。 由于grok本质上是基于正则表达式的组合,因此你也可以创建自己的基于正则表达式的 grok 过滤器。 例如:
(?\d\d-\d\d-\d\d)
这将使 22-22-22(或任何其他数字)的正则表达式与字段名称匹配。
一个 Logstash Grok 例子
这个 grok 调试工具是开始构建 grok 过滤器的好方法:Grok Debugger。你也可以在 Kibana 中找到 grok 的调试工具:
使用此工具,你可以粘贴日志消息并逐步构建 grok 模式,同时连续测试编译。 通常,我建议从 %{GREEDYDATA:message} 模式开始,然后逐步添加越来越多的模式。
在上面的示例中,我将从以下内容开始:
%{GREEDYDATA:message}
比如针对这条信息:
83.149.9.216 - - [17/May/2015:10:05:03 +0000] "GET /presentations/logstash-monitorama-2013/images/kibana-search.png HTTP/1.1" 200 203023 "http://semicomplete.com/presentations/logstash-monitorama-2013/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36"
我们可以看到整个信息都赋予给 message 了。
我们再接着尝试如下的例子:
%{IPORHOST:clientip} - - \[%{HTTPDATE:timestamp}\] %{GREEDYDATA:message}
在上面,我们可以看到 clientip, message,及timestamp。
常见的例子
以下是一些示例,可帮助你熟悉如何构造grok过滤器:
Syslog
用 Grok 解析 syslog 消息是新用户更普遍的需求之一。 syslog 还有几种不同的日志格式,因此请牢记编写自己的自定义 grok 模式。 这是常见系统日志解析的一个示例:
May 4 00:10:36 liuxg xpcproxy[69746]: libcoreservices: _dirhelper_userdir: 557: bootstrap_look_up returned (ipc/send) invalid destination port
在 Logstash 中,我们应该使用如下的 grok filter:
grok {match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp}%{SYSLOGHOST:syslog_hostname}%{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?:%{GREEDYDATA:syslog_message}" }
}
Apache access logs
80.135.37.131 - - [11/Sep/2019:23:56:45 +0000] "GET /item/giftcards/4852 HTTP/1.1" 200 91 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:9.0.1) Gecko/20100101 Firefox/9.0.1"
grok {match => { "message" => "%{COMBINEDAPACHELOG}" }
}
Elasticsearch
[2017-09-10T12:07:26,683][WARN ][index.indexing.slowlog.index] [GOgO9TD] [testindex-slowlogs/yNbyYk1ARSW_hd0YRh6J0A] took[142.3micros], took_millis[0], type[product], id[105], routing[] , source[{"price":9925,"name":"Nariko"}]
grok {match => ["message", "\[%{TIMESTAMP_ISO8601:timestamp}\]\[%{DATA:loglevel}%{SPACE}\]\[%{DATA:source}%{SPACE}\]%{SPACE}\[%{DATA:node}\]%{SPACE}\[%{DATA:index}\] %{NOTSPACE} \[%{DATA:updated-type}\]","message", "\[%{TIMESTAMP_ISO8601:timestamp}\]\[%{DATA:loglevel}%{SPACE}\]\[%{DATA:source}%{SPACE}\]%{SPACE}\[%{DATA:node}\] (\[%{NOTSPACE:Index}\]\[%{NUMBER:shards}\])?%{GREEDYDATA}"]}
上面有两种匹配的方法,只要其中的一种可以匹配就可以了。
总结
Logstash grok 只是在将日志转发到 Elasticsearch 之前可以应用于你的日志的一种过滤器。 由于 grok 在测井管道中起着至关重要的作用,因此它也是最常用的过滤器之一。
Logstash:Grok filter 入门相关推荐
- Logstash:如何使用 Logstash Grok 过滤器提取模式
Logstash 是数据管道,可帮助我们处理来自各种来源的日志和其他事件数据. Logstash 拥有 200 多个插件,可以连接到各种源并将数据流式传输到中央分析系统. Elastic Stack( ...
- [elk]logstash grok原理
logstash语法 http://www.ttlsa.com/elk/elk-logstash-configuration-syntax/ https://www.elastic.co/guide/ ...
- logstash grok插件语法介绍
介绍 logstash拥有丰富的filter插件,它们扩展了进入过滤器的原始数据,进行复杂的逻辑处理,甚至可以无中生有的添加新的 logstash 事件到后续的流程中去!Grok 是 Logstash ...
- Logstash的filter插件介绍
一 官网说明 过滤器插件对事件执行中介处理.通常根据事件的特征有条件地应用过滤器. 以下过滤器插件在下面可用. Plugin Description Github repository aggrega ...
- logstash grok解析
在<本地搭建ELK系统>中,在本地搭建了一个非常简单的ELK系统.其中logstash从本地日志文件中读取信息并交给elasticsearch. 然而直接把原始未加工的日志交给elasti ...
- logstash grok匹配
2019独角兽企业重金招聘Python工程师标准>>> Grok debug请访问grok debugger 中文网 ### Logstash grok 匹配 JAVACLASS ( ...
- logstash grok mysql_【Logstash系列】使用Redis并自定义Grok匹配
之前提到,用RabbitMQ作为消息队列.但是这个东西实在太过高精尖,不懂erlang不会调优的情况下,很容易挂掉--基本上我这里试验结果跑不了半小时日志传输就断了.所以改用简单易行的redis来干这 ...
- Logstash Grok详解
题外话 如需转载文章,请保留文章出处(blog.csdn.net/knight_zhou).因为我的很多文章一般是会进行更新的.也避免百度搜出来一大推相似的文章,却找不到原创博主. 介绍 Logsta ...
- 使用logstash csv filter插件时自动检测表头失败
在logstash中使用csv filter解析表头时,一种方法是用coulmn直接把每个表头一一对应写进去,另一种方法是在csv插件中使用autdetect_column_names => & ...
最新文章
- 即将到来的金三银四,这10道springboot常见面试题你需要了解下
- 网久环境服务启动命令
- Python学习笔记-进度条
- 针对Chrome的css的hack写法
- TextView 显示内容时出现 ArrayIndexOutOfBoundsException 的解决方法(Android 4.1)
- Exchange 2013如何自建管理员角色
- 针对以下需求提供一个解决方案:在卡牛-信用卡管家APP里面,我们的用户需要一个寻找 附近银行网点/ATM 的功能
- cat命令详解_需要!Linux常用监视和故障排查命令详解
- Linux服务器版本鼠标,安装GPM给Linux虚拟控制台提供配置鼠标支持
- javascript中本地储存、离线缓存、地理定位、网络状态
- 圣诞限定快乐,送3本技术好书
- Javascript设计模式(五)代理模式
- activiti查询当前用户的任务列表
- 快速排序—三路快排 vs 双基准
- 输入一个字符串,内有数字和非数字字符,
- mysql +cobar_cobar
- Rocket - tilelink - Xbar
- java openoffic linux_怎样使用Java读取OpenOffice文档
- Unity和Easy AR制作一个AR的APP
- 破解水卡教程 超详细
热门文章
- 【项目分享~写给应届生的一篇文章】基于Web企业招聘网站 ~~ 登录注册设计
- 《商战之电商风云》观后感
- shinelon自动修复此计算机,炫龙 shinelonV5 Pro 笔记本改win7详细图文教程
- 为什么信而富显示服务器开小差,剖析:信而富12点后也没额度的真相!
- keil延时c语言程序设计,Keil C51程序设计中几种精确延时方法
- Windows 系统镜像下载地址
- Spring boot 缓存学习笔记
- 普通人“微创业”实例
- error: expected declaration or statement at end of input 解决方法
- 谁在说谎剧情详细介绍