我的服务器上有一个日志收集服务,它使用的是haproxy。所有来自外部的请求都通过haproxy服务。
当我从curl/postman调用日志收集服务时,所有服务的日志收集都在后端进行,并在客户机上下载一个zip。
即使对于30 GB的文件,使用curl/postman也会发生这种情况。在这种情况下,日志收集可能需要15-20分钟。
但在使用浏览器时,操作会进入循环行为,即。haproxy不断从客户端获取新的请求,而旧的请求具有haproxy_termination_state:虽然网络选项卡不显示任何新的请求到服务器,并永远停留在挂起状态。
{
"app": "haproxy",
"content_type": "-",
"dst_connect_time": "2",
"dst_ip": "x.x.x.32",
"dst_port": "8090",
"dst_response_time": "1126057",
"duration": "1126059",
"haproxy_backend": "x_read",
"haproxy_termination_state": "CD",
"host": "x",
"http_status": "200",
"msg": "200 GET /x/api/v1/logs?minTime=2023-10-03T03:30:03.634Z&maxTime=2023-10-10T03:30:03.634Z HTTP/1.1",
"request_bytes": "1094",
"response_bytes": "4083",
"src_ip": "x.x.x.53",
"src_port": "49605",
"timestamp": "2023-10-10T03:48:55Z",
"user_agent": "like Gecko) Chrome/117.0.0.0 Safari/537.36"
}
由于curl和postman工作正常,这似乎是一个浏览器特定的问题。我已经检查了系统上的空间(这很好),在Chrome上下载设置(这似乎也很好)。
当haproxy在内部重试请求或浏览器再次发送请求而不显示在网络选项卡上时,是否有任何情况?
它在我的环境中工作正常,即使请求必须等待超过5分钟。但问题发生在客户的环境中。
1条答案
按热度按时间qni6mghb1#
当haproxy在内部重试请求或浏览器再次发送请求而不显示在网络选项卡上时,是否有任何情况?
是的。Chrome、Firefox和Edge都有5分钟的HTTP请求超时。
在这种情况下,日志收集可能需要15-20分钟。
那么你就不能从浏览器同步请求日志。您需要使用comet或web sockets(我建议这些实现一个重定向到内容的标记系统,而不是直接提供内容)。