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 地址。这当然应该是代理服务器的地址。