nginx log記錄請求響應時間

2018.10.22 阿里雲對默認nginx log的分析功能詳細介紹php

有時爲了方便分析接口性能等,須要記錄請求的時長,經過修改nginx的日誌格式能夠作到,如html

添加一個新的log_formatnginx

log_format  timed_combined  '$remote_addr - $remote_user [$time_local] "$request" '併發

                      '$status $body_bytes_sent "$http_referer" 'app

                      '"$http_user_agent" "$http_x_forwarded_for" 'oop

                        '$request_time $upstream_response_time';性能

 而後引用這個新的日誌格式阿里雲

access_log  /var/log/nginx/access.log  timed_combined;日誌

幾個時間變量的解釋code

  • $request_time – Full request time, starting when NGINX reads the first byte from the client and ending when NGINX sends the last byte of the response body
  • $upstream_connect_time – Time spent establishing a connection with an upstream server
  • $upstream_header_time – Time between establishing a connection to an upstream server and receiving the first byte of the response header
  • $upstream_response_time – – Time between establishing a connection to an upstream server and receiving the last byte of the response body

若是使用是阿里雲,就能夠使用他們的日誌服務,方便的查詢到各執行時間了,以下圖:

後記:

2019.9.25 注意,併發請求時,時間有可能會累計,致使對單個請求的時長統計並不許確。

2019.9.26 這個時間跟請求的客戶端網速有關係,不是純的內部處理時長。若是請求客戶端網速越慢,時長越大。並且若是你沒有使用upstream配置,返回的也是整個請求的處理時長(亦跟客戶端網速有關)。

Nginx還支持自定義時間參數的下鑽功能,只要在http頭上添加相關頭字段,並在log_format配置上就能夠提取獲得了。如在php代碼中輸出響應頭db_read_time,而後在Nginx.conf配置log_format記錄此頭的值,如

log_format main 'app_db_read_time=$upstream_http_db_read_time '

參考

https://www.nginx.com/blog/using-nginx-logging-for-application-performance-monitoring/#var_upstream_response_time

https://lincolnloop.com/blog/tracking-application-response-time-nginx/

https://www.nginx.com/blog/using-nginx-logging-for-application-performance-monitoring/

相關文章
相關標籤/搜索