GoAccess分析Nginx日志詳解


一、為了提高 GoAccess 分析准確度,建議配置 nginx.conf 的 log_format 項如下:

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

$ wget http://tar.goaccess.io/goaccess-1.2.tar.gz
$ tar -xzvf goaccess-1.2.tar.gz
#安裝依賴
$ yum install GeoIP-devel
$ cd goaccess-1.2/
# --with-openssl項開啟openssl,HTTPS時需要
$ ./configure --enable-utf8 --enable-geoip=legacy --with-openssl
$ make
$ make install

安裝完成后,默認配置文件goaccess.conf放置於/usr/local/etc下,為了方便管理,使用mv /usr/local/etc/goaccess.conf /etc/命令將其移動到/etc目錄下

對配置文件做一些主要配置:

time-format %H:%M:%S
date-format %d/%b/%Y
log-format %h %^[%d:%t %^] "%r" %s %b "%R" "%u"

其中,log-format 與 access.log 的 log_format 格式對應,每個參數以空格或者制表符分割。參數說明如下:

%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  請求所花費的時間,單位秒
%^  忽略這一字段

查看 GoAccess 命令參數,如下:

$ goaccess -h
# 常用參數
-a --agent-list 啟用由主機用戶代理的列表。為了更快的解析,不啟用該項
-d --with-output-resolver 在HTML/JSON輸出中開啟IP解析,會使用GeoIP來進行IP解析
-f --log-file 需要分析的日志文件路徑
-p --config-file 配置文件路徑
-o --output 輸出格式,支持html、json、csv
-m --with-mouse 控制面板支持鼠標點擊
-q --no-query-string 忽略請求的參數部分
--real-time-html 實時生成HTML報告
--daemonize 守護進程模式,--real-time-html時使用

1、控制台模式

goaccess -a /usr/local/nginx/logs/access.log -p /etc/goaccess.conf

控制台下的操作方法:

F1   主幫助頁面
F5   重繪主窗口
q    退出
1-15 跳轉到對應編號的模塊位置 
o    打開當前模塊的詳細視圖
j    當前模塊向下滾動
k    當前模塊向上滾動
s    對模塊排序
/    在所有模塊中搜索匹配
n    查找下一個出現的位置
g    移動到第一個模塊頂部
G    移動到最后一個模塊底部

如果不修改配置文件/etc/goaccess.conf,輸入下面指令,然后選擇日志文件類型也可以:

[root@host1 logs]# goaccess -f access.log

Nginx日志是屬於Combined Log Format (XLF/ELF)類型的,所以我們選擇第三個,用上下光標移動,空格選中,回車確定。

 2、HTML模式

[root@host1 logs]# goaccess -a /usr/local/nginx/logs/access.log -p /etc/goaccess.conf  -o /usr/local/nginx/html/ao-access.html

這個分析報表是通過手動執行命令生成,所以需要實現 GoAccess 自動地創建報表

3、daemonize

GoAccess 已經為我們考慮到這點了,它可以以 daemonize 模式運行,並提供創建實時 HTML 的功能,只需要在啟動命令后追加--real-time-html --daemonize參數即可。

[root@host1 logs]# goaccess -a /usr/local/nginx/logs/access.log -p /etc/goaccess.conf  -o /usr/local/nginx/html/ao-access.html --real-time-html --daemonize
Daemonized GoAccess: 13647
[root@host1 logs]# netstat -anptu | grep goaccess
tcp        0      0 0.0.0.0:7890            0.0.0.0:*               LISTEN      13647/goaccess 

以守護進程啟動 GoAccess 后,使用 Websocket 建立長連接,它默認監聽 7890 端口,可以通過--port參數指定端口號。

如果站點啟用了 HTTPS,GoAccess 需要使用 openssl,在配置文件goaccess.conf中配置ssl-certssl-key項,並確保在安裝過程中 configure 時已添加--with-openssl項來支持 openssl 。當使用 HTTPS 后 Websocket 通信時也應該使用 wss 協議,需要將ws-url項配置為wss://www.domain.com。

4、生成json報告:

[root@host1 logs]# goaccess -f access.log -a -d -o json > report.json

5、生成CSV報表:

[root@host1 logs]# goaccess -f access.log -o csv > report.csv

由於nginx會自動壓縮日志,以下命令可以直接分析壓縮后的日志:

zcat access.log.*.gz | goaccess
#或者
zcat -f access.log* | goaccess

支持管道:

[root@host1 logs]# sed -n '/30\/May\/2018/,$p' access.log | goaccess -a
[root@host1 logs]# grep "May" access.log | goaccess -a

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM