解决方案

解决方案

Zabbix 监控的其中一个服务器无法访问。我不知道原因,因为其他服务器都正常运行。

  • 被监控服务器上的zabbix-agent服务已运行。
  • 我们有几台服务器,全部由 zabbix 监控。/etc/zabbix/zabbix_agentd.conf我发现这台有问题的服务器与另一台正常运行的服务器没有区别。
  • zabbix服务器和被监控的服务器(agent-server)均由Amazon托管。
  • 所有 zabbix 监控的服务器都链接到一个安全组,该安全组包含两个入站规则,分别针对 zabbix-server IP 的端口 10050 和 10051。因此,应该允许从 zabbix-server 到这些服务器上的 zabbix-agents 的传入请求。它们在多台服务器上都有效,但在这台服务器上无效。
  • zabbix-server 具有不同的安全组,并且没有为端口 10050 和 10051 设置规则,因此应该阻止它们。Iptables 没有返回任何规则。
  • 我可以打开从 zabbix 服务器到代理的 telnet 会话。它会自动断开连接,但可以连接。所以我猜防火墙不是问题所在。
  • 服务器:Amazon Linux(类似 Centos)
  • 安装的文件:http://repo.zabbix.com/zabbix/2.2/rhel/6/x86_64/zabbix-release-2.2-1.el6.noarch.rpm
  • 所有这些代理和服务器上的 SELinux 均被禁用。

zabbix-agent服务重启后的Agent日志

 10939:20151127:093938.268 Starting Zabbix Agent [agent-server.test]. Zabbix 2.2.11 (revision 56693).
 10939:20151127:093938.268 using configuration file: /etc/zabbix/zabbix_agentd.conf
 10942:20151127:093938.269 agent #1 started [listener #1]
 10945:20151127:093938.269 agent #4 started [active checks #1]
 10941:20151127:093938.270 agent #0 started [collector]
 10944:20151127:093938.270 agent #3 started [listener #3]
 10943:20151127:093938.271 agent #2 started [listener #2]
 10945:20151127:141742.930 active check configuration update from [zabbix-server-ip:10051] started to fail 
 (cannot connect to [[zabbix-server-ip]:10051]: [4] Interrupted system call)

当我 telnet 到代理服务器,然后输入 时agent.version,它返回:ZBXD2.2.11

/etc/zabbix/zabbix_server.conf(服务器)的内容:

ListenPort=10051
LogFile=/var/log/zabbix/zabbix_server.log
LogFileSize=0
PidFile=/var/run/zabbix/zabbix_server.pid
DBName=zabbix
DBUser=zabbix
DBPassword=******
DBSocket=/var/lib/mysql/mysql.sock
SNMPTrapperFile=/var/log/snmptt/snmptt.log
AlertScriptsPath=/usr/lib/zabbix/alertscripts
ExternalScripts=/usr/lib/zabbix/externalscripts

/etc/zabbix/zabbix_agentd.conf(代理)的内容

PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
EnableRemoteCommands=1
Server=zabbix-server-ip
ListenPort=10050
StartAgents=3
# ServerActive=zabbix-server-ip # commented out
Hostname=server.test
Timeout=3
AllowRoot=1
Include=/etc/zabbix/zabbix_agentd.d/

zabbix服务器上的Netstat

$ sudo netstat -lpn | grep zabbix
tcp        0      0 0.0.0.0:10051               0.0.0.0:*                   LISTEN      7624/zabbix_server  
tcp        0      0 :::10051                    :::*                        LISTEN      7624/zabbix_server

有问题的代理上的 Netstat

$ sudo netstat -lpn | grep zabbix
tcp        0      0 0.0.0.0:10050               0.0.0.0:*                   LISTEN      3248/zabbix_agentd  
tcp        0      0 :::10050                    :::*                        LISTEN      3248/zabbix_agentd 

工作代理上的 Netstat

$ sudo netstat -lpn | grep zabbix
tcp        0      0 0.0.0.0:10050               0.0.0.0:*                   LISTEN      24242/zabbix_agentd 
tcp        0      0 :::10050                    :::*                        LISTEN      24242/zabbix_agentd

主动代理与被动代理

  • 我已经在服务器上为有问题的代理 IP 打开了端口 10051。
  • Telnet 表明从代理到服务器均可正常工作。
  • 我已激活ActiveServer以 zabbix-server-ip 作为值的选项。重新启动代理后,日志中的错误消息消失了。
  • 问题仍然存在...

下次尝试:

  • 我对工作代理做了同样的事情,可以从代理 telnet 到服务器。
  • ActiveServer设置好 zabbix-server-ip 后,agent 重启
  • StartAgents设置为0,强制使用活性剂。
  • Zabbix 报告该服务器无法访问...
  • 然后我重置为被动。

总而言之,多台服务器的代理配置中可能已设置了主动模式,但从未起作用。所有报告均来自被动代理。

代理接口

  • 通过“监控”>“最新数据”打开,选择 host=all,单击服务器名称,然后选择“主机清单”
  • 工作代理显示其自己的IP地址。
  • 有问题的代理显示zabbix-server-ip。

我不知道为什么会发生这种情况,但这看起来很奇怪。

什么原因会导致此连接问题?如何将服务器与代理重新连接?

解决方案

事实证明,主机配置中设置的 IP 地址(通过 Web 界面)是 zabbix 服务器本身的 IP 地址。这当然应该是代理服务器的地址。

答案1

代理机上的 SELinux 和 iptables 当前设置如何?您能从代理通过端口 10051 远程登录到服务器吗?

您可以尝试使用代理上的 tcpdump 检查盒子之间的连通性:tcpdump -i your_interface tcp port 10050。使用它您可以看到传入/传出的数据包。

答案2

我认为,您需要了解 zabbix 的主动和被动连接模式才能解决问题。以下是zabbix 文档

被动和主动检查

Zabbix 代理可以执行被动和主动检查。

在被动检查中,代理会响应数据请求。Zabbix 服务器(或代理)会请求数据,例如 CPU 负载,然后 Zabbix 代理会发回结果。

主动检查需要更复杂的处理。代理必须首先从 Zabbix 服务器检索项目列表以进行独立处理。然后它会定期向服务器发送新值。

现在要使主动模式工作,您需要在 Zabbix 服务器上打开端口 10051,以便客户端的代理可以连接到它。从您收到的错误来看,这就是问题所在:

10945:20151127:141742.930 从 [zabbix-server-ip:10051] 开始主动检查配置更新失败 (无法连接到 [[zabbix-server-ip]:10051]: [4] 中断的系统调用)

您所做的测试是关于从 Zabbix 服务器到客户端的连接,它似乎没有任何问题。但这还不足以使主动模式发挥作用。在您的情况下,从客户端代理到端口 10051 上的服务器的连接不起作用,您需要关注这一点。

您提供的信息具有误导性:

zabbix-server 具有不同的安全组,并且没有为端口 10050 和 10051 设置规则,因此应该阻止它们。Iptables 没有返回任何规则。

由于您使用的是主动模式,因此上述有关端口的信息可能不正确。服务器必须打开端口 10051 以供客户端连接,否则您必须使用被动模式。

因此,请检查两者之间必要的防火墙规则,并确保客户端/代理可以通过此端口访问服务器。我确信另一个代理(在另一个工作服务器上)可以通过端口 10051 访问 Zabbix 服务器。

答案3

事实证明,主机配置中设置的 IP 地址(通过 Web 界面)是 zabbix 服务器本身的 IP 地址。这当然应该是代理服务器的地址。

相关内容