GoAccess分析Nginx日志access.log以html方式实时预览
如果您想要对 nginx 的日志进行一波简单又快速的分析,可以采用 GoAccess;
前提#
- GoAccess 官方站点 www.goaccess.cc/
- Nginx
1、安装 GoAccess#
[root@Centos ~]# yum install -y libmaxminddb-devel libncursesw5-dev ncurses-libs ncurses-devel openssl openssl-devel
[root@Centos ~]# yum install -y GeoIP GeoIP-devel GeoIP-data
[root@Centos ~]# wget http://tar.goaccess.io/goaccess-1.5.2.tar.gz --no-check-certificate
[root@Centos ~]# tar -xzvf goaccess-1.5.2.tar.gz
[root@Centos ~]# cd goaccess-1.5.2
# --with-openssl项开启openssl;使 GoAccess 与其 WebSocket 服务器之间的通信能够支持 OpenSSL
# --enable-geoip地理位置支持;依赖 MaxMind GeoIP 模块。 legacy 将使用原始 GeoIP 数据库
# --enable-utf8 宽字符支持;依赖 Ncursesw 模块;
[root@Centos goaccess-1.5.2]# ./configure --enable-utf8 --enable-geoip=legacy --with-openssl
[root@Centos goaccess-1.5.2]# make && make install
[root@Centos goaccess-1.5.2]# goaccess --version
GoAccess - 1.5.2.
For more details visit: https://goaccess.io/
Copyright (C) 2009-2020 by Gerardo Orellana
Build configure arguments:
--enable-utf8
--enable-geoip=legacy
--with-openssl
2、配置 Nginx 的日志格式#
# 定位到Nginx的主配置文件 在http里面定义一个日志格式
[root@Centos goaccess-1.5.2]# vim /etc/nginx/nginx.conf
log_format main_goaccess '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for" "$request_body"';
# 业务域名的Server配置里面使用对应的日志格式
假设我这里的 域名为 www.tacks.com
tacks.conf部分配置如下
listen 443 ssl;
server_name www.tacks.com;
access_log /home/s/logs/nginx/www.tacks.com-access.log main_goaccess;
3、配置 GoAccess 的日志解析格式#
- 编辑配置文件 追加下面配置 日志 / 日期 / 时间 格式
[root@Centos goaccess-1.5.2]# vim config/goaccess.conf time-format %H:%M:%S date-format %d/%b/%Y log-format %h %^[%d:%t %^] "%r" %s %b "%R" "%u"
4、Https 网站需要 ssl 支持#
- 需要配置下面两个参数(如果不需要则跳过)
--ssl-cert=/etc/nginx/certs/_.www.tacks.com.crt
--ssl-key=/etc/nginx/certs/_.www.tacks.com.key
5、配置 ws 获取实时数据#
- 让网站实时获取数据,需要设置
--ws-url
参数 - wss 协议实际是 websocket+SSL,就是在 websocket 协议上加入 SSL 层,类似 https (http+SSL)
- 这里可以采用 nginx 反向代理到内部的 goaccess 的端口上
# 在业务域名中,配置反向代理到内部的端口7890上
location /goaccess {
proxy_redirect off;
proxy_pass https://127.0.0.1:7890;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $http_host;
}
6、开启中文支持,编写启动脚本#
#!/bin/bash
LANG="zh_CN.UTF-8"
goaccess /home/s/logs/nginx/www.tacks.com-access.log -o /home/s/apps/tacks/public/report.html --real-time-html --ssl-cert=/etc/nginx/certs/_.www.tacks.com.crt --ssl-key=/etc/nginx/certs/_.www.tacks.com.key --ws-url=wss://www.tacks.com/goaccess --port=7890 --daemonize
7、执行脚本#
# 重启nginx
[root@Centos ~]# systemctl restart nginx
# 启动脚本
[root@Centos ~]# sh goaccess.sh
zh_CN.UTF-8
Daemonized GoAccess: 18860
# 查看端口服务
[root@Centos ~]# netstat -ntlp | grep go
tcp 0 0 0.0.0.0:7890 0.0.0.0:* LISTEN 18860/goaccess
8、HTML 实时预览#
9、命令行窗口执行#
goaccess -a /home/s/logs/nginx/www.tacks.com-access.log
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: