在elk+filebeat都安装好,且明白了基本流程后,主要的就是写logstash的filter了,以此来解析特定格式的日志

logstash的filter是用插件实现的,grok是其中一个,用来解析自定义结构的日志,就是说可以完全自定义的去解析

grok的语法是%{pattern:field}

pattern是指模板(或者说是类型),logstash内置了很多,也可以自定义(用正则)

field是指解析后的键值中的键,当然值就是从日志解析出来的内容

(无论用什么pattern解析到elasticsearch默认都是用string存储,可以通过%{pattern:field:int}将之转换为number类型就可以进行加减计算了,只支持int和float)

比如,一个日志文件中是序号+ip,这样

1 127.0.0.1
2 127.0.0.2
3 127.0.0.3

filter就可以这样写(input省略了,肯定是从filebeat来的,output中指定index,方便测试)

filter {grok {match => { "message" => "%{NUMBER:myid} %{IP:myip}"}}
}
output {elasticsearch {hosts => "localhost"index => "mytest"}
}

那么日志到 elasticsearch中,就是这样:

{..."hits" : {..."hits" : [ {..."_source" : {"message" : "1 127.0.0.1",..."myid" : "1","myip" : "127.0.0.1"}}, {..."_source" : {"message" : "2 127.0.0.2",..."myid" : "2","myip" : "127.0.0.2"}}, {..."_source" : {..."myid" : "3","myip" : "127.0.0.3"}} ]}
}

kibana中的效果

grok的基础用法就是这样了,一般来说内置的pattern就够用了

更多pattern可以看https://github.com/logstash-plugins/logstash-patterns-core/blob/master/patterns

像IP、NUMBER这样的基本pattern位于grok-patterns中,常用的有:

INT int类型
NUMBER 数字
DATA 数据,可以对应字符串
GREEDYDATA 数据,可以对应字符串,贪婪匹配
QUOTEDSTRING 带引号的字符串,可以简写为QS
WORD 一个词
IP ip地址,v4 或 v6
DATE 日期
TIME 时间
DATESTAMP 日期+时间
PATH 系统路径
HOSTNAME 计算机名
MAC mac地址
UUID uuid
LOGLEVEL 日志等级
EMAILADDRESS email地址

另外,还有可以直接用的模板集合,比如官方文档中的例子:

filter {grok {match => { "message" => "%{COMBINEDAPACHELOG}"}}
}

这个COMBINEDAPACHELOG就是一个内置的集合,这种集合还有很多,也在上面那个链接中,COMBINEDAPACHELOG就位于httpd,它的定义是:

COMBINEDAPACHELOG %{HTTPD_COMBINEDLOG}
HTTPD_COMBINEDLOG %{HTTPD_COMMONLOG} %{QS:referrer} %{QS:agent}
HTTPD_COMMONLOG %{IPORHOST:clientip} %{HTTPDUSER:ident} %{HTTPDUSER:auth} ...

(HTTPD_COMMONLOG的定义有点长,就省略了~~)

当日志的结构比较多,就需要自定义为模板集合,方便管理(自定义模板是一样的方式,感觉没必要,用内置的组合成自己的集合就行了)

mkdir -p /etc/logstash/patterns

vi /etc/logstash/patterns/test.conf

MYPATTERN %{NUMBER:myid} %{IP:myip}

filter改为

filter {grok {patterns_dir => ["/etc/logstash/patterns"]match => { "message" => "%{MYPATTERN}"}}
}

测试下,效果当然跟上面是一样的。

还有一点,pattern本质都是正则,%{}之间的空格不是结构要求,而是因为日志就是空格分隔的,如果日志都用空格和-来分隔,那就是:

MYPATTERN %{TIME:mytime} - %{DATA:mythread} - %{LOGLEVEL:mylevel} - %{DATA:myclass} - %{GREEDYDATA:myinfo}

特别说明一个情况,java中log4j的日志会出现日志级别ERROR和DEBUG后面一个空格,而其他INFO那些后面两个空格

原因应该是ERROR和DEBUG比INFO那些多一个字母,为了对齐,这种情况难在不知道以致浪费时间到处查解析正确的原因,知道了当然就简单了

%{LOGLEVEL:mylevel}  %{DATA:myclass}
改为
%{LOGLEVEL:mylevel}\s{1,2}%{DATA:myclass}

over

转载于:https://www.cnblogs.com/toSeek/p/6117845.html

logstash filter grok 用法相关推荐

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

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

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

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

  3. Logstash:Grok filter 入门

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

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

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

  5. logstash filter 过滤器详解

    一.grok 正则捕获插件 grok是一个十分强大的logstash filter插件,他可以通过正则解析任意文本,将非结构化日志数据解析成结构化和方便查询的结构.是目前logstash 中解析非结构 ...

  6. logstash之grok过滤

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

  7. Logstash 配置文件 Grok 语法

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

  8. 简述angular中constant和$filter的用法

    这里是修真院前端小课堂,每篇分享文从 [背景介绍][知识剖析][常见问题][解决方案][编码实战][扩展思考][更多讨论][参考文献] 八个方面深度解析前端知识/技能,本篇分享的是: [简述angul ...

  9. python怎么用lambda和map函数_Python之lambda匿名函数及map和filter的用法

    现有两个元组(('a'),('b')),(('c'),('d')),请使用python中匿名函数生成列表[{'a':'c'},{'b':'d'}] t1 = (('a'), ('c')) t2 = ( ...

最新文章

  1. 2020腾讯广告算法大赛:赛题理解与解题思路
  2. 什么是C ++中的“-gt;”运算符?
  3. Scala(三):类
  4. FFmpeg再学习 -- FFmpeg+SDL+MFC实现图形界面视频播放器
  5. 微信小程序_wxml学习
  6. IT真的很重要,还是会被边缘化?
  7. centos 安装 MatConvNet (gpu)
  8. TreeCtrl 查找功能的最简单实现
  9. [7.14更新日志]CRP编译缓存和海外构建让编译健步如飞!
  10. 无法打开计算机的组策略,win7系统电脑本地组策略打不开无法运行的解决方法...
  11. 终于有人对语音技术来了次彻头彻尾的批判!
  12. Tomcat环境部署以及tomcat多实例搭建(同一台机器)
  13. 多媒体数据处理实验1:算术编码
  14. 手机当台式电脑摄像头
  15. 海思vo 分屏显示总结
  16. webView.addJavascriptInterface 用法
  17. pdf根据书签创建目录结构(方便查看各个主题的页码分布)pdf_xchange
  18. 小孩增高的主要方式:足量动物脂肪;去除大豆;去除植物油;备孕6个月饮食
  19. python模拟鼠标键盘点击,简单自动化动物餐厅
  20. TL431的应用及应用仿真

热门文章

  1. QNNPACK高性能前向内核库全面剖析——引言篇
  2. 查找和为定值的两个数—Leetcode1
  3. pixhawk篇之坐标系转化,相关转化矩阵知识,算法截取
  4. 机器学习部分国内牛人
  5. string 类的初始化和赋值(程序成长之路的一颗米)
  6. EXECUTE IMMEDIATE用法小解
  7. 从源代码解读spring之DataSource实现和FactoryBean模式(JndiObjectFactoryBean)
  8. csharp attributes
  9. 子类能否访问或覆盖父类的private方法
  10. aop-xml-环绕增强