nginx web日誌介紹和分析
nginx web日誌介紹和分析
Nginx訪問日誌打印的格式可以自定義,例如Nginx日誌打印格式配置如下,Log_format 用來設置日誌格式,Name(模塊名) Type(日誌類型),可以配置多個日誌模塊,分別供不同的虛擬主機日誌記錄所調用:
log_format
log_format main ‘$remote_addr - $remote_user [$time_local] "$request" ‘ ‘$status $body_bytes_sent "$http_referer" ‘ ‘"$http_user_agent" $request_time‘; access_log /spool/logs/nginx-access.log compression buffer=32k;
log_format 指定日誌格式 niginx日誌格式及其內部變量函數參數說明:
$remote_addr 記錄客戶端IP地址
$server_name 虛擬機主機名稱
$http_x_forwarded_for HTTP請求的真實IP
$remote_user 記錄客戶端用戶名稱
$request 記錄請求的URL和Http協議版本
$status 記錄返回http請求的狀態
$upstream_status upstream的狀態
$ssl_protocol SSL協議版本
$body_bytes_sent 發送客戶端的字節數,不包括響應頭的大小
$bytes_sent 發送客戶端的總字節數
$connection_requests 當前通過一個連接獲得的請求數量
$http_referer 記錄從哪個頁面鏈接過來的
$http_user_agent 記錄客戶端瀏覽器的相關信息
$request_length 請求的長度,包括請求行,請求頭和正文
$msec 日誌寫入時間
$request_time 請求處理的時間,單位為秒,精度毫秒,nginx發送第一個字節到發送完響應數據的時間。
$upstream_response_time 應用程序響應的時間,nginx響應向後端服務器建立連接開始到接受完數據然後關閉連接為止的總時間。
access_log
access_log /spool/logs/nginx-access.log compression buffer=32k;access_log off;
access_log: 為訪問日誌設置路徑,格式和緩沖區的大小(nginx訪問日誌支持緩存)。 在同一個配置層級裏可以指定多個日誌。 特定值off會取消當前配置層級裏的所有access_log指令。 如果沒有指定日誌格式則會使用預定義的“combined”格式。
日誌文件的路徑可以包含變量,但此類日誌存在一些限制:
工作進程使用的user 應擁有在目錄裏創建文件的權限;
寫緩沖無效;
每條日誌寫入都會打開和關閉文件。然而,頻繁使用的文件描述符可以存儲在緩存中, 在open_log_file_cache指令的valid參數指定的時間裏,
寫操作能持續寫到舊文件
。
每次日誌寫入的操作都會檢查請求的 根目錄是否存在, 如果不存在則日誌不會被創建。
因此在一個層級裏同時指定root 和access_log是一個不錯的想法。
open_log_file_cache
open_log_file_cache max=1000 inactive=20s valid=1m min_uses=2;
open_log_file_cache: 定義一個緩存,用來存儲頻繁使用的文件名中包含變量的日誌文件描述符。 該指令包含以下參數:
max : 設置緩存中描述符的最大數量;如果緩存被占滿,最近最少使用(LRU)的描述符將被關閉。
inactive : 設置緩存文件描述符在多長時間內沒有被訪問就關閉; 默認為10秒。
min_uses : 設置在inactive參數指定的時間裏, 最少訪問多少次才能使文件描述符保留在緩存中;默認為1。
valid : 設置一段用於檢查超時後文件是否仍以同樣名字存在的時間; 默認為60秒。
off : 禁用緩存功能
IP PV UV VV的介紹
IP:獨立的IP,一天內相同的訪問相同的IP地址被計算一次。
PV:Page View,就是頁面瀏覽量或者點擊量,就是每次打開一個頁面就算作一次PV,也指頁面刷新的次數,每一次頁面刷新,就算做一次PV流量。
UV:Unique Visitor,獨立訪客數,一天內訪問某站點的人數,以COOKIE為依據,一天內相同客戶端的IP只被計算為一次訪客。
用Cookie分析UV值 : 當客戶端第一次訪問某個網站服務器的時候,網站服務器會給這個客戶端的電腦發出一個Cookie,通常放在這個客戶端電腦的C盤當中。在這個Cookie中會分配一個獨一無二的編號,這其中會記錄一些訪問服務器的信息,如訪問時間,訪問了哪些頁面等等。當你下次再訪問這個服務器的時候,服務器就可以直接從你的電腦中找到上一次放進去的Cookie文件,並且對其進行一些更新,但那個獨一無二的編號是不會變的。
VV : Visit View,訪客訪問的次數,當訪客完成所有的瀏覽並最終關掉該網站的所有頁面時,便完成了一次訪問,同一訪客一天內可能有多次訪問行為,訪問次數累計。
實例說明
小明在家用ADSL撥號上網,早上8點訪問了www.jj.com下的2個頁面,下午2點又訪問了www.jj.com的3個頁面。那麽,對於www.jj.com來講,今天的PV、UV、VV、IP各項指標該如何計算呢?
PV:5 PV指瀏覽量,因此PV指等於上午瀏覽的2個頁面和下午瀏覽的3個頁面之和;
UV:1 UV指獨立訪客數,因此一天內同一訪客的多次訪問只計為1個UV;
VV:1 VV指訪客的訪問次數,上午和下午分別有一次訪問行為,因此VV為2
IP:2 IP為獨立IP數,由於ADSL撥號上網每次都IP不同,因此獨立IP數位2;
日誌分析
通過Nginx日誌,可以簡單分析WEB網站的運行狀態、數據報表、IP、UV(unique visitor)、PV(page view)訪問量等需求,如下為常用需求分析:
使用的日誌格式
log_format main ‘$remote_addr - $remote_user [$time_local] "$request" ‘ ‘$status $body_bytes_sent "$http_referer" ‘ ‘"$http_user_agent" $request_time‘;
統計nginx服務器的獨立IP數
awk ‘{print $1}‘ access.log |sort -r|uniq -c | wc -l
統計Nginx的PV量
awk ‘{print $7}‘ access.log |wc -l
統計Nginx服務器UV統計(僅做演示)
awk ‘{print $11}‘ access.log |sort -r|uniq -c |wc -l
分析Nginx訪問日誌截止目前為止訪問量前20的IP列表。
awk ‘{print $1}‘ access.log|sort |uniq -c |sort -nr |head -20
分析Nginx訪問日誌早上9點至中午12點的總請求量。
sed -n "/2016:09:00/,/2016:12:00/"p access.log|wc -lawk ‘/2017:09:00/,/2017:12:00/‘ access.log|wc –l
分析Nginx訪問日誌截止目前為止訪問量前20的IP列表。
awk ‘{print $1}‘ access.log|sort |uniq -c |sort -nr |head -20
分析Nginx訪問日誌狀態碼404、502、503、500、499等錯誤信息頁面,打印錯誤出現次數大於20的IP地址。
awk ‘{if ($9~/502|499|500|503|404/) print $1,$9}‘ access.log|sort|uniq –c|sort –nr | awk ‘{if($1>20) print $2}‘
分析Nginx訪問日誌訪問最多的頁面。
awk ‘{print $7}‘ access.log |sort |uniq -c|sort -nr|head -20
分析Nginx訪問日誌請求處理時間大於5秒的URL,並打印出時間、URL、訪客IP。
awk ‘{if ($NF>5) print $NF,$7,$1}‘ access.log|sort -nr|more
本文出自 “dianel簡單不簡單” 博客,請務必保留此出處http://dianel.blog.51cto.com/12170393/1963962
nginx web日誌介紹和分析