应用程序报告超时。但是 nginx 没有记录或日志

应用程序报告超时。但是 nginx 没有记录或日志

我们通过 nginx/uwsgi 提供 Django 服务。我们在 VPC 后面使用 AWS ELB。

这是针对移动客户端的网络服务。

我们在开发过程中收到了超时报告,因此我们在每个请求中添加了 request_id 的概念。

  1. 客户端生成请求 ID
  2. 发送 GET /request?_request_id=ABDFEFE
  3. 如果发生错误,则将错误连同请求 ID 一起报告给服务器

我现在遇到的问题是,我收到了在野外发生的超时错误报告。但是相关的 request_id 不会显示在任何 nginx 或 uwsgi 日志中。

我有点怀疑亚马逊弹性负载均衡器。但我不能确定。由于超时,我们没有 ELB 标头可供查看,也没有状态代码或响应主体等任何内容。

我们使用 newrelic 来监控我们的后端。有时它会记录 3-4 秒的“慢速事务”。(与大多数客户端库中常见的 30 秒超时不同)

实际问题是:下一步该看哪里?根据我以及服务器上的数据,实际上没有任何问题,但是超时仍然存在。此时我甚至不知道如何开始调试。应用服务器的运行容量约为 10%(相对于内存和 CPU)正在记录缓慢的 SQL 查询(那里也没有什么有趣的东西)

(我也在单独调查客户端错误)

提前致谢。

答案1

鉴于客户端是移动设备,问题可能不在您或 ELB 上。

AWS ELB 不会直接丢弃流量;或者至少不会不通知您。如果问题出在 ELB 中,那么您应该会在 ELB 指标中看到这一点;在这种情况下,我会首先检查 ELB_5XX 或 Spillover 指标。不过,鉴于您的监控显示该服务处于在线状态,这种情况不太可能发生。

相关内容