nginx之日誌格式

nginx的ngx_http_log_module模塊是用來定義請求日誌格式(編譯時添加)

配置段: http

常用log_format指令:


$remote_addr, $http_x_forwarded_for 記錄客戶端IP地址
$remote_user
記錄客戶端用戶名稱
$request
記錄請求的URL和HTTP協議
$status  
記錄請求狀態
$body_bytes_sent
發送給客戶端的字節數,不包括響應頭的大小; 該變量與Apache模塊mod_log_config裏的“%B”參數兼容。
$bytes_sent
發送給客戶端的總字節數
$connection
連接的序列號
$connection_requests
當前通過一個連接獲得的請求數量
$msec
日誌寫入時間。單位爲秒,精度是毫秒
$pipe
如果請求是通過HTTP流水線(pipelined)發送,pipe值爲“p”,否則爲“.”
$http_referer
記錄從哪個頁面鏈接訪問過來的
$http_user_agent
記錄客戶端瀏覽器相關信息
$request_length
請求的長度(包括請求行,請求頭和請求正文)
$request_time
請求處理時間,單位爲秒,精度毫秒; 從讀入客戶端的第一個字節開始,直到把最後一個字符發送給客戶端後進行日誌寫入爲止
$upstream_response_time 
Nginx向後端(php-cgi)建立連接開始到接受完數據然後關閉連接爲止的時間

$time_iso8601 ISO8601標準格式下的本地時間
$time_local   
通用日誌格式下的本地時間


上面提到了兩個時間:upstream_response_timerequest_time


下面介紹下2者的差別:


1、request_time


    指的就是從接受用戶請求的第一個字節到發送完響應數據的時間,即包括接收請求數據時間、程序響應時間、輸出響應數據時間。


2、upstream_response_time


    是指從Nginx向後端(php-cgi)建立連接開始到接受完數據然後關閉連接爲止的時間。

所以$request_time肯定比$upstream_response_time值大,特別是使用POST方式傳遞參數時,因爲Nginx會把request body緩存住,接受完畢後纔會把數據一起發給後端。所以如果用戶網絡較差,或者傳遞數據較大時,$request_time會比$upstream_response_time大很多。

所以如果使用nginx的accesslog查看php程序中哪些接口比較慢的話,記得在log_format中加入$upstream_response_time。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章