一、背景
研究了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种模式,即配置的正则。所以学习之前,不妨先去学习下正则表达式。
二、自测示例
下一章罗列了常用的一些正则,规则详情也有;在进行记忆学习前,我先展示下我自己的自测学习示例。
日志
我这边有一个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}
编写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
最后结果如下(截取了一部分):
{
"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",