说明
在logstash中,已经集成了很多定义好的正则,也定义了很多模板我们只要用合适的值自己调整一下顺序就行了.
https://github.com/elastic/logstash/blob/v1.4.2/patterns/grok-patterns
在logstash目录下中可以看到定义好的正则和相关应用模板,
/usr/local/logstash-7.5.0/vendor/bundle/jruby/2.5.0/gems/logstash-patterns-core-4.1.2/patterns
![](https://img.haomeiwen.com/i18671034/4f27bef0d345f42e.png)
调试技巧
我们可以直接在kibana的Dev Tools 的Grok Debuger进行编写
![](https://img.haomeiwen.com/i18671034/8daabb90dabf6b2d.png)
我们直接在上面写入要切割的日志, 下面就用模板里面的值逐个匹配就行了
比如一个apache日志
日志格式是:
LogFormat "%t %{X-Forwarded-For}i %h %l %u \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %T %D" combined
生成的日志是:
[16/Apr/2020:00:00:36 +0800] - 10.10.1.117 - - "GET /index.php?module=customer_service_center&submod=workbench&method=checkTicketReply&tid=109481954821&is_reply=2&r=0.18905934667593716 HTTP/1.1" 200 43 "http://ccc.baidu.cn/in
dex.php?module=customer_service_center&submod=workbench&method=replyList&tid=109481954821&hasO=&editor=ck&cha=old" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.92 Safa
ri/537.36" 0 37070
匹配出的是grok是:
\[%{HTTPDATE:http_timestamp}\] %{DATA:X-Forwarded-For} %{IP:remote_addr} %{DATA:identd} %{DATA:remote_user} "(?:%{WORD:verb} %{NOTSPACE:request}(?: HTTP/%{NUMBER:httpversion})?|%{DATA:rawrequest})" %{NUMBER:status} %{NUMBER:bytes} %{QS:referrer} %{QS:agent} %{NUMBER:response} %{NUMBER:request_time:float}
异常的情况
一般这样对大部分的情况都是使用的,但是同样的格式日志有有一些是这样的
[16/Apr/2020:17:14:50 +0800] 192.168.200.201 192.168.10.97 - - "GET /index.php?method=login_action&mode=update HTTP/1.0" 200 - "http://ccc.baidu.cn/index.php?method=top§ion_id=marketing&main_url=" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/81.0.4044.92 Safari/537.36" 0 36419
其中一个bytes竟然是获取不到 -, 这样我们的正则匹配不到了
%{NUMBER:bytes}
这种情况下,我们可以添加自定义参数NUMBEROR (%{NUMBER}|-)然后用 %{NUMBEROR:bytes}来匹配就可以了
网友评论