0x01 前言

之前我在服务器上配置了Elastic Stack这个技术栈,经过2周的使用,真觉得用它来处理日志真是棒极了。

它不但可以处理nginx日志,还可以处理WAF、IDS甚至防火墙的日志都没问题。只要日志有固定的格式,几乎没有它处理不了的。

0x02 准备

首先要知道你现在所用的nginx日志格式,可以参考以下文章:

nginx日志格式错误修复

我的日志格式是:

生成之后是这样的:

然后需要准备ELK5,安装配置过程请参考以下文章:

安装配置Elastic Stack 5

0x03 匹配

我通过filebeat读取日志后传送至logstash进行处理,处理完成再保存在elasticsearch中。其中最重要的一步就是logstash的处理,我们需要根据日志的格式编写相关的匹配代码,以便logstash进行匹配处理。

在这里我使用过滤插件中的Grok插件,具体技术文档请点击以下链接:

Filter plugins » grok

你还需要以下这个网站对你所编写的过滤匹配代码进行debug:

grok debuger

我上面的日志的过滤代码如下:

如果一些顺利,在debuger中就可以生成正确的信息:

1480215162

你还需要了解相关的语法,这个可以通过以下链接获取:

grok-patterns

0x04 logstash

完成相关的过滤代码后,还需要将代码添加到logstash中。如果你依据我的安装过程安装了logstash,那么,你需要在以下文件夹新建文件:

里面应该有一个有配置监听信息的文件:

我们需要添加一个新的文件:

上面这个配置文件我匹配了5种我所使用的nginx日志格式,其中还有一下配置信息:

  • geoip:将用户IP进行分析,得出大概GPS位置、所属国家、城市、电信服务商等信息;
  • date:将日志中的时间作为logstash处理的时间;
  • useragent:可是分离出用户所用的浏览器、操作系统、UA等信息。

配置文件中还有以下这句判断:

因为我将各种各样的日志都通过logstash分析,所以在filebeat添加了自定义tags以便区分不同的log:

完成上面这一切后,请通过以下命令测试并重新加载logstash:

0x05 检查

重新加载的过程需要点时间,但完成后,即可通过kibana检查配置是否正确:

1480215163

0x06 结语

编写匹配代码是最麻烦的一步,要经过很多次的调整才能完美匹配。

3 条评论 / comments

  1. %{QS:ngx_ua} %{QS:ngx_referrer}%{BASE10NUM:request_time} %{BASE10NUM:upstream_response_time}

    注意全格与半格符号;另外需要注意字段之间的空格。

  2. 想请教一下这里怎么匹配,”Mozilla/5.0 (Linux; Android 9; V1831A Build/P00610; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/68.0.3440.91 Mobile Safari/537.36″ “-“0.002 0.001

    关键是后面的横线
    我的nginx上配置的是
    log_format main ‘$remote_addr – $remote_user [$time_local] “$request” ‘
    ‘$status $body_bytes_sent “$http_referer” ‘
    ‘”$http_user_agent” “$http_x_forwarded_for”‘
    ‘$request_time $upstream_response_time’;

    我这样匹配不行
    %{IPORHOST:client_ip} – %{USER:auth} [%{HTTPDATE:timestamp}] \”(?:%{WORD:verb} %{NOTSPACE:request}(?: HTTP/%{NUMBER:http_version})?|-)\” %{NUMBER:response} %{NUMBER:bytes} %{QS:referrer} %{QS:agent} \”(%{WORD:x_forword}|-)\” -(%{BASE16FLOAT:upstream_response_time}|-) %{BASE16FLOAT:request_time}

Comments are closed.