我目前有一个中等规模的集群(15 台服务器),其中 3 个节点运行 nginx 负载平衡和 ip_hash。被平衡的协议连接率非常高,因此我将 max_fails 设置得相当高,以避免误报服务器宕机消息。
有没有办法监控 nginx 何时将服务器标记为离线,以及何时将其标记为重新在线?访问/错误日志非常庞大,我找不到任何特定的错误消息来 grep/解析以找出服务器何时被视为“坏的”。
答案1
我们也尝试为我们的 nginx 执行此操作,最终了解到 NGiNX 会根据每个工作进程保存上游状态,因此,除非您只有一个工作进程,否则很难使用模块进行跟踪。
但是,我们确实注意到,如果您的日志中有上游数据,它将指出 nginx 何时命中多个后端,此日志格式:
log_format main '$status:$request_time:$upstream_response_time:$pipe:$body_bytes_sent $connection $remote_addr $host $remote_user [$time_local] "$request" "$http_referer" "$http_user_agent" "$http_x_forwarded_for" $upstream_addr $upstream_cache_status';
通常会产生如下的行:
304:0.001:0.001:.:0 26572217 ...
然而,如果两个上游都出现故障,它将开始显示:
304:20.537:10.001, 10.002, 0.534:.:0 26572217 ...
它还会将所有上游放入 $upstream_addr 中,这样您就可以看到哪些上游也出现了故障。