Nginx 想要將每個 request 花費的時間記錄起來,要怎麼設定呢?
Nginx 紀錄每個 request 的時間
Nginx 預設 log_format 就有支援這個參數,只需要另外設定打開,詳細可見:Module ngx_http_log_module
Nginx 紀錄每個 request 花費時間的設定方式
預設 log_format combined 的格式 (不可使用 combined,預設無法覆蓋),預設 combined 的格式如下:
- log_format combined '$remote_addr - $remote_user [$time_local] ' '"$request" $status $body_bytes_sent ' '"$http_referer" "$http_user_agent"' '
需使用另外一個名字,combinedtime 來加入時間參數(名字可自取)
- log_format combinedtime '$remote_addr - $remote_user [$time_local] ' '"$request" $status $body_bytes_sent ' '"$http_referer" "$http_user_agent"' ' elapsed=${request_time}s';
加入後,於每個使用到的 access_log 指定,如下範例:
- access_log /var/log/nginx/access.log combinedtime;
設定好後,重新啟動 Nginx 即可。
注意:
- apache 的 elapsed 是 us
- nginx 的 elapsed 是 s
下述摘錄自此篇:nginx日誌配置
- $remote_addr, $http_x_forwarded_for 記錄客戶端 IP
- $remote_user 記錄客戶端用戶名稱
- $request 記錄請求的 URL 和 HTTP Protocol
- $status 記錄請求狀態
- $body_bytes_sent 發送給客戶端的 Bytes,不包括 Header 的大小;該變數與 Apache mod_log_config 的 "%B" 相容
- $bytes_sent 發送給客戶端的 總Bytes數
- $connection 連接的序列號
- $connection_requests 當前通過一個連接獲得的請求數量
- $msec 日誌寫入時間。單位為秒,精度是毫秒
- $pipe 如果請求是通過HTTP流水線(pipelined)發送,pipe值為"p",否則為"."
- $http_referer 記錄從哪個頁面鏈接訪問過來的
- $http_user_agent 記錄客戶端瀏覽器相關信息
- $request_length 請求的長度(包括請求行,請求頭和請求正文)
- $request_time 請求處理時間,單位為秒,精度毫秒; 從讀入客戶端的第一個位元組開始,直到把最後一個字元發送給客戶端後進行日誌寫入為止
- $time_iso8601 ISO8601標準格式下的本地時間
- $time_local 通用日誌格式下的本地時間