GoAccess
GoAccess是一个基于终端的快速日志分析器。其核心思想是实时快速分析和查看Web服务器统计信息,而无需使用您的浏览器(如果您希望通过SSH快速分析访问日志,或者只是喜欢在终端中工作),终端输出是默认输出,但它能够生成完整的,独立的实时 HTML报告(非常适合分析,监控和数据可视化),以及a JSON和CSV报告。
数据持久性强,GoAccess能够通过磁盘上的B + Tree数据库逐步处理日志。
GoAccess是用C语言编写的,要运行它,你只需要将ncurses作为依赖项,它甚至还具有自己的RFC6455兼容Web Socket服务器。
跟踪提供请求所需的时间。如果您想跟踪减慢网站速度的网页,则非常有用。
GoAccess允许任何自定义日志格式字符串。预定义选项包括Apache,Nginx,Amazon S3,Elastic Load Balancing,CloudFront等。
所有面板和指标都定时在终端输出上每200毫秒更新一次,在HTML输出上每秒更新一次。
安装
yum install goaccess
如果提示错误:为仓库 ‘appstream’ 下载元数据失败 : Cannot prepare internal mirrorlist: No URLs in mirrorlist
1 2 3 cd /etc/yum.repos.d/sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-* sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*
修改goaccess配置文件
1 2 3 4 [root@VM-12-14-centos ~] goaccess: /usr/bin/goaccess /etc/goaccess /usr/share/man/man1/goaccess.1.gz vim goaccess.conf
1 2 3 time-format %H:%M:%S date-format %d/%b/%Y log-format %h - %^ [%d:%t %^]; "%r" %s %b "%R" - %^"%u" - %^ %T
real-time-html 用来使用实时刷新特性。
port 是用来和浏览器通信的,选一个没被占用的就行(别忘了在防火墙里开启端口)。
如果你不走 https 的话,ssl-cert,ssl-key,ws-url 都不是必需的。
output:存放 goaccess 的站点目录。
log-file:goaccess 的日志文件。
注意
三个 format 的设置要与 nginx 的设置一致
1 2 3 4 5 6 7 8 9 10 log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"' ; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for" ' '$connection $upstream_addr ' '$upstream_response_time $request_time' ;
log-format 与 access.log 的 log_format 格式对应,每个参数以空格或者制表符分割
1 2 3 4 5 6 7 8 9 10 11 12 13 14 %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 请求所花费的时间,单位秒 %^ 忽略这一字段
可以使用 nginx2goaccess.sh 将 nginx 日志格式格式化为 goaccess 能识别的日志格式,nginx2goaccess.sh
sh nginx2goaccess.sh '<log_format>' #log_format为你nginx.conf中配置的日志格式
1 2 bash nginx2goaccess.sh '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" "$http_x_forwarded_for" $connection $upstream_addr $upstream_response_time $request_time'
将上述格式填写到 goaccess 配置文件中,先重启 nginx
之后再重启 goaccess
即可。
1 2 3 time-format %T date-format %d/%b/%Y log_format %h - %^ [%d:%t %^] "%r" %s %b "%R" "%u" "%^" %^ %^ %^ %T
使用方法 冷日志分析
并不是实时数据,需要看的时候手动去生成对应的页面或者其他格式文件即可。
1 2 3 goaccess -a -d -f /var/log/nginx/access.log --log-format=COMBINED -o nginx.html
定时任务
可以通过定时任务更新输出html内容
1 2 3 4 5 6 7 LANG="zh_CN.UTF-8" goaccess -a -d -f /var/log/nginx/access.log --log-format=COMBINED -o nginx.html
1 2 3 4 5 chmod 755 /usr/local/goaccess/scripts/nginx.shcrontab -e 0 0 * * * /bin/bash /usr/local/goaccess/scripts/nginx.sh
实时日志查看
在goaccess.conf中,需要配置real-time-html true 、output 输出位置。
1 2 3 4 5 6 7 8 9 10 time-format %H:%M:%S date-format %d/%b/%Y log-format %h - %^ [%d:%t %^]; "%r" %s %b "%R" - %^"%u" - %^ %T real-time-html true port <port> ssl-cert <cert.crt> ssl-key <priv.key> ws-url wss://<your-domain>:<port> output /usr/local/src/goaccess/index.html log-file /usr/local/src/goaccess/goaccess.log
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 server { listen 80 default_server; listen [ : : ] : 80 default_server; server_name goaccess; #root /usr/share/nginx/html; root /usr/local/src/goaccess; # Load configuration files for the default server block. # include /etc/nginx/default.d
演示并不做权限拦截,如果要使用权限拦截可以使用htpassed
1 2 3 4 5 6 yum -y install httpd-tools htpasswd -c [passwfile] [username]
1 2 3 4 5 6 7 8 9 10 11 server { listen 443 ssl; location /goaccess { auth_basic