始使用Zabbix来 监控服务器的性能。一开始监控的是几台主要的机子,一直用的很不错,于是将几台不重要的服务器也托进来。这时在有一台服务器上遇到了问题,按照之前相同的 配置完成之后,Zabbix Server一直提示无法访问这台服务器上的Zabbix Agent。查看了一下Zabbix Server的日志,找到了错误提示:

Get value from agent failed: ZBX_TCP_READ() failed: [4] Interrupted system call

于是Google了一下,发现也有很多人遇到了这个错误,错误提示是连接被中断,但是网上的提问好像基本没有得到解决的。

于是自己用对比几台服务器端口的连接来寻找问题,尝试比较telnet时发现了不同,连接正常的服务器都是会显示:

root@kaijia:~# telnet server.kaijia.me 10050 Trying 1.1.1.1... Connected to server.kaijia.me. Escape character is '^]'. Connection closed by foreign host.

1

2

3

4

5

root@:~# telnet server..me 10050

Trying 1.1.1.1...

Connected to server.me.

Escape character is '^]'.

Connection closed by foreign host.

而使用telnet连接Zabbix报告无法连接的服务器时却显示的是:

root@kaijia:~# telnet server.kaijia.me 10050 Trying 2607:fc30:1:4::bc1f:83d7... Trying 1.1.1.1... Connected to server.kaijia.me. Escape character is '^]'. Connection closed by foreign host.

1

2

3

4

5

6

root@:~# telnet server.me 10050

Trying 2607:fc30:1:4::bc1f:83d7...

Trying 1.1.1.1...

Connected to server.me.

Escape character is '^]'.

Connection closed by foreign host.

对比多了一行“Trying 2607:fc30:1:4::bc1f:83d7…”连接IPv6的尝试提示。并且出错的连接“Connection closed by foreign host.”是立即出现的,而正常的服务器都会等待1~2秒才出现。于是Kaijia找到了出错的原因是IPv6设定上的问题,最简单的方法有两种:

  1. 关闭Zabbix Server所在服务器上的IPv6

  2. 在DNS解析中取消Zabbix Agent的AAAA记录

  3. 客户端地址配置错误,导致无法联通。

Kaijia使用了第二种方法,在DNS中将出问题的服务器的AAAA记录删除,然后重启了一下Zabbix Server服务器以清楚DNS缓存,过几分钟之后,连接就正常了。