Logging Windows中的Nginx$请求\时间和$上游\响应\时间

Logging Windows中的Nginx$请求\时间和$上游\响应\时间,logging,nginx,Logging,Nginx,我在Windows上运行Nginx的访问日志中遇到了一些奇怪的情况。我在访问日志中包括$request\u time和$upstream\u response\u time(将Django作为fcgi上游运行)。据我所知,日志应以千秒为单位表示请求时间,但其输出如下所示: ip|date|request_time|upstream_response_time xx.xx.xx.xxx|[29/Jan/2013:15:29:57 -0600]|605590388736.19374237|0.141

我在Windows上运行Nginx的访问日志中遇到了一些奇怪的情况。我在访问日志中包括$request\u time和$upstream\u response\u time(将Django作为fcgi上游运行)。据我所知,日志应以千秒为单位表示请求时间,但其输出如下所示:

ip|date|request_time|upstream_response_time
xx.xx.xx.xxx|[29/Jan/2013:15:29:57 -0600]|605590388736.19374237|0.141
xx.xx.xx.xxx|[29/Jan/2013:15:30:39 -0600]|670014898176.19374237|0.156
你知道那个巨大的数字到底是什么吗

下面是完整的日志格式(我在上面的示例中删除了一些列)


使用管道分隔符

正如你所建议的,答案如下:

当您向服务器发出请求(
nginx
+
上游
)作为GET时,
$request\u time
结果为正常且可接受的值。这是因为您的上游服务器没有参与其中,即使它参与了,也会使其正常运行

当您执行POST请求时,问题开始出现。根据nginx doc,
$request\u time
变量(仅在日志记录时可用)的值将在所有数据已发送且连接已关闭(也由所有上游和代理)时计算。只有这样,信息才会附加到日志中

那么如何检查一切是否正确呢? 首先向服务器发出GET请求并查看日志文件。请注意,完成调用并将日志信息添加到文件中实际需要多少时间-它应该是真正的值。 接下来,向服务器发出POST请求,并再次查看日志文件。在这里,您可能会看到日志根本不会出现,或者在很长一段时间之后


这意味着什么?检查您的nginx配置文件和上游配置文件,因为在某个地方,连接可能没有关闭,只是挂在空中。您的操作系统或上游服务器可以在一段时间后续订这些连接,但毕竟这可能会导致一些问题,而不仅仅是奇怪的
$request\u time
值。

您能展示一下
log\u格式的指令吗?完成!为了清晰起见,我在示例中删除了一些列,但现在的问题是完整的日志格式,而这个日志文件是用于显示日志格式的吗?在示例日志输出中,我没有包含所有列来对其进行分离。示例输出用于“$remote_addr |$time_local |$request_time |$upstream_response_time”,换句话说,当upstream不工作时,是吗?您可以这样检查:查看您的日志并使用get执行请求,上游时间为0,然后查看日志文件中的秒数。下一步做涉及上游的post请求,并查看它将在日志中显示多少秒。由于nginx doc$request\u time with post将在整个响应完成后计算,因此,如果出于某种原因,您的上游上仍然打开了任何内容,它将不会将其打印到日志中,未读连接关闭,并且可能会在很长时间后发生。
$request\u time:请求处理时间(以秒为单位,分辨率为毫秒);从客户端读取的第一个字节与最后一个字节发送到客户端后的日志写入之间经过的时间
。。。因此,这是衡量慢客户的标准。建议忽略它,而采用
$upstream\u response\u time
log_format  main  '$remote_addr|$time_local]|$request|$request_time|$upstream_response_time|'
                  '$status|$body_bytes_sent|$http_referer|'
                  '$http_user_agent';