如何在Nginx日志中查看不可用的服务器?

问题描述 投票:4回答:3

在Nginx日志中,哪里会说服务器不可用,因为它在x秒内失败了y次?

我在nginx的上游块中有一组服务器,每个服务器都设置了fail_timeoutmax_fails值,如下所示:

upstream loadbalancer {
    server ip1:80 max_fails=3 fail_timeout=60s;
    server ip2:80 max_fails=3 fail_timeout=60s;
}

[如果我有意关闭了其中一台服务器(假设为ip:80),NGINX将返回一个503,我将其标记为无效的标头。因此,我确保NGINX在60秒内将服务器击中3次。

我希望在日志中有一些内容将服务器标记为不可用,即fail_timeout已插入。但是我什么也找不到。

这是我的日志记录配置:

access_log /var/log/nginx/access.log  main; 
error_log /var/log/nginx/error.log warn;
logging nginx health-monitoring
3个回答
1
投票

我不确定是否可以获取不可用服务器的日志。但是,例如,您可以执行lsof命令以通过其PID获取httpd root的其他列表日志文件。

1)首先执行此命令以获取您的HTTPD根目录的PID:

  > ps axu |grep httpd

2)然后复制root的PID。可以说PID为1234

3)接下来,我们使用PID 1234并执行最终命令以获取httpd root

的日志文件。
  > lsof -p 1234 |grep log

这确实帮助我找到了很多丢失的日志。现在,您可以检查日志文件是否包含与不可用的服务器有关的任何内容。祝你好运


0
投票

您应该在错误日志中看到有关原因的有用信息。这是Nginx 1.8中的一些示例

 [error] 9369#0: *837 connect() failed (111: Connection refused) while connecting to upstream

 [error] 9369#0: *851 connect() failed (113: No route to host) while connecting to upstream

 [error] 9369#0: *844 no live upstreams while connecting to upstream

如您所见,日志级别为error,因此在您的配置中这不是问题。

[您提到设置503标头将主机标记为不可用。在默认的Nginx设置中不会检测到此问题。要使用特定的响应代码确定上游主机状态,请查看proxy_next_upstream选项。

将其设置为以下内容将在结果列表中包括503个响应代码,这些响应代码被视为上游故障:

proxy_next_upstream error timeout http_503;

从文档中:该指令还定义了与服务器通信的不成功尝试。错误,超时和invalid_header的情况始终被认为是失败的尝试,即使未在指令中指定它们也是如此。仅当在指令中指定了http_500,http_502,http_503和http_504的情况时,它们才被视为失败尝试。永远不会将http_403和http_404的情况视为不成功的尝试]


0
投票

当服务器超过max_fails时,现在将显示一条日志消息。它已在1.9.1中添加。日志级别为警告,消息显示“上游服务器暂时禁用”。

© www.soinside.com 2019 - 2024. All rights reserved.