关于goAccess
GoAccess 是一款实时、快速的日志分析工具,专门设计用于分析Web服务器日志,特别是Nginx日志。
安装
(1)准备相关依赖
# Missing development libraries for ncursesw
# centOS
yum install -y ncurses-devel
# Ubuntu
apt-get install libncurses5-dev# Missing development files for libmaxminddb library.
# centOS
yum install -y libmaxminddb-devel
# Ubuntu
apt-get install libmaxminddb-dev
(2)下载&编译
# 下载
wget https://tar.goaccess.io/goaccess-1.9.2.tar.gz
# 解压
tar -xzvf goaccess-1.9.2.tar.gz
# 进入目录
cd goaccess-1.9.2/
# 预编译
./configure --enable-utf8 --enable-geoip=mmdb --prefix=/opt/goaccess
# 编译
make
# 安装
make install
(3)编辑配置文件goaccess.conf,添加如下内容
# 将配置文件放在etc目录下
cp /usr/local/goaccess-1.7/config/goaccess.conf /etc/goaccess.conf
vim /etc/goaccess.conftime-format %H:%M:%S
date-format %d/%b/%Y
log_format %h - %^ [%d:%t %^] "%r" %s %b "%R" "%u" "%^" "%T"
(4)增加全局变量,中文启动
cp /path/to/goaccess/bin/goaccess /usr/bin/
LANG="zh_CN.UTF-8" goaccess -f /path/to/nginx/access.log -p /etc/goaccess.conf
配合Nginx使用
(1)监控方式1:直接读取日志
goaccess path/to/nginx/access.log
(2)监控方式2:生成HTML报告
goaccess path/to/nginx/access.log -o report.html --log-format=COMBINED
--log-format
参数用于指定日志格式,对于Nginx的默认访问日志格式,使用 COMBINED
通常是最合适的,因为它匹配Apache的combined日志格式,也是Nginx默认日志格式。
高级用法
-a 参数表示启用实时分析模式,适合监视实时日志流。
-d 参数开启DNS解析,显示主机名而非IP地址。
-f 参数指定日志文件路径。
-p 参数指定GoAccess配置文件路径。
-t 和 -T 分别显示表格和树状图统计。
-r 参数可以接受管道输入,例如 cat access.log | goaccess - 。
(3)实时生成HTML报告
vim /etc/goaccess.conf
# 291行左右,可通过 /"关键词"进行搜索定位
daemonize true
# 310行左右:
real-time-html true#直接启动
LANG="zh_CN.UTF-8" goaccess -f /path/to/nginx/access.log -p /etc/goaccess.conf -o /path/to/goaccess-1.7/report.html
默认goaccess在开启实时real-time-html后会监听端口7890的websocket,如果服务器不允许请求7890端口,你就看不到那个页面是实时更新的——你会发现访问的页面最后更新时间始终不变
或者改用 crontab,定时更新report.html
vim /etc/crontab# 定时生成nginx监控HTML——goaccess
* * * * * goaccess -p /etc/goaccess.conf /var/log/nginx/access.log -o /opt/goaccess-1.9.2/report.html
(4)自定义nginx日志格式&goAccess适配
# goaccess默认的日志格式与nginx的默认格式一致%h %^[%d:%t %^] "%r" %s %b "%R" "%u"log_format combined '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent"';
自定义日期格式:增加一个响应时间
修改nginx.conf文件:文件中的http下增加或修改如下配置
log_format myfmt '$remote_addr - $remote_user [$time_local] "$request"''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" $request_time'
access_log path/to/access.log myfmt;
修改goAccess配置文件:
vim /etc/goaccess.conf# 添加以下内容
time-format %H:%M:%S
date-format %d/%b/%Y
log_format %h - %^ [%d:%t %^] "%r" %s %b "%R" "%u" %T# 重启goaccess
LANG="zh_CN.UTF-8" goaccess -f /path/to/nginx/access.log -p /etc/goaccess.conf -o /path/to/goaccess-1.9/report.html
- 变量说明
1.$remote_addr 与$http_x_forwarded_for 用以记录客户端的ip地址;2.$remote_user :用来记录客户端用户名称;3.$time_local : 用来记录访问时间与时区;4.$request : 用来记录请求的url与http协议;5.$status : 用来记录请求状态;成功是200,6.$body_bytes_sent :记录发送给客户端文件主体内容大小;7.$http_referer :用来记录从那个页面链接访问过来的;8.$http_user_agent :记录客户端浏览器的相关信息;
(5)nginx转发
# 配置文件中监听端口,对请求进行转发server{listen 33503;server_name localhost;# report.html路径location /report.html {alias /opt/goaccess-1.9.2/report.html;}}
(5)访问nginx ip + 端口 / report.html