对于想在短时间内快速的生成小站点访问情况的统计数据,一般会选择使用sed
、awk
、grep
三剑客,但是对于要对数据的展示就需要填充到已有开发面板中,比较耗时费力,当然对于也可以使用ELK
/EFK
专业日志分析平台来做,但搭建缓慢,服务笨重,不是小站点的首选,这里介绍一个使用C
语言研发的轻量级日志分析工具GoAccess[1],性能稳定,可作为小站点日志分析统计的首选。
GoAccess随着不断地版本迭代,其支持的功能也越来与丰富、越来越能满足基本的需求,下面列举几个基础功能,更多可参见GoAccess Feature[2]
ncurses
库安装goaccess仅有需要依赖的ncurses库
sudo apt-get install libncursesw5-dev
当需要把Nginx访问日志中的geoip给统计导入到新的文件中时,需要GeoIP库的支持
$ wget https://github.com/maxmind/geoip-api-c/releases/download/v1.6.11/GeoIP-1.6.11.tar.gz
$ tar -xzvf GeoIP-1.6.11.tar.gz
$ cd GeoIP-1.6.11
$ ./configure
$ make
$ make install
完成Goaccess依赖的环境之后,开始构建goacess工具
wget http://tar.goaccess.io/goaccess-1.2.tar.gz
tar xf goaccess-1.2.tar.gz && cd goaccess-1.2/
./configure --enable-utf8 --enable-geoip=legacy --with-openssl
make && make install
我们使用Nginx
的日志为例,通过解析nginx访问日志进行数据的展示,为了能准确的获取数据,下面提供一下测试时使用的nginx日志格式,log_format
配置在nginx.conf
的http
配置段中:
# 配置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_body"';
下面配置安装好GoAccess之后的配置文件:
root@master:/webserver/nginx18# cat /etc/goaccess.conf |egrep -v '^$|^#'
time-format %H:%M:%S
date-format %d/%b/%Y
log-format %h %^[%d:%t %^] "%r" %s %b "%R" "%u"
...
# 上面的三行添加到配置文件中,其余的位置不需要改动
下面对部分的日志格式选项进行说明,更多的选项的使用可以直接参考官方文章自定义日志格式部分[3]
%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 请求所花费的时间,单位秒
%^ 忽略这一字段
在配置好之后,我们启动一个使用该nginx日志格式的服务proxy.devopsman.cn
,配置文件如下:
server {
server_name proxy.devopsman.cn;
listen 80;
access_log logs/proxy.devopsman.cn.log;
location / {
proxy_set_header Host $host;
proxy_set_header X-Real_IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://192.168.99.1;
}
}
通过命令行进行访问该服务,并且启动GoAccess的命令行控制台模式
curl http://proxy.devopsman.cn
goaccess -a -d -f ./proxy.devopsman.cn.log -p /etc/goaccess.conf
root@master:/webserver/nginx18/logs# pwd
/webserver/nginx18/logs
goaccess -a -d -f ./proxy.devopsman.cn.log -p /etc/goaccess.conf -o ${proxy.devopsman.cn}/index.html # goaccess分析的文件输出到proxy.devopsman.cn的目录下,通过服务直接访问
goaccess -a -d -f ./proxy.devopsman.cn.log -p /etc/goaccess.conf -o ${proxy.devopsman.cn}/index.html --real-time-html --daemonize
# 也可以通过以上命令实时分析日志文件,渲染到html页面
[1]
Goaccess: https://goaccess.io/
[2]
GoAccess Feature: http://goaccess.io/features
[3]
GoAccess custom-log: http://goaccess.io/man#custom-log