本文檔主要介紹Nginx設置日志參數的作用,以及Nginx日志常用分析命令
基本大綱:
1.Nginx日志記錄格式的介紹
2.Nginx日志參數詳解
3.Web服務流量名詞介紹
4.Nginx日志常用分析命令示范
一:Nginx日志記錄格式的介紹
log_format用來設置日志的記錄格式:
log_format name format
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}}'