《NGNIX教學–快速彙整分析nginx access log,使用GoAccess》系統監控 | 學習筆記

Telegram share !

我們在網站維運和管理時,了解訪客的行為和網頁伺服器的性能至關重要,本次的教學,主要分享日常維運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是怎麼一回事。

教學步驟

步驟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的交互式終端界面,並顯示即時的分析結果。

圖一、NGNIX教學–快速彙整分析nginx access log,使用GoAccess-GoAccess的文字終端界面
圖二、NGNIX教學–快速彙整分析nginx access log,使用GoAccess-GoAccess的文字終端界面
單Log分析

或者,您可以將分析結果保存到HTML文件中,以便稍後查看

$goaccess -f /var/log/nginx/access.log -a -o /path/to/report.html
圖三、NGNIX教學–快速彙整分析nginx access log,使用GoAccess-GoAccess的Web 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