Zabbix Agent出现ZBX_TCP_READ() failed: [4] Interrupted system call问题解决
Kaijia这几天开始使用Zabbix来监控服务器的性能。一开始监控的是几台主要的机子,一直用的很不错,于是将几台不重要的服务器也托进来。这时在有一台服务器上遇到了问题,按照之前相同的配置完成之后,Zabbix Server一直提示无法访问这台服务器上的Zabbix Agent(版本是为Ubuntu 12.04源中自带的1.8.11)。Kaijia查看了一下Zabbix Server的日志,找到了错误提示:
Get value from agent failed: ZBX_TCP_READ() failed: [4] Interrupted system call
Kaijia于是Google了一下,发现也有很多人遇到了这个错误,错误提示是连接被中断,但是网上的提问好像基本没有得到解决的。
于是Kaijia自己用对比几台服务器端口的连接来寻找问题,当Kaijia尝试比较telnet时发现了不同,连接正常的服务器都是会显示:
1 2 3 4 5 |
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. |
而使用telnet连接Zabbix报告无法连接的服务器时却显示的是:
1 2 3 4 5 6 |
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. |
对比多了一行“Trying 2607:fc30:1:4::bc1f:83d7…”连接IPv6的尝试提示。并且出错的连接“Connection closed by foreign host.”是立即出现的,而正常的服务器都会等待1~2秒才出现。于是Kaijia找到了出错的原因是IPv6设定上的问题,最简单的方法有两种:
- 关闭Zabbix Server所在服务器上的IPv6
- 在DNS解析中取消Zabbix Agent的AAAA记录
Kaijia使用了第二种方法,在DNS中将出问题的服务器的AAAA记录删除,然后重启了一下Zabbix Server服务器以清楚DNS缓存,过几分钟之后,连接就正常了。
评论