access日志記錄了Nginx非常重要的信息,我們可以使用Nginx來分析定位問題;也可以用它來分析用戶的運行數據;但是如果想要實時分析access.log相對比較困難;有一款工具叫GoAccess,它可以以圖像化的方式通過WebSoxket協議實時的把access.log的變遷反應到瀏覽器中方便我們分析問題;接下來我們來演示如何使用GoAccess工具來分析Nginx的access.log的日志中;
GoAccess的站點:https://goaccess.io
我們可以看到它以一種非常好的圖形化的方式顯示給我們,現在我們先去看下我們原先的靜態資源Web的access.log是一種什么樣的格式?
我們沒有修改nginx 默認的access.log的格式如下:
GoAccess工具給我們提供了一個非常方便的日志格式用法
打開如下頁面:
當我們的access.log沒有發生任何配置變化的時候,我們可以使用如下
--log-format=COMBINED
也就是說nginx的access.log非常的靈活,我們可以自己添加各種不同的各模塊的內置變量加入到access.log中;所以當我們修改了access.log的格式的時候,我們需要在--log-format=COMBINED中重新定義我們添加的格式;
在這個例子中,我們沒有添加任何的access.log的配置,那么GoAccess是怎么使用的尼?
它實際上會去使用goaccess access.log -o report.html --log-format=COMBINED 中-o這個參數,生成一個新的html文件;把當前我們access.log日志中的內容以html圖表的形式展示出來;那么當access.log變遷的時候尼?
GoAccess會新起一個websocket進程通過端口的形式把新的access.log形式推送到我們的客戶端;
其中access.log要與自己定義的名字相對應
比如我這里配置文件中定義的為geek.access.log
接下來我們還要在上游服務器的nginx.conf中添加一個location,每當我們訪問/report.html的時候;我們需要用alias把它重定向到代理服務器的report.html中;
反向代理服務器中執行命令:
goaccess access.log -o ../html/report.html --real-time-html --time-format='%H:%M:%S'--date-format='%d/%b/%Y' --log-format=COMBINED

默認goaccess在開啟實時real-time-html后會監聽端口7890的websocket,如果服務器不允許請求7890端口,你就看不到那個頁面是實時更新的——你會發現訪問的頁面最后更新時間始終不變。這一點人很多忽略了,很多人以為是哪個生成html靜態文件是實時更新的,其實根本不是,那個文件本身一旦生成就不動了,真正更新的實時內容是從websocket過來的