使用logstash中的grok插件解析apache日志输出至elasticsearch

在实际应用中,我们可能会对apache产生的请求访问日志进行解析,对其中的一些数据进行处理。我们可以使用Logstash中提供的grok插件(该插件是针对apache的日志,里面可以帮我们自动识别一些信息)对数据格式进行处理,并将数据输出到elasticsearch。

关于elk的搭建,可以参考这篇:kafka与elk整合搭建日志系统_QYHuiiQ的博客-CSDN博客

1.启动elasticsearch

由root切换至elasticsearch用户:elssearch(该用户在之前我们已经创建好了)

[elssearch@localhost elk-kafka]$ cd elasticsearch-6.6.0
[elssearch@localhost elasticsearch-6.6.0]$ cd bin
[elssearch@localhost bin]$ ./elasticsearch

启动成功,访问页面:

2.启动kibana:

[root@localhost elk-kafka]# cd kibana-6.6.0-linux-x86_64/bin
[root@localhost bin]# ./kibana

启动成功后访问5601端口:

3.配置logstash:

3.1我们要对apache的log进行解析,这里我就创建一个文件里面复制了一下apache格式的log(我这里的log存放路径:/usr/local/wyh/elk-kafka/apache-log/apachelog.txt)。

假设log中有一条记录:

192.168.184.128 - - [12/Apr/2019:16:47:37 -0400] Second:18 "POST /index/article?writer=wyh&articleid=jsd_kojb_91.43.68_2548_33_87_3849 HTTP/1.1" 200 658 "-" "Java/1.8.0_51"

3.2进入logstash的config目录下创建配置解析log的配置文件:

[root@localhost config]# vi wyh-apache-log.conf
input{
        file{              --从文件中读取
                path => "/usr/local/wyh/elk-kafka/apache-log/apachelog.txt"    --要解析的log路径
                type => "apachelog"          --自定义一个type
                start_position => "beginning"          --从文件起始位置读起
        }
}
filter{
        grok{           --logstash自带的filter插件,用来解析apache类型的Log
                patterns_dir => "/usr/local/wyh/elk-kafka/logstash-6.6.0/custom/patterns"     --前面我提供的log数据中的articleid这个字段中包含了数字、字母、下划线、圆点等复杂符号。grok中没有对应的正则,所以需要自定义一个正则。该配置指定了自定义正则所在的路径。(若你的Log中不需要自定义正则,可不添加此配置)
                match => {         --对log进行正则匹配
                        "message" => "%{IP:client_address} - - \[%{HTTPDATE:timestamp}\] Second:%{NUMBER:second} \"%{WORD:http_method} %{URIPATHPARAM:url}\?writer=%{WORD:writer}&articleid=%{ARTICLEID:articleid} HTTP/%{NUMBER:http_version}\" %{NUMBER:http_code} %{NUMBER:bytes} \"(?:%{URI:http_referer}|-)\" %{QS:java_version}"
                }
                remove_field => "message"          --上面一行对数据进行了拆分解析,此处就没必要再完整地显示一遍Log信息,所以可以移除掉message这个字段。
        }
}
output{
        elasticsearch{             --输出到elasticsearch中
                hosts => ["192.168.184.128:9200"]         --elasticsearch的ip及端口
                index => "wyh-apache-log"           --输出到哪个index
        }
}

(配置中不要写注释,因为它不识别,会报错)

上面的%{A:b}中A表示grok提供的已经定义好的正则名称,比如IP会自动匹配到IP格式的信息,NUMBER是匹配数字格式,WORD匹配字符串,QS匹配带引号的字符串。。。冒号后面的b表示将匹配得到的信息以什么字段名展示,这个是自己起的名字。在匹配的时候有些特殊符号是需要在前面加上一个\来转义的。如果字符串中含有特殊字符且没有双引号,没有空格时(如:https://www.google.com/),WORD是不能识别的(WORD只能识别字母和数字),而且不带双引号时,QS(含有双引号的字符串)也不能用,可以试一下NOTSPACE。如果是有特殊字符,且有空格,没有双引号的(如:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537)可以用GREEDYDATA。

如果是在filter中有If判断数据中含有某个字符串进行分别解析:

filter{
    if "xxxxxx" in [message]{
        grok{

       }
    }

}

如果是判断tag是解析失败的,tag是一个数组,所以也应该用"xxxx" in [tags]的格式:

output{
    if "_grokparsefailure" in [tags] {
      elasticsearch{
        hosts => []
        index => ""
      }


    }
}

​

grok提供的正则默认表达式详细信息:Logstash6中grok插件的常用正则表达式 - 云+社区 - 腾讯云

Logstash笔记(三)----Filter插件及grok的正则表达式来解析日志_清风明月的技术博客_51CTO博客

 3.3在3.2的配置中提到了自定义正则,patterns_dir是路径。我们在/usr/local/wyh/elk-kafka/logstash-6.6.0下创建目录:custom,在custom下创建文件patterns:

cd /usr/local/wyh/elk-kafka/logstash-6.6.0/custom
[root@localhost custom]# vi patterns

这里我们要自定义的是articleid字段的正则,所以就根据articleid的特征编辑正则:

[root@localhost custom]# cat patterns
ARTICLEID [a-z]{3}_[a-z]{4}_[0-9]{2}.[0-9]{2}.[0-9]{2}_[0-9]{4}_[0-9]{2}_[0-9]{2}_[0-9]{4}

前面的ARTICLEID是自定义的表达式名称,在filter匹配时直接使用这个名称。

如果自定义多个正则,那就换行另写。

3.4启动logstash:

[root@localhost logstash-6.6.0]# ./bin/logstash -f ./config/wyh-apache-log.conf

启动过程要稍微等一会儿。。。

3.5在kibana中创建一个刚才在配置文件中指定的index:

 

创建好之后查看刚才的log信息:

蓝色方框中的就是我们对Log解析之后的每一个属性的值,在elasticsearch中可以对这些属性进行操作分析等。

在测试的过程中可能遇到的问题:

1)如果遇到message没有解析成我们指定的字段,一般就是因为filter中的正则没有匹配对。

2)如果你只修改了logstash的配置,没有修改Log源文件,可能会导致kibana中刷新不出来,可以修改一下源文件中的内容再测试。

以上就完成了logstash对apache日志解析的过程。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

QYHuiiQ

听说打赏的人工资翻倍~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值