本文檔主要介紹Nginx設置日誌參數的做用,以及Nginx日誌經常使用分析命令前端
基本大綱:
nginx
1.Nginx日誌記錄格式的介紹web
2.Nginx日誌參數詳解
apache
3.Web服務流量名詞介紹瀏覽器
4.Nginx日誌經常使用分析命令示範服務器
一:Nginx日誌記錄格式的介紹
併發
log_format用來設置日誌的記錄格式:
負載均衡
log_format name formatide
name表示格式名稱,format表示等義的格式。log_format有一個默認的無需設置的combined日誌格式,至關於apache的combined日誌格式,以下所示:網站
log_format combined '$remote_addr - $remote_user [$time_local] '
' "$request" $status $body_bytes_sent '
' "$http_referer" "$http_user_agent" ';
若是nginx位於負載均衡器,squid,nginx反向代理以後,web服務器沒法直接獲取到客戶端真實的IP地址了。 $remote_addr獲取反向代理的IP地址。反向代理服務器在轉發請求的http頭信息中,能夠增長X-Forwarded-For信息,用來記錄客戶端IP地址和客戶端請求的服務器地址。
下面是修改後,生產環境下代理服務器用的日誌格式。能夠根據須要添加對應的日誌參數
log_format main '$remote_addr - $remote_user [$time_local] requesthost:"$http_host"; "$request" requesttime:"$request_time"; '
'$status $body_bytes_sent "$http_referer" - $request_body'
'"$http_user_agent" "$http_x_forwarded_for"';
二:Nginx日誌參數詳解
參數註釋以下:
$remote_addr #與$http_x_forwarded_for 用以記錄客戶端的ip地址
$http_x_forwarded_for #當前端有代理服務器時,設置web節點記錄客戶端地址的配置,此參數生效的前提是代理服務器也要進行相關的http_x_forwarded_for設置
$remote_user #記錄客戶端用戶名稱,通常默認爲空
$time_local #記錄訪問時間
$request #記錄請求的URL和HTTP協議
$status #記錄請求狀態
$body_bytes_sent #記錄發送給客戶端文件內容大小
$http_referer #記錄從哪一個頁面連接訪問過來的
$http_user_agent #記錄客戶端瀏覽器相關信息
$request_time #處理完請求所花時間,以秒爲單位
$http_host #請求地址,即瀏覽器中你輸入的地址(IP或域名)
$request_body #記錄POST數據
$request_length #客戶端請求的長度
$upstream_status #upstream狀態,成功是200
$upstream_addr #後臺upstream的地址,即真正提供服務的主機地址
$upstream_response_time #請求過程當中,upstream響應時間
三:Web服務流量名詞介紹
網站併發鏈接數:定義爲網站服務器在單位時間內可以處理的最大鏈接數。示例:某網站的併發是5000.意味着單位時間內(理解爲1秒或數秒內),正在處理的鏈接數,正在創建的鏈接數,加起來一共是5000個。
IP:即Internet Protocol,通常指獨立IP數,獨立IP數是指不一樣IP地址的計算機訪問網站時被計的總次數。通常一天00:00-24:00內相同IP地址只被計算一次。
PV:即Page View,中文翻譯爲頁面瀏覽,即頁面瀏覽量或點擊量,無論客戶端是否相同,也無論IP和網站頁面是否相同,用戶只要訪問網站頁面就會計算PV,一次計爲一個PV
UV:即Unique Visitor,同一個客戶端(PC或移動端)訪問網站被計爲一個訪客。一天(00:00-24:00)內相同的客戶端訪問同一個網站只統計一次UV。UV通常是以客戶端Cookie等技術做爲統計依據的,實際統計會有偏差。
IP,PV,UV的區別在哪?
舉例說明:假設某個公司有10個員工,都訪問了www.taobao.com這個網站。每一個人平均瀏覽了5個頁面,可是公司的對外出口是一個公網IP。因此對於www.taobao.com這個網站而言,只會計算1個獨立IP訪問。可是由於有10我的在訪問www.taobao.com這個網站,而且平均都訪問了5次,所以,對於www.taobao.com這個網站而言,PV數就是10x5=50個PV,而由於有10我的訪問,就是10個不一樣的客戶端訪問,所以,UV(獨立訪客)爲10.
所以上例結果爲IP數爲1個,PV數爲50個,UV爲10個。經過這個結果,不難看出,一個網站的獨立IP數量要比網站實際訪問的PV數量小得多。一般狀況下,網站的UV數也會大於獨立IP數
四:Nginx日誌經常使用分析命令示範(注:日誌的格式不一樣,awk取的項不一樣。下面命令針對上面日誌格式執行)
1)總請求數
wc -l access.log |awk '{print $1}'
2)獨立IP數
awk '{print $1}' access.log|sort |uniq |wc -l
3)每秒客戶端請求數 TOP5
awk '{print $6}' access.log|sort|uniq -c|sort -rn|head -5
4)訪問最頻繁IP Top5
awk '{print $1}' access.log|sort |uniq -c |sort -nr |head -5
5)訪問最頻繁的URL TOP5
awk '{print $7}' access.log|sort |uniq -c |sort -nr |head -5
6)響應大於5秒的URL TOP5
awk '{if ($7 > 5){print $6}}' access.log|sort|uniq -c|sort -rn |head -5
7)HTTP狀態碼(非200)統計 Top5
awk '{if ($11 != 200){print $11}}' access.log|sort|uniq -c|sort -rn|head -5
8)分析請求數大於50000的源IP
cat access.log|awk '{print $NF}'|sort |uniq -c |sort -nr|awk '{if ($1 >50000){print $2}}'