Nginx 紀錄每個 request 的時間

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 通用日誌格式下的本地時間

相關網頁

作者: Tsung

對新奇的事物都很有興趣, 喜歡簡單的東西, 過簡單的生活.

發表迴響

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料