利用goaccess实时监控nginx的访问日志

这篇文章主要写一下我在利用goaccess对nginx生成的访问日志时的经历。

最终会生成一个下面类似的网页:
images

 

我们在nginx配置文件中可以对总体的访问或单个项目的访问生成日志,我们可以对日志生成网页更加直观的查看访问信息。

这是我在nginx配置文件中的配置:

 

然后我们要安装goaccess

在安装之前我们要先安装基础环境

 

然后正式安goaccess

 

这里要注意的是,如果我们要用到https并且http请求都会跳转到https时,我们要在configure中添加一个–with-openssl不然我们使用https时ws会跳转到wss但是会被拒绝掉。

然后我们进入到nginx下的logs目录中。执行以下命令生成网页(report.html):

我们加–daemonize参数是为了后台执行,执行这个的前提是有–real-time-html这个参数。如果我们是https的还需要添加–ssl-cert=crt文件目录 –ssl-key=key文件目录这两个参数才可以实现wss

完成后我们就可以输入地址进行访问。

最后我们这个生成的网页并不想让所有人都看到,那我们可以设置一个密码,输入密码后才可以访问。这里我们利用htpasswd这个工具。

先进行安装yum -y install httpd-tools

然后设置用户名和密码,并把用户名、密码保存到指定文件中(这里生成的用户名为userTest,存放到nginx下的passwd文件中)

然后配置nginx中的访问:

至此,我们就完成了用goaccess对nginx日志的实现监控。

打开链接会首先让我们输入用户名和密码,然后就可以看到我们统计的信息了,并且是通过websocket连接,请求数据都会实时改变。
images

 

 

 

 

下面是日志格式配置设置。

 

 

配置文件介绍

打开

/usr/local/etc/goaccess/goaccess.conf

(这里要强调的是这个

goaccess.conf

配置文件的位置一定要搞清楚,我这里是 GoAccess 1.3 编译安装默认的位置),如果不确定位置可以使用 `whereis goaccess.conf’命令来查询具体位置)里面的最主要的几个配置为:

time-format%H:%M:%Sdate-format%d/%b/%Ylog-format网络上大部分的文章和介绍都只适合没任何修改的nginx日志格式,对自定义的log format都不怎么涉及。如果你采用的自定义的nginx日志格式,那么此处就需要特别注意,一旦log-format配置不对,goaccess分析的结果会差很大。

以我nginx日志格式为例:

log_format main ‘$server_name$remote_addr – $remote_user [$time_local] “$request” ”$status$body_bytes_sent “$http_referer” ””$http_user_agent” “$http_x_forwarded_for” ”$upstream_addr$request_time$upstream_response_time’;

按照goaccess预设的log format,这样的日志是没法分析的,所以我们需要自定义log format。

我的log format为:

log-format %^ %h %^ %^ [%d:%t %^] “%r” %s %b “%R” “%u” “%^” %^ %T %^

log-format参数说明

%t 匹配time-format格式的时间字段%d 匹配date-format格式的日期字段%h host(客户端ip地址,包括ipv4和ipv6)%r 来自客户端的请求行%m 请求的方法%U URL路径%H 请求协议%s 服务器响应的状态码%b 服务器返回的内容大小%R HTTP请求头的referer字段%u 用户代理的HTTP请求报头%D 请求所花费的时间,单位微秒%T 请求所花费的时间,单位秒%^ 忽略这一字段

为了设置正确的log format,踩了不少坑,先列出来避免大家重复碰到。

log format默认是按照空格分隔日志信息的,所以,对于包含了特殊字符如空格等信息的字段,必须包含在“”里面。如字段request http_user_agent等nginx日志格式里面,采用空格分隔,但是此处一定注意,只能用一个空格。当时我有个地方用了两个空格,直接导致goaccess结果出错。nginx日志中的每一个字段都要和log format中的一一对应,如果log format中不需要nginx中的某一个信息,则用%^跳过该信息。对于nginx日志中的每一个 “-“,log format都需要一个%^来跳过, 如果是“-”, 则用“%^”如果nginx日志信息中有”:” ,则需要在log format中也显示出来。例如nginx日志中$time_local就包含了”:”,所以在log format的相应位置也是 %d:%t%^

实例

下面是我目前使用的日志分析输出为 HTML 的命令行

/usr/local/bin/goaccess -f /home/wwwlogs/www.imydl.com.log -p /usr/local/etc/goaccess/gaccess.conf -a > /home/www/default/blog.html

下面是我目前使用的日志分析实时输出为 HTML 的命令行

/usr/local/bin/goaccess /home/wwwlogs/www.imydl.com.log -o /home/www/default/report.html –real-time-htm -p /usr/local/etc/goaccess/goaccess.conf

 

 

 

Leave a Reply

Your email address will not be published. Required fields are marked *