有效分析和查询送入 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 入门相关推荐

  1. Logstash:如何使用 Logstash Grok 过滤器提取模式

    Logstash 是数据管道,可帮助我们处理来自各种来源的日志和其他事件数据. Logstash 拥有 200 多个插件,可以连接到各种源并将数据流式传输到中央分析系统. Elastic Stack( ...

  2. [elk]logstash grok原理

    logstash语法 http://www.ttlsa.com/elk/elk-logstash-configuration-syntax/ https://www.elastic.co/guide/ ...

  3. logstash grok插件语法介绍

    介绍 logstash拥有丰富的filter插件,它们扩展了进入过滤器的原始数据,进行复杂的逻辑处理,甚至可以无中生有的添加新的 logstash 事件到后续的流程中去!Grok 是 Logstash ...

  4. Logstash的filter插件介绍

    一 官网说明 过滤器插件对事件执行中介处理.通常根据事件的特征有条件地应用过滤器. 以下过滤器插件在下面可用. Plugin Description Github repository aggrega ...

  5. logstash grok解析

    在<本地搭建ELK系统>中,在本地搭建了一个非常简单的ELK系统.其中logstash从本地日志文件中读取信息并交给elasticsearch. 然而直接把原始未加工的日志交给elasti ...

  6. logstash grok匹配

    2019独角兽企业重金招聘Python工程师标准>>> Grok debug请访问grok debugger 中文网 ### Logstash grok 匹配 JAVACLASS ( ...

  7. logstash grok mysql_【Logstash系列】使用Redis并自定义Grok匹配

    之前提到,用RabbitMQ作为消息队列.但是这个东西实在太过高精尖,不懂erlang不会调优的情况下,很容易挂掉--基本上我这里试验结果跑不了半小时日志传输就断了.所以改用简单易行的redis来干这 ...

  8. Logstash Grok详解

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

  9. 使用logstash csv filter插件时自动检测表头失败

    在logstash中使用csv filter解析表头时,一种方法是用coulmn直接把每个表头一一对应写进去,另一种方法是在csv插件中使用autdetect_column_names => & ...

最新文章

  1. 即将到来的金三银四,这10道springboot常见面试题你需要了解下
  2. 网久环境服务启动命令
  3. Python学习笔记-进度条
  4. 针对Chrome的css的hack写法
  5. TextView 显示内容时出现 ArrayIndexOutOfBoundsException 的解决方法(Android 4.1)
  6. Exchange 2013如何自建管理员角色
  7. 针对以下需求提供一个解决方案:在卡牛-信用卡管家APP里面,我们的用户需要一个寻找 附近银行网点/ATM 的功能
  8. cat命令详解_需要!Linux常用监视和故障排查命令详解
  9. Linux服务器版本鼠标,安装GPM给Linux虚拟控制台提供配置鼠标支持
  10. javascript中本地储存、离线缓存、地理定位、网络状态
  11. 圣诞限定快乐,送3本技术好书
  12. Javascript设计模式(五)代理模式
  13. activiti查询当前用户的任务列表
  14. 快速排序—三路快排 vs 双基准
  15. 输入一个字符串,内有数字和非数字字符,
  16. mysql +cobar_cobar
  17. Rocket - tilelink - Xbar
  18. java openoffic linux_怎样使用Java读取OpenOffice文档
  19. Unity和Easy AR制作一个AR的APP
  20. 破解水卡教程 超详细

热门文章

  1. 【项目分享~写给应届生的一篇文章】基于Web企业招聘网站 ~~ 登录注册设计
  2. 《商战之电商风云》观后感
  3. shinelon自动修复此计算机,炫龙 shinelonV5 Pro 笔记本改win7详细图文教程
  4. 为什么信而富显示服务器开小差,剖析:信而富12点后也没额度的真相!
  5. keil延时c语言程序设计,Keil C51程序设计中几种精确延时方法
  6. Windows 系统镜像下载地址
  7. Spring boot 缓存学习笔记
  8. 普通人“微创业”实例
  9. error: expected declaration or statement at end of input 解决方法
  10. 谁在说谎剧情详细介绍