我們在網站維運和管理時,了解訪客的行為和網頁伺服器的性能至關重要,本次的教學,主要分享日常維運nginx web server時候,如遇到當網站出現被攻擊異常滿載的時候,要怎麼快速阻擋攻擊者IP,你可以用GREP也可以用AWK,但也許你也可以選擇用視覺化的工具GoAccess來達到你想獲得的資訊,GoAccess主要是用於分析網頁伺服器的日誌記錄,本教學將帶您從安裝到LOG分析到產生HTML圖表,逐步了解如何使用GoAccess來分析Nginx Access log,以從中獲取寶貴的資料。傳統做法我們會到Web主機查找Access.log,不過因為資料過多,這時候一筆一筆對似乎有點浪費時間,也容易漏看,這時候可以用個方便的工具GoAccess,他主要的功能是針對 Nginx的 Access log 進行分析,最終給出彙整後的分析結果,讓你可以一目了然,針對有問題的設計做優化與改進,號稱Web維運必備神器,他產出的結果包含UV、訪客主機名稱和 IP、作業系統、訪問時間分佈等資訊,本教學是以GoAccess 1.18為出發的教學,當然一些通用語法GoAccess 1.18之前的版本也適用喔,所以大家不用擔心,只要一起做,相信你也可以了解分析Access log是怎麼一回事。
Table of Contents
教學步驟
步驟1:安裝GoAccess
首先,確保您的伺服器上已安裝Nginx網頁伺服器,然後使用適合您操作系統的包管理器來安裝GoAccess。例如,如果您使用的是Ubuntu,可以使用以下命令安裝:
若要安裝最新版的 GoAccess(請先執行以下指令若無請忽略這段)
$echo "deb http://deb.goaccess.io/ $(lsb_release -cs) main" | sudo tee -a /etc/apt/sources.list.d/goaccess.list
$wget -O - http://deb.goaccess.io/gnugpg.key | sudo apt-key add -
安裝 GoAccess
$sudo apt-get update:
$sudo apt-get install goaccess
設定 GoAccess
開啟GoAccess設定檔
$sudo vim /etc/goaccess/goaccess.conf
將下列文字取消註解(移除行首的 #)
#time-format %H:%M:%S
#date-format %d/%b/%Y
#log-format %h %^[%d:%t %^] “%r” %s %b “%R” “%u”
步驟2:設定Nginx日誌
確保Nginx已配置以將訪問日誌記錄到文件中。這通常在Nginx配置文件(通常是/etc/nginx/nginx.conf或/etc/nginx/sites-available/default)中設定。確保以下類似的行存在:
$access_log /var/log/nginx/access.log;
確保該路徑存在,並且伺服器有權限寫入該文件。
步驟3:運行GoAccess
運行GoAccess以分析Nginx日誌。您可以選擇性地使用以下命令:
$ goaccess /var/log/nginx/access.log
這將打開GoAccess的交互式終端界面,並顯示即時的分析結果。
單Log分析
或者,您可以將分析結果保存到HTML文件中,以便稍後查看
$goaccess -f /var/log/nginx/access.log -a -o /path/to/report.html
多Log分析
多個access.log、access.log.1、access.log.2 . . . access.log.N可以合并在一起分析
$ cat /var/log/nginx/access.log.* | goaccess > rdpapa_output.html
步驟4:檢視報告
不論您是使用交互式界面還是HTML報告,您都將獲得關於網站訪問的詳細信息,包括訪問者IP地址、受訪頁面、HTTP狀態碼、流量統計等。使用GoAccess的過濾和排序功能,您可以輕鬆找到有用的數據。
結論
後續你還搭配crontab 將合併log指令,透過任務排程定時產生html檔案,讓你可以輕鬆查找當時的訪問數據,建議架構可以在一台內部的網站報表主機,定時將各台Web的log透過rsync同步過來,時間到觸發排成產生HTML報告,如此一來就可以讓你時時掌握每天主機的Access.log訪問實際狀況。
※補充重點:透過CRONTAB定期更新
建立GoAccess的shell script,檔名為ga_log_update.sh,可透過vim ga_log_update.sh建立
#!/bin/sh
goaccess /var/log/nginx/access.log -o /path/to/report.html --log-format=COMBINED
加入crontab中, 根據access log 每30分鐘更新一次
$ vim /etc/crontab
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
*/30 * * * * ~/ga_log_update.sh
注意事項
- 請確保您有適當的權限來訪問Nginx日誌文件和運行GoAccess。
- 定期檢查和分析日誌以確保網站的性能和安全性。
Reference
你好,我是RD爸,希望透過我的紀錄,可以帶給你一些新的想法~ 專注於各式3C產品的開箱評測、程式相關技術及理財筆記。
email ►[email protected]