本文主要是介绍【ELK之logstash】 grok入门:自测实例+常用正则(grok-patterns),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一、背景
研究了grok几天,虽然知识还是很浅薄,但还是在这里做个总结。
场景
在使用logstash进行日志收集工作的时候,filter是个很重要的插件,而其中的Grok能很好的解析日志。
logstash教程:https://blog.csdn.net/qq_34646817/article/details/81232083
grok教程:https://blog.csdn.net/qq_34646817/article/details/81232121#t1
基础知识
grok作为解析日志的插件,内含120种模式,即配置的正则。所以学习之前,不妨先去学习下
正则表达式https://deerchao.cn/tutorials/regex/regex.htm
Gork基础:
Gork支持 预置正则、自定义正则、插件过滤、Ruby代码过滤。性能应该是依次递减。
写Gork正则基本套路:
至少打开3个网页对照:
1.在线debug:http://grok.51vagaa.com/
支持自定义正则,修改后自动执行。如果经常写gork建议自己搭建一个debugger服务自己用。
2.Grok预定义正则含义:
https://github.com/logstash-plugins/logstash-patterns-core/tree/master/patterns
不想理解去自行百度查预置正则含义吧:https://blog.csdn.net/cai750415222/article/details/86614854
3.最基础的是正则符号含义API:
正则表达式https://deerchao.cn/tutorials/regex/regex.htm
http://www.net-add.com/a/zidonghuayunwei/rizhifenxi/2018/0717/77.html
4.在debugger网页尽情尝试吧,实践出真理。
Tips:
不要急慢慢来就不会被逼疯,如果现在很暴躁建议晚点或者明天再来debug..哈哈 本人死磕5个小时就一个简单的log匹配,硬是没搞懂,第二天用debugger一下就明白后总结的经验。
以下是Copy他人的使用示例:
二、自测示例
下一章罗列了常用的一些正则,规则详情也有;在进行记忆学习前,我先展示下我自己的自测学习示例。
日志
我这边有一个log4j的日志,部分展示如下
[2018-07-10T16:22:30,001] AbstractBeanFactory(doGetBean:248): Returning cached instance of singleton bean 'mainCtl'
[2018-07-10T16:22:30,007] MainCtl(doControl:52): current tradecode:trigger_timer,flowsn:1
[2018-07-10T16:22:30,008] FlowParser(getFlowInfo:462): debugow:C:\Users\61661\Downloads\tinyWebDemo\tinyWebDemo1\src\main\resources\flow\trigger_timer.flow
[2018-07-10T16:22:30,009] MainCtl(doControl:60): flowInfos:{1=id:1,name:script}
[2018-07-10T16:22:30,011] AbstractBeanFactory(doGetBean:248): Returning cached instance of singleton bean 'enumTools'
[2018-07-10T16:22:30,013] AbstractBeanFactory(doGetBean:248): Returning cached instance of singleton bean 'jsDemo'
[2018-07-10T16:22:30,013] JsDemo(init:18): js demo init
[2018-07-10T16:22:30,019] TinyLog(debug:17): [null-trigger_timer] do function trigger_timer_1
[2018-07-10T16:22:30,019] TinyLog(info:21): [null-trigger_timer] start timer......
[2018-07-10T16:22:30,020] MainCtl(doControl:103): :2ms
grok配置
grok的编写配置虽然不难,但是很容易出错,要善于学会使用grok debugger来测试。
这边给一个中文版的测试网站(英文的要翻墙):http://grok.qiexun.net/
测试结果如下图,表达式为:
\[%{TIMESTAMP_ISO8601:logdate}\] %{WORD:AA}\(%{WORD:BB}:%{WORD:BB}\): %{GREEDYDATA:C}
1
编写conf文件
说明:以下命令根据自己的路径进行调整
当前目录下编写conf文件
input {
file {
#日志所在目录
path => ["/opt/data/test.log"]
type => "system"
#从文件开始的地方读
start_position => "beginning"
#这个是我爬过的坑 T.T ,写上下面的这段,反复重启的时候,才会从文件开始的地方读
sincedb_path => "/dev/null"
}
}
filter {
grok {
match => { "message" => "\[%{TIMESTAMP_ISO8601:logdate}\] %{WORD:AA}\(%{WORD:BB}:%{WORD:BB}\): %{GREEDYDATA:C}" }
}
date {
match => [ "logdate", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ]
}
}
output{
stdout{
codec=>rubydebug{}
}
}
logstash 解析
执行命令
/opt/elk/logstash-6.2.2/bin/logstash -f test.conf
1
最后结果如下(截取了一部分):
{
"host" => "hadoop02",
"message" => "[2018-07-10T16:22:30,019] TinyLog(debug:17): [null-trigger_timer] do function trigger_timer_1",
"@version" => "1",
"logdate" => "2018-07-10T16:22:30,019",
"AA" => "TinyLog",
"tags" => [
[0] "_dateparsefailure"
],
"C" => "[null-trigger_timer] do function trigger_timer_1",
"BB" => [
[0] "debug",
[1] "17"
],
"path" => "/opt/data/test.log",
"@timestamp" => 2018-08-01T16:43:18.303Z,
"type" => "system"
}
{
"host" => "hadoop02",
"message" => "[2018-07-10T16:22:30,019] TinyLog(info:21): [null-trigger_timer] start timer......",
"@version" => "1",
"logdate" => "2018-07-10T16:22:30,019",
"AA" => "TinyLog",
"tags" => [
[0] "_dateparsefailure"
],
"C" => "[null-trigger_timer] start timer......",
"BB" => [
[0] "info",
[1] "21"
],
"path" => "/opt/data/test.log",
▽ "@timestamp" => 2018-08-01T16:43:18.303Z,
"type" => "system"
}
{
"host" => "hadoop02",
"message" => "[2018-07-10T16:22:30,020] MainCtl(doControl:103): :2ms",
"@version" => "1",
"logdate" => "2018-07-10T16:22:30,020",
"AA" => "MainCtl",
"tags" => [
[0] "_dateparsefailure"
],
"C" => ":2ms",
"BB" => [
[0] "doControl",
[1] "103"
],
"path" => "/opt/data/test.log",
"@timestamp" => 2018-08-01T16:43:18.303Z,
"type" => "system"
}
三、Gork常用的正则
说明:左边是名称,右边的是正则,意义都有在注解里面说明
当然,你自己测一下就知道了。
https://github.com/logstash-plugins/logstash-patterns-core/tree/master/patterns
或
http://grok.51vagaa.com/patterns#
这篇关于【ELK之logstash】 grok入门:自测实例+常用正则(grok-patterns)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!