nginx-request_time和upstream_response_time的区别
定义
一个正常的请求过程如下:
- 用户发出请求
- 建立NGINX连接
- 发送响应
- 接收程序的响应数据
- 关闭NGINX连接
$request_time
request processing time in seconds with a milliseconds resolution; time elapsed between the first bytes were read from the client and the log write after the last bytes were sent to the client.
指的就是从接受用户请求的第一个字节到发送完响应数据的时间,即包括接收请求数据时间、程序响应时间、输出响应数据时间。 对于此部分对应的是1+2+3+4+5
。
$upstream_response_time
keeps times of responses obtained from upstream servers; times are kept in seconds with a milliseconds resolution. Several response times are separated by commas and colons like addresses in the $upstream_addr variable.
是指从Nginx向后端(php-cgi)建立连接开始到接受完数据然后关闭连接为止的时间。 对于此部分对应的是2+3+4+5
。
从上面的描述可以看出,
$request_time
肯定大于等于$upstream_response_time
,特别是使用POST方式传递参数时,因为Nginx会把request body
缓存住,接受完毕后才会把数据一起发给后端。所以如果用户网络较差,或者传递数据较大时,$request_time
会比$upstream_response_time
大很多。如果要从access_log中查看较慢的接口的话,可以在
log_format
中加入$upstream_response_time
。
分析
从网上看到下列一组图片,感觉画的很形象。
request_time
是从接收到客户端的第一个字节开始,到把所有的响应数据都发送完为止。
upstream_response_time
是从与后端建立TCP连接开始到接收完响应数据并关闭连接为止。
所以,request_time
会大于等于upstream_response_time
。
性能优化
对于较高的request_time
很可能是由于连接速度较慢的客户端造成的,对此无能为力,但是较高的request_time
并不代表服务器或者程序的性能不够。
总体来说,没必要在request_time
上花费较多时间,而是应该重点关注upstream_response_time
。
nginx 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 #请求处理时间,单位为秒,精度毫秒;从读入客户端的第一个字节开始,知道把最后一个字符发送给客户端后进行日志写入位置。
$time_iso8601 ISO8601标准格式下的本地时间
$time_local #通用日志格式下的本地时间
Nginx 对应的格式
log_format aka_logs escape=json
'{"@timestamp":"$time_iso8601",'
'"host":"$hostname",'
'"server_ip":"$server_addr",'
'"client_ip":"$remote_addr",'
'"xff":"$http_x_forwarded_for",'
'"domain":"$host",'
'"url":"$uri",'
'"referer":"$http_referer",'
'"args":"$args",'
'"upstreamtime":"$upstream_response_time",'
'"responsetime":"$request_time",'
'"request_method":"$request_method",'
'"status":"$status",'
'"size":"$body_bytes_sent",'
'"request_body":"$request_body",'
'"request_length":"$request_length",'
'"protocol":"$server_protocol",'
'"upstreamhost":"$upstream_addr",'
'"file_dir":"$request_filename",'
'"http_user_agent":"$http_user_agent"'
'}';
转载
1.https://zhuanlan.zhihu.com/p/438152265?utm_id=0