使用GoAccess構建實時日志分析系統
一、GoAccess基本概述
GoAccess 是一款用於Apache或者Nginx的命令行日志分析器和交互式查看器。使用這款工具,你不僅可以瀏覽到之前提及的相關數據,還可以通過分析網站服務器日志來進一步挖掘數據。這一切都是在一個終端窗口實時輸出並且可以輸出在web端可視化的顯示信息。
二、GoAccess主要功能
- 統計概況,流量消耗等
- 訪客排名
- 動態Web請求
- 靜態web請求,如圖片、樣式表、腳本等。
- 來路域名
- 404 錯誤
- 操作系統
- 瀏覽器和搜索引擎
- 主機、DNS和ip地址
- HTTP 響應代碼
- 引薦網站
- 鍵盤布局
- 自定義顯示
- 支持超大日志(分析速度很快)
三、GoAccess用法介紹
GoAccess的基本語法如下
goaccess [ -b ][ -s ][ -e IP_ADDRESS][ - a ] <-f log_file >
參數說明:
-f – 日志文件名
-b – 開啟流量統計,如果希望加快分析速度不建議使用該參數
-s – 開啟HTTP響應代碼統計
-a – 開啟用戶代理統計
-e – 開啟指定IP地址統計,默認禁用
-p -指定goacces用戶配置文件路徑
安裝GoAccess
[root@web01 ~]# wget http://tar.goaccess.io/goaccess-1.2.tar.gz
[root@web01 ~]# tar -xzvf goaccess-1.2.tar.gz
[root@web01 ~]# cd goaccess-1.2/
[root@web01 ~]# ./configure --enable-utf8 --enable-geoip=legacy
configure: error:
*** Missing development files for the GeoIP library
[root@web01 ~]# yum install libncursesw5-dev #缺少的依賴包
[root@web01 ~]# yum install ncurses-devel #缺少的依賴包
[root@web01 ~]# yum install GeoIP GeoIP-devel GeoIP-data #缺少的依賴包
[root@web01 ~]# ./configure --enable-utf8 --enable-geoip=legacy
[root@web01 ~]# make & make install
配置
1.安裝完成后,默認將配置文件goaccess.conf
放置於/usr/local/etc
路徑,為了統一管理,使用mv /usr/local/etc/goaccess.conf /etc/
命令將其移動到/etc
目錄下。
2.對配置文件做一些主要配置:
[root@web01 log]# cd /var/log
[root@web01 log]# goacess -f /var/log/nginx/access.log
[root@web01 log]# which goaccess
/usr/local/bin/goaccess
[root@web01 log]# vim /usr/local/etc/goaccess.conf
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.當前日志分析結果
[root@web01 log]# goaccess -f /var/log/nginx/access.log -p /usr/local/etc/goaccess.conf
控制台下的操作方法:
F1 主幫助頁面
F5 重繪主窗口
q 退出
1-15 跳轉到對應編號的模塊位置
o 打開當前模塊的詳細視圖
j 當前模塊向下滾動
k 當前模塊向上滾動
s 對模塊排序
/ 在所有模塊中搜索匹配
n 查找下一個出現的位置
g 移動到第一個模塊頂部
G 移動到最后一個模塊底部
使用命令指定配置,將生成的信息保存為html
#1.測試是否能通過終端直接展示
[root@web01 log]# goaccess -f /var/log/nginx/access.log -p /usr/local/etc/goaccess.conf
#2.將分析結果保存為HTML
[root@web01 log]# goaccess /var/log/nginx/access.log -o /code/log/index.html -p /usr/local/etc/goaccess.conf
#3.將其寫入腳本
#由於對日志實時性要求不是非常高,於是寫個小腳本,配置crontab,讓其每隔一段時間轉換一次,也可以實現偽實時性觀察log,如下:
[root@web01 log]# vim scripts/goaccess.sh
#!/bin/bash
LANG="zh_CN.UTF-8" #頁面轉換為中文
/usr/local/bin/goaccess /var/log/nginx/access.log -o /code/log/index.html -p /usr/local/etc/goaccess.conf
#4.然后再將腳本加入到crontab即可
[root@web01 ~]# crontab -l
#定時goaccess生成的信息保存為html
30 * * * * /bin/bash /root/scripts/goaccess.sh
配置一個nginx虛擬主機,將root指向/user/code/log,這樣就可以通過域名去訪問HTML界面.
[root@web01 conf.d]# vim fx.conf
server {
listen 80;
server_name longjiping.com;
charset utf-8,gbk;
location / {
root /code/log;
index index.html;
}
}