一、简介

Grok是迄今为止使蹩脚的、无结构的日志结构化和可查询的最好方式。Grok在解析 syslog logs、apache and other webserver logs、mysql logs等任意格式的文件上表现完美。

Grok内置了120多种的正则表达式库,地址:https://github.com/logstash-plugins/logstash-patterns-core/tree/master/patterns。

二、入门例子

下面是一条tomcat日志:

83.149.9.216 - - [04/Jan/2015:05:13:42 +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"

从filebeat中输出到logstash,配置如下:

input {beats {port => "5043"}
}
filter {grok {match => { "message" => "%{COMBINEDAPACHELOG}"}}
}
output {stdout { codec => rubydebug }
}

fileter中的message代表一条一条的日志,%{COMBINEDAPACHELOG}代表解析日志的正则表达式,COMBINEDAPACHELOG的具体内容见:https://github.com/logstash-plugins/logstash-patterns-core/blob/master/patterns/httpd。解析后:

{"request" => "/presentations/logstash-monitorama-2013/images/kibana-search.png","agent" => "\"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\"","offset" => 325,"auth" => "-","ident" => "-","input_type" => "log","verb" => "GET","source" => "/path/to/file/logstash-tutorial.log","message" => "83.149.9.216 - - [04/Jan/2015:05:13:42 +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\"","type" => "log","tags" => [[0] "beats_input_codec_plain_applied"],"referrer" => "\"http://semicomplete.com/presentations/logstash-monitorama-2013/\"","@timestamp" => 2016-10-11T21:04:36.167Z,"response" => "200","bytes" => "203023","clientip" => "83.149.9.216","@version" => "1","beat" => {"hostname" => "My-MacBook-Pro.local","name" => "My-MacBook-Pro.local"},"host" => "My-MacBook-Pro.local","httpversion" => "1.1","timestamp" => "04/Jan/2015:05:13:42 +0000"
}

再比如,下面这条日志:

55.3.244.1 GET /index.html 15824 0.043

这条日志可切分为5个部分,IP(55.3.244.1)方法(GET)请求文件路径(/index.html)字节数(15824)访问时长(0.043),对这条日志的解析模式(正则表达式匹配)如下:

%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration}

写到filter中:

filter {grok {match => { "message" => "%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration}"}}
}

解析后:

client: 55.3.244.1
method: GET
request: /index.html
bytes: 15824
duration: 0.043

三、解析任意格式日志

解析任意格式日志的步骤:

  1. 先确定日志的切分原则,也就是一条日志切分成几个部分。
  2. 对每一块进行分析,如果Grok中正则满足需求,直接拿来用。如果Grok中没用现成的,采用自定义模式。
  3. 学会在Grok Debugger中调试。

下面给出例子,来两条日志:

2017-03-07 00:03:44,373 4191949560 [          CASFilter.java:330:DEBUG]  entering doFilter()2017-03-16 00:00:01,641 133383049 [    UploadFileModel.java:234:INFO ]  上报内容准备写入文件

切分原则:

2017-03-16 00:00:01,641:时间
133383049:编号
UploadFileModel.java:java类名
234:代码行号
INFO:日志级别
entering doFilter():日志内容

前五个字段用Grok中已有的,分别是TIMESTAMP_ISO8601NUMBERJAVAFILENUMBERLOGLEVEL,最后一个采用自定义正则的形式,日志级别的]之后的内容不论是中英文,都作为日志信息处理,使用自定义正则表达式子的规则如下:

(?<field_name>the pattern here)

最后一个字段的内容用info表示,正则如下:

(?<info>([\s\S]*))

上面两条日志对应的完整的正则如下,其中\s*用于剔除空格。

\s*%{TIMESTAMP_ISO8601:time}\s*%{NUMBER:num} \[\s*%{JAVAFILE:class}\s*\:\s*%{NUMBER:lineNumber}\s*\:%{LOGLEVEL:level}\s*\]\s*(?<info>([\s\S]*))

正则解析容易出错,强烈建议使用Grok Debugger调试,姿势如下。

四、参考资料

  1. plugins-filters-grok
  2. Parsing Logs with Logstash

ELK日志处理之使用Grok解析日志相关推荐

  1. java使用grok解析日志文件

    在项目中会产生大量的日志以方便问题跟踪,有时需要统计分析系统运行期间的日志,例如:分析系统使用情况,使用人数,系统错误信息等等.根据不同的日志类别,生成可视化图表展示,所以就需要需要对日志进行处理,将 ...

  2. python日志分析库_python高效解析日志入库

    python脚本解析日志文件入库一般有三个重要的步骤:读文件.解析文件.入库.在这三个方面下功夫,可确保我们获得最优的性能(这里不讨论并发) 1 读文件:一次读一行,磁盘IO太多,效率低下:一次性读如 ...

  3. 日志 note_深入源码解析日志框架Log4j2(二)

    异步 AsyncAppender ​ log4j2突出于其他日志的优势,异步日志实现.我们先从日志打印看进去.找到Logger,随便找一个log日志的方法. public void debug(fin ...

  4. 在Java中使用Grok解析日志

    1.引入maven依赖 <dependency><groupId>io.krakens</groupId><artifactId>java-grok&l ...

  5. java怎么连elk_从Java应用程序登录到ELK而无需解析日志

    我想将日志从Java应用程序发送到ElasticSearch,传统方法似乎是在运行应用程序的服务器上设置Logstash,并使用logstash解析日志文件(使用正则表达式-!)并将其加载到Elast ...

  6. elk系列7之通过grok分析apache日志

    preface 说道分析日志,我们知道的采集方式有2种: 通过grok在logstash的filter里面过滤匹配. logstash --> redis --> python(py脚本过 ...

  7. filebeat 解析日志 并发送到Elasticsearch

    起先,是出于了解我的网站逐步前行STEP的访问情况而做一个Nginx日志统计分析的功能,首选的就是ELK,但是,由于Logstash占用内存和CPU占有率都不是我的小服务器能承受的,转而将logsta ...

  8. 比 ELK 更简洁、高效!企业级日志平台后起之秀 Graylog!

    欢迎关注方志朋的博客,回复"666"获面试宝典 当我们公司内部部署很多服务以及测试.正式环境的时候,查看日志就变成了一个非常刚需的需求了. 是多个环境的日志统一收集,然后使用 Ng ...

  9. Centos7下使用ELK(Elasticsearch + Logstash + Kibana)搭建日志集中分析平台

    Centos7下使用ELK(Elasticsearch + Logstash + Kibana)搭建日志集中分析平台 日志监控和分析在保障业务稳定运行时,起到了很重要的作用,不过一般情况下日志都分散在 ...

最新文章

  1. VTK:演示在多边形数据上使用裁剪用法实战
  2. CSS 制作手风琴导航
  3. dropout为什么有效
  4. python安装依赖比较慢的解决方法
  5. Ubuntu MySQL 重新安装
  6. 对TRIM SCSI命令的一些分析
  7. JavaScript之全局函数详解
  8. Word绘制跨行表格
  9. python爬知识星球付费数据_Python 爬取知识星球数据
  10. tensorflow中的tf.get_variable
  11. 鼠标测试软件m,[论坛]魔技无线激光鼠标测试心得(二)
  12. windows11桌面删除ie图标
  13. element-ui的upload 上传组件 照片墙当超过限定图片后隐藏上传按钮
  14. 批量删除电脑或手机中的空文件夹
  15. 伤疤好了有黑印怎么办_疤痕留下黑印怎么办
  16. 什么是DDOS攻击?怎么抵抗DDOS攻击?
  17. T细胞培养、分离方法大比拼
  18. html美食网站源码
  19. Android手电筒介绍
  20. 【大数据】快速了解大数据计算服务

热门文章

  1. 电巢:2022年半导体业国产替代现状(附产业图谱1000+企业名单)
  2. 西班牙语常用单词(muy bien)
  3. 广州哪个大学大一计算机学ps,紧急!广东12所“野鸡大学”名单曝光!广州人千万别上当!...
  4. 在计算机软件中 BIOS的中文意思是,电脑bios是什么意思
  5. 直线的参数方程ABC【基础中级高阶辅导】
  6. 64位环境AUTO_FILTER和INSO_FILTER失效的问题
  7. 从零学习gitHub (一)
  8. unity Toggle Groud
  9. Google面试官亲授Java面试课程
  10. javascript短路运算