htctouch 2017-7-3 10:22
Nginx log 分析使用 GoAccess - 即時監控伺服器狀態
GoAccess 是一個開放原始碼的網頁伺服器記錄檔分析工具,可以產生網頁版或文字版的動態統計報表,讓系統管理者可以查看即時的系統狀態,其涵蓋的資訊非常詳細,而且產生報表的方式相當簡潔,只要一行指令就可以馬上產生報表,對於 Linux 系統與指令比較熟悉的人而言,是一個非常方便的工具。<br><br>(1)安裝 GoAccess<br><br>我這裡以 Ubuntu Linux 的環境來示範如何安裝 GoAccess。最簡單的安裝方式就是直接使用 apt 從 Ubuntu Linux 官方的套件庫安裝:<br><br>不過通常官方所收錄的套件都不是最新的,若要安裝最新版的 GoAccess,可以從 GoAccess 的 Debian/Ubuntu 套件庫來下載安裝,首先設定 GoAccess 官方的套件庫:<br><br>[quote]<br># echo "deb http://deb.goaccess.io/ $(lsb_release -cs) main" | sudo tee -a /etc/apt/sources.list.d/goaccess.list<br># wget -O - http://deb.goaccess.io/gnugpg.key | sudo apt-key add -<br>[/quote]<br><br>更新套件列表,並安裝最新的 GoAccess 套件:<br><br># apt-get update<br># apt-get install goaccess<br><br>如果您會需要訪客來源國家的資訊,就要再安裝 GeoIP 資料庫:<br><br># apt-get install geoip-database<br><br>這樣 GoAccess 就安裝完成了。<br><br>GoAccess 對於其他的 Linux 與 Mac OS X 等系統的支援性也相當高,關於各種其他系統的安裝方式,請參考 GoAccess 的安裝說明。<br><br>(2)使用 GoAccess 分析 Nginx 記錄檔<br><br>因為不同的網頁伺服器會有不同的記錄檔格式,在使用 GoAccess 之前,我們要將 GoAccess 的解析設定調整成適合自己伺服器的格式。<br>設定 GoAccess 分析 Nginx 記錄檔<br><br>開啟 /etc/goaccess.conf 這個 GoAccess 的設定檔,根據自己的網頁伺服器設定檔格式進行調整,如果您是使用 Apache 或 Nginx 預設的設定(也就是沒有特別去改記錄檔的格式的話),只要把 GoAccess 設定檔中對應的設定註解拿掉即可,這裡我以 Nginx 預設的記錄檔格式設定來示範。<br><br>[quote]<br>首先調整時間格式:<br><br># The following time format works with any of the<br># Apache/NGINX's log formats below.<br>time-format %H:%M:%S<br><br>接著是日期格式:<br><br># The following date format works with any of the<br># Apache/NGINX's log formats below.<br>date-format %d/%b/%Y<br><br>記錄內容的格式:<br><br># NCSA Combined Log Format<br>log-format %h %^[%d:%t %^] "%r" %s %b "%R" "%u"<br>[/quote]<br><br>設定好記錄檔的格式之後,就可以開始使用 GoAccess 分析資料了。<br>GoAccess 文字報表<br><br>GoAccess 最直接的方式就是使用 -f 參數指定要分析的記錄檔:<br><br># goaccess -f /var/log/nginx/access.log<br><br>執行之後,GoAccess 會立即分析指定的記錄檔,隨即產生這樣的文字報表。<br><br><img src="https://goaccess.io/images/goaccess-dash-term.png" border="0"><br><br>這個報表的內容很詳細,包含訪客人數、請求網址、靜態檔案、404 錯誤網址、來源 IP 位址、訪客作業系統與瀏覽器版本、瀏覽時間、引介網站(referring sites)、訪客來源國家等各種統計資料,使用者可以用上下鍵捲動來查看。<br><br>另外它的內容是會動態更新的(類似 top 指令的畫面),所以管理者可以使用 SSH 這類的連線方式連上主機之後,執行這樣的指令後放著監看即時的系統狀態,而不要看的時候就直接關閉,完全不需要為了監控伺服器而啟動任何背景的系統服務,不會造成系統不必要的負擔。<br><br><img src="https://goaccess.io/images/goaccess-dash-html.png" border="0"><br><br>如果要看比較長期性的統計數據,可以將 /var/log/nginx/ 下面的 access.log.* 檔整理出來,一次全部丟給 GoAccess 來分析:<br><br># cat access.log.* | goaccess<br><br>這樣就可以產生好幾天以上的統計資料。<br><br>GoAccess 網頁報表<br><br>如果您感覺文字模式的報表不好看,GoAccess 也可以產生漂亮的網頁報表,只要把 goaccess 指令的輸出導向檔案,就會輸出 html 的報表:<br><br># cat access.log.* | goaccess > output.html<br><br>如果只有輸出報表還不能滿足...那麼你可以再進一步使用 線上即時報表:<br># goaccess -f /var/log/nginx/site1-access.log -a -o /var/www/goaccess.mydomain.com/site.html.html --real-time-html --ws-url=goaccess.mydomain.com<br><br>這邊有Live Demo 的資料可以參考:<br><a href="https://rt.goaccess.io/" target="_blank">https://rt.goaccess.io/</a><br><br>參考資料:<br>https://www.tecmint.com/goaccess-a-real-time-apache-and-nginx-web-server-log-analyzer/<br>https://blog.gtwang.org/linux/analysing-nginx-logs-using-goaccess/