您的位置:首页 > 运维架构 > Nginx

nginx 日志分析工具goaccess的使用以及碰到的坑

2016-01-16 11:00 706 查看
1, goaccess 的介绍和安装

这块网上内容一大堆,就无需再多讲了,我是在centos下直接用yum安装,安装后goaccess的配置文件会在/etc/goaccess.conf

2, goaccess使用

在存放日志文件的目录下,直接goaccess -f xxx.log 即可。 goaccess使用的相关参数请参考官方文档http://www.goaccess.io/man 或者man goaccess



3, goaccess的配置文件介绍

打开/etc/goaccess.conf,里面的最主要的几个配置为:

(1) time-format %H:%M:%S

(2) date-format %d/%b/%Y

(3) log-format

4, 在使用goaccess分析nginx日志时碰到的坑

网络上大部分的文章和介绍都只适合没任何修改的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,踩了不少坑,先列出来避免大家重复碰到。

(1) log format默认是按照空格分隔日志信息的,所以,对于包含了特殊字符如空格等信息的字段,必须包含在“”里面。如字段request http_user_agent等

(2) nginx日志格式里面,采用空格分隔,但是此处一定注意,只能用一个空格。当时我有个地方用了两个空格,直接导致goaccess结果出错。

(3) nginx日志中的每一个字段都要和log format中的一一对应,如果log format中不需要nginx中的某一个信息,则用%^跳过该信息。

(4) 对于nginx日志中的每一个 -, log format都需要一个%^来跳过, 如果是“-”, 则用“%^”

(5) 如果nginx日志信息中有:, 则需要在log format中也显示出来。例如nginx日志中$time_local就包含了:,所以在log format的相应位置也是 [%d:%t %^]

希望这些能帮助使用goaccess的朋友。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: