利用GoAccess分析web服務(wù)日志
目錄
1、GoAccess 是什么
2、為什么要用 GoAccess
3、GoAccess 功能
4、GoAccess 特點(diǎn)
5、安裝 GoAccess
5.1 源碼安裝
5.2 yum 安裝
6、配置
7、使用
7.1 控制臺(tái)模式
7.2 HTML 模式
7.3 守護(hù)進(jìn)程模式
7.4 定時(shí)更新
7.5 處理不斷增長的日志
7.6 其他使用
8、小結(jié)
1、GoAccess 是什么
GoAccess 是一款開源的且具有交互視圖界面的實(shí)時(shí) Web 日志分析工具,通過你的 Web 瀏覽器或者 unix 系統(tǒng)下的終端程序(terminal)即可訪問。能為系統(tǒng)管理員提供快速且有價(jià)值的 HTTP 統(tǒng)計(jì),并以在線可視化服務(wù)器的方式呈現(xiàn)。
2、為什么要用 GoAccess
GoAccess 被設(shè)計(jì)成快速的并基于終端的日志分析工具。其核心理念是不需要通過 Web 瀏覽器就能快速分析并實(shí)時(shí)查看 Web 服務(wù)器的統(tǒng)計(jì)數(shù)據(jù)(這對(duì)于需要使用 SSH 來對(duì)訪問日志進(jìn)行快速分析或者就是喜歡在終端環(huán)境下工作的人來說是超贊的)。終端輸出僅僅是默認(rèn)的輸出方式,GoAccess 還支持生成完整的實(shí)時(shí) HTML 報(bào)告(這對(duì)分析、監(jiān)控以及數(shù)據(jù)可視化都是極好的),以及 JSON 和 CSV 格式的報(bào)告。
3、GoAccess 功能
GoAccess 解析指定的 Web 日志文件并將統(tǒng)計(jì)結(jié)果輸出到 X 終端。功能如下:
通用統(tǒng)計(jì): 此面板展示了幾個(gè)主要指標(biāo),比如:有效和無效請(qǐng)求的數(shù)量,分析這些數(shù)據(jù)所花費(fèi)的時(shí)間,獨(dú)立訪客的情況,請(qǐng)求的文件,靜態(tài)文件(CSS, ICO, JPG 等)的完整 URL,404 錯(cuò)誤,被解析的日志文件的大小以及消耗的帶寬。 獨(dú)立訪客: 此面板按照日期展示了訪問次數(shù),獨(dú)立訪客數(shù),以及累計(jì)消耗的帶寬等指標(biāo)。具有相同 IP,相同訪問時(shí)間,相同的 UserAgent 的 HTTP 請(qǐng)求將會(huì)被識(shí)別為獨(dú)立訪客。默認(rèn)情況下包含了網(wǎng)絡(luò)爬蟲。也可以選擇使用 --date-spec=hr 參數(shù)將按照日期分析修改為按照小時(shí),例如:05/Jun/2016:16 。這對(duì)于希望在小時(shí)級(jí)別去跟蹤每日流量非常有幫助。 請(qǐng)求的文件: 此面板展示服務(wù)器上被請(qǐng)求次數(shù)最多的文件。包含訪問次數(shù),獨(dú)立訪客數(shù),百分比,累計(jì)消耗帶寬,使用的協(xié)議,請(qǐng)求方式。 請(qǐng)求的靜態(tài)文件: 列出請(qǐng)求頻率最高的靜態(tài)文件類型,例如:JPG, CSS, SWF, JS, GIF, 和 PNG, 以及和上一個(gè)面板一樣的其他指標(biāo)。另外靜態(tài)文件可以被添加到配置文件中。 404 或者文件未找到: 展示內(nèi)容與之前的面板類似,但是其數(shù)據(jù)包含了所有未找到的頁面,以及俗稱的 404 狀態(tài)碼。 主機(jī): 此面板展示主機(jī)自身的詳細(xì)信息。能夠很好的發(fā)現(xiàn)不懷好意的爬蟲以及識(shí)別出是誰吃掉了你的帶寬。擴(kuò)展面板將展示更多信息,比如主機(jī)的反向 DNS 解析結(jié)果,主機(jī)所在國家和城市。如果開啟了 參數(shù),選擇想查看的 IP 地址并按回車,將會(huì)顯示 UserAgent 列表。 操作系統(tǒng): 此面板將顯示主機(jī)使用的操作系統(tǒng)的信息。GoAccess 將盡可能嘗試為每一款操作系統(tǒng)提供詳細(xì)的信息。 瀏覽器: 此面板將顯示來訪主機(jī)使用的瀏覽器信息。GoAccess 將盡可能嘗試為每一款瀏覽器提供詳細(xì)的信息。 訪問次數(shù): 此面板按小時(shí)報(bào)告。因此將顯示 24 個(gè)數(shù)據(jù)點(diǎn),每一個(gè)均對(duì)應(yīng)每一天的某一個(gè)小時(shí)。使用 --hour-spec=min 參數(shù)可以設(shè)定為按每十分鐘報(bào)告,并將以 16:4 的格式顯示時(shí)間。這對(duì)發(fā)現(xiàn)服務(wù)器的峰值訪問時(shí)段很有幫助。 虛擬主機(jī): 此面板將顯示從訪問日志中解析出來的不同的虛擬主機(jī)的情況。此面板僅在日志格式中啟用了 %v 參數(shù)時(shí)顯示。 來路 URL: 如果問題主機(jī)通過其他的資源訪問了你的站點(diǎn),以及通過從其他主機(jī)上的鏈接或者跳轉(zhuǎn)到你的站點(diǎn),則這些來路 URL 將會(huì)被顯示在此面板。可以在配置文件中通過 --ignore-panel開啟此功能。(默認(rèn)關(guān)閉)來路站點(diǎn): 此面板將僅顯示主機(jī)的部分,而不是完整的 URL。 關(guān)鍵字: 報(bào)告支持用在谷歌搜索,谷歌緩存,谷歌翻譯上使用關(guān)鍵字。目前僅支持通過 HTTP 使用谷歌搜索。可以在配置文件中通過 --ignore-panel開啟此功能。(默認(rèn)關(guān)閉)地理位置: 根據(jù) IP 地址判斷地理位置。統(tǒng)計(jì)數(shù)據(jù)按照大洲和國家分組。需要地理位置模塊的支持。 HTTP 狀態(tài)碼: 以數(shù)字表示的 HTTP 請(qǐng)求的狀態(tài)編碼。 遠(yuǎn)程用戶(HTTP 驗(yàn)證): 通過 HTTP 驗(yàn)證來確定訪問文檔的權(quán)限。如果文檔沒有被密碼保護(hù)起來,這部分將會(huì)顯示為 “-”。此面板默認(rèn)為開啟,除非在日志格式變量中設(shè)置了參數(shù)%e。
4、GoAccess 特點(diǎn)
完全實(shí)時(shí): 所有面板以及指標(biāo)均按照指定時(shí)間間隔更新,在終端(Terminal)下是 200ms,HTML 則是每秒。 支持幾乎所有 Web 日志格式: GoAccess 允許任意自定義日志格式。可預(yù)定義的格式包括:Apache, Nginx, Amazon S3, Elastic Load Balancing, CloudFront, 等等 跟蹤應(yīng)用響應(yīng)時(shí)間: 跟蹤處理請(qǐng)求的時(shí)間消耗。對(duì)于解決站點(diǎn)頁面訪問速度下降非常有用。 增長日志處理: 需要持續(xù)保持?jǐn)?shù)據(jù)?GoAccess 有能力處理在磁盤上以 B+Tree 數(shù)據(jù)庫存儲(chǔ)并且不斷增長的日志。 僅依賴一個(gè)模塊: GoAccess 是用 C 語言編寫的。僅僅需要 ncurses 這一個(gè)模塊即可運(yùn)行。同時(shí) GoAccess 甚至還擁有自己的兼容 RFC6455 協(xié)議的 Web Socket 服務(wù)器。 易于使用: 可以直接運(yùn)行 GoAccess 去處理您的訪問日志文件,僅需選取日志格式然后讓 GoAccess 解析日志內(nèi)容并將統(tǒng)計(jì)結(jié)果展示出來。 訪客畫像: 可以按照小時(shí)或者指定日期確定最慢請(qǐng)求的訪問次數(shù),訪客數(shù)量,帶寬以及其他相關(guān)度量值。 支持虛擬主機(jī): 擁有多個(gè)虛擬主機(jī)?在控制面板中能夠顯示出哪一個(gè)虛擬主機(jī)消耗 Web 服務(wù)器上最多的資源。 配色風(fēng)格可定制化: GoAccess 的配色風(fēng)格十分易于定制化。無論是通過終端,還是僅僅通過簡(jiǎn)單修改 HTML 頁面的層疊樣式表。
5、安裝 GoAccess
安裝有兩種方式:源碼編譯安裝和yum安裝
本機(jī)環(huán)境
# cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)
5.1 源碼安裝
下載包并編譯
# wget -c https://tar.goaccess.io/goaccess-1.4.6.tar.gz
# tar xf goaccess-1.4.6.tar.gz
# cd goaccess-1.4.6/
# ./configure --prefix=/usr/local/goaccess --enable-utf8 --enable-geoip=mmdb --with-openssl
其中編譯參數(shù)中--enable-geoip
–enable-geoip=<legacy|mmdb>
地理位置支持。依賴 MaxMind GeoIP 模塊。legacy 將使用原始 GeoIP 數(shù)據(jù)庫。mmdb 將使用增強(qiáng)版 GeoIP2 數(shù)據(jù)庫
根據(jù)錯(cuò)誤提示依次解決依賴關(guān)系 報(bào)錯(cuò)一:
使用--enable-geoip=legacy
configure: error:
*** Missing development files for the GeoIP library
# 安裝依賴
# yum install -y GeoIP-devel
使用--enable-geoip=mmdb
configure: error:
*** Missing development files for libmaxminddb library.
# 經(jīng)過測(cè)試,需要從源碼安裝依賴
# wget -c https://github.com/maxmind/libmaxminddb/releases/download/1.5.2/libmaxminddb-1.5.2.tar.gz
# tar xf libmaxminddb-1.5.2.tar.gz
# cd libmaxminddb-1.5.2
# ./configure && make && make install
# ldconfig
報(bào)錯(cuò)二:
configure: error: *** Missing development libraries for ncursesw
# yum install -y ncurses-devel
再次編譯安裝
# ./configure --prefix=/usr/local/goaccess --enable-utf8 --enable-geoip=mmdb --with-openssl
...
Your build configuration:
Prefix : /usr/local/goaccess
Package : goaccess
Version : 1.4.6
Compiler flags : -pthread
Linker flags : -lnsl -lncursesw -lmaxminddb -lcrypto -lssl -lpthread
UTF-8 support : yes
Dynamic buffer : no
Geolocation : GeoIP2
Storage method : In-Memory with On-Disk Persistent Storage
TLS/SSL : yes
Bugs : [email protected]
# make && make install
# ls /usr/local/goaccess/
bin etc share
5.2 yum 安裝
通過yum安裝可以自動(dòng)的解決依賴問題
# yum install goaccess -y
6、配置
配置環(huán)境變量
# echo "export PATH=/usr/local/goaccess/bin:$PATH" >>/etc/profile
# source /etc/profile
# goaccess -V
GoAccess - 1.4.6.
For more details visit: https://goaccess.io/
Copyright (C) 2009-2020 by Gerardo Orellana
Build configure arguments:
--enable-utf8
--enable-geoip=mmdb
--with-openssl
自定義日志/日期格式
GoAccess可以解析虛擬的任意Web日志格式。預(yù)定義的選項(xiàng)包括:通用日志格式,聯(lián)合日志格式,包含虛擬主機(jī),W3C格式以及亞馬遜CloudFront(分布式下載)。GoAccess允許任意的自定義格式字符串。
有兩種方法配置日志格式。最簡(jiǎn)單的方式是運(yùn)行 GoAccess時(shí)使用-c顯示一個(gè)配置窗口。但是這種方式不是永久有效的,因此你需要在配置文件中設(shè)定格式。
配置文件位于:%sysconfdir%/goaccess.conf 或者~/.goaccessrc注意:%sysconfdir%可能是/etc/, /usr/etc/或者/usr/local/etc/
time-format參數(shù)time-format后跟隨一個(gè)空格符,指定日志的時(shí)間格式,包含普通字符與特殊格式說明符的任意組合。他們都由百分號(hào)(%)開始。參考 man strftime。%T或者%H:%M:%S.
注意: 如果給定的時(shí)間戳以微秒計(jì)算,則必須在 time-format中使用參數(shù)%f。
date-format 參數(shù) date-format 后跟隨一個(gè)空格符,指定日志的日期格式,包含普通字符與特殊格式說明符的任意組合。他們都由百分號(hào) (%)開始。參考 man strftime。注意: 如果給定的時(shí)間戳以微秒計(jì)算,則必須在 time-format中使用參數(shù)%f。
log-format參數(shù)log-format后跟隨一個(gè)空格符或者制表分隔符(\t),用于指定日志字符串格式。
特殊格式說明符
%x 匹配 time-format 和 date-format 變量的日期和時(shí)間字段。用于使用時(shí)間戳來代替日期和時(shí)間兩個(gè)獨(dú)立變量的場(chǎng)景。
%t 匹配 time-format 變量的時(shí)間字段。
%d 匹配 date-format 變量的日期字段。
%v 根據(jù) canonical 名稱設(shè)定的服務(wù)器名稱(服務(wù)區(qū)或者虛擬主機(jī))。
%e 請(qǐng)求文檔時(shí)由 HTTP 驗(yàn)證決定的用戶 ID。
%h 主機(jī)(客戶端 IP 地址,IPv4 或者 IPv6)。
%r 客戶端請(qǐng)求的行數(shù)。這些請(qǐng)求使用分隔符(單引號(hào),雙引號(hào))引用的部分可以被解析。否則,需要使用由特殊格式說明符(例如:%m, %U, %q 和 %H)組合格式去解析獨(dú)立的字段。
注意: 既可以使用 %r 獲取完整的請(qǐng)求,也可以使用 %m, %U, %q and %H 去組合你的請(qǐng)求,但是不能同時(shí)使用。
%m 請(qǐng)求的方法。
%U 請(qǐng)求的 URL。
注意: 如果查詢字符串在 %U 中,則無需使用 %q。但是,如果 URL 路徑中沒有包含任何查詢字符串,則你可以使用 %q 查詢字符串將附加在請(qǐng)求后面。
%q 查詢字符串。
%H 請(qǐng)求協(xié)議。
%s 服務(wù)器回傳客戶端的狀態(tài)碼。
%b 回傳客戶端的對(duì)象的大小。
%R HTTP 請(qǐng)求的 "Referer" 值。
%u HTTP 請(qǐng)求的 "UserAgent" 值。
%D 處理請(qǐng)求的時(shí)間消耗,使用微秒計(jì)算。
%T 處理請(qǐng)求的時(shí)間消耗,使用帶秒和毫秒計(jì)算。
%L 處理請(qǐng)求的時(shí)間消耗,使用十進(jìn)制數(shù)表示的毫秒計(jì)算。
%^ 忽略此字段。
%~ 繼續(xù)解析日志字符串直到找到一個(gè)非空字符(!isspace)。
~h 在 X-Forwarded-For (XFF) 字段中的主機(jī)(客戶端 IP 地址,IPv4 或者 IPv6)。
修改配置文件
# vim /usr/local/goaccess/etc/goaccess/goaccess.conf
time-format %H:%M:%S
date-format %d/%b/%Y
log-format %h %^[%d:%t %^] "%r" %s %b "%R" "%u"
本文示例用來分析nginx的日志,為了分析的精準(zhǔn)度,配置一下nginx的log_format為通用格式
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_cookie" "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
7、使用
常用參數(shù)說明
-a --agent-list 啟用由主機(jī)用戶代理的列表。為了更快的解析,不啟用該項(xiàng) -d --with-output-resolver 在 HTML/JSON 輸出中開啟 IP 解析,會(huì)使用 GeoIP 來進(jìn)行 IP 解析 -f --log-file 需要分析的日志文件路徑 -p --config-file 配置文件路徑 -o --output 輸出格式,支持 html、json、csv -m --with-mouse 控制面板支持鼠標(biāo)點(diǎn)擊 -q --no-query-string 忽略請(qǐng)求的參數(shù)部分 --real-time-html 實(shí)時(shí)生成 HTML 報(bào)告 --daemonize 守護(hù)進(jìn)程模式,--real-time-html 時(shí)使用
7.1 控制臺(tái)模式
# pwd
/var/log/nginx
# goaccess -a -d -f nginx_access.log-20191216 -p /usr/local/goaccess/etc/goaccess/goaccess.conf
控制臺(tái)操作方法按鍵
F1 主幫助頁面 F5 重繪主窗口 q 退出 1-15 跳轉(zhuǎn)到對(duì)應(yīng)編號(hào)的模塊位置 o 打開當(dāng)前模塊的詳細(xì)視圖 j 當(dāng)前模塊向下滾動(dòng) k 當(dāng)前模塊向上滾動(dòng) s 對(duì)模塊排序 / 在所有模塊中搜索匹配 n 查找下一個(gè)出現(xiàn)的位置 g 移動(dòng)到第一個(gè)模塊頂部 G 移動(dòng)到最后一個(gè)模塊底部
效果如下
7.2 HTML 模式
# pwd
/var/log/nginx
# goaccess -a -d -f nginx_access.log-20191216 -p /usr/local/goaccess/etc/goaccess/goaccess.conf -o /usr/local/nginx/html/www.ssgeek.com/go-access.html
Parsing... [9,692] [692/s]s]
此處生成的html直接定向到了站點(diǎn)目錄下,因此分析并生成html文件后即可進(jìn)行訪問,不多說,此處上大圖!
7.3 守護(hù)進(jìn)程模式
使用daemonize模式運(yùn)行,生成實(shí)時(shí)HTML報(bào)告的過程與創(chuàng)建靜態(tài)報(bào)告的過程非常相似,只需要在啟動(dòng)命令后添加--real-time-html和--daemonize參數(shù)即可
# goaccess -a -d -f nginx_access.log-20191216 -p /usr/local/goaccess/etc/goaccess/goaccess.conf -o /usr/local/nginx/html/www.ssgeek.com/go-access.html --real-time-html --daemonize
Daemonized GoAccess: 13308
默認(rèn)監(jiān)聽的是 7890 端口,可以使用--port指定端口號(hào)啟動(dòng)后會(huì)提示WebSocket服務(wù)器已準(zhǔn)備接收來自客戶的連接
# netstat -lntup|grep 7890
tcp 0 0 0.0.0.0:7890 0.0.0.0:* LISTEN 13333/goaccess
如果網(wǎng)站開啟了HTTPS功能,就需要GoAccess啟用openssl,在配置文件goaccess.conf中配置ssl-cert和ssl-key來支持openssl
# vim /usr/local/goaccess/etc/goaccess/goaccess.conf
ssl-cert /usr/local/nginx/ca_cert/www.ssgeek.com_chain.crt
ssl-key /usr/local/nginx/ca_cert/www.ssgeek.com_key.key
7.4 定時(shí)更新
也可以通過定時(shí)任務(wù)的方式實(shí)現(xiàn)定時(shí)更新HTML報(bào)表,每 30 分鐘刷新一次
# crontab -e
*/30 * * * * goaccess -a -d -f nginx_access.log-20191216 -p /usr/local/goaccess/etc/goaccess/goaccess.conf -o /usr/local/nginx/html/www.ssgeek.com/go-access.html
7.5 處理不斷增長的日志
處理不斷增長的日志指的是當(dāng)日志按照某些規(guī)則進(jìn)行切割,例如nginx日志每天切割一份的情況。這個(gè)時(shí)候GoAccess通過磁盤B+樹數(shù)據(jù)庫能夠處理不斷增長的日志。工作原理如下:
首先數(shù)據(jù)集必須使用 --keep-db-files, 參數(shù)保存,然后相同的數(shù)據(jù)集可以使用參數(shù) --load-from-disk 載入。 收到新的數(shù)據(jù)(來自管道或者文件)后,將會(huì)被附加到原始數(shù)據(jù)集上。 在任何時(shí)候都保存數(shù)據(jù), 則必須使用 --keep-db-files 參數(shù)。 如果在使用參數(shù) --load-from-disk 時(shí)沒有同時(shí)使用 --keep-db-files 參數(shù),則數(shù)據(jù)庫文件在程序關(guān)閉時(shí)將會(huì)被刪除。
示例:
// 上個(gè)月的訪問日志
goaccess access.log.1 --keep-db-files
然后,載入
// 添加這個(gè)月的新日志,并保存為新數(shù)據(jù)
goaccess access.log --load-from-disk --keep-db-files
讀取已經(jīng)保存的數(shù)據(jù)(不解析新數(shù)據(jù))
goaccess --load-from-disk --keep-db-files
7.6 其他使用
生成 JSON 報(bào)告
# goaccess -a -d -f nginx_access.log-20191216 -p /usr/local/goaccess/etc/goaccess/goaccess.conf -o json > report.json
生成 CSV 文件
# goaccess -a -d -f nginx_access.log-20191216 -p /usr/local/goaccess/etc/goaccess/goaccess.conf -o csv > report.csv
實(shí)施過濾和解析
# tail -f nginx_access.log | goaccess -p /usr/local/goaccess/etc/goaccess/goaccess.conf -
分析多個(gè)文件
# goaccess -p /usr/local/goaccess/etc/goaccess/goaccess.conf access.log.1 access.log.2
8、小結(jié)
以上就是goaccess的常用用法,更多內(nèi)容可以參考goaccess 官方文檔[1]
參考資料
goaccess官方文檔: https://goaccess.cc/
