背景
最近发现以前部署的Zabbix Server突然连不上几台AWS的机器了。刚部署完成的时候是可以连接上的。所以借着这次查找并解决问题的过程,简单了解了一下Zabbix Agent的工作模式。
Zabbix Agent的工作模式
Zabbix-Agent的工作模式可以分为主动模式(Active)和被动模式(Passive)。
主动模式: Zabbix-Agent主动连接Zabbix-Server,对Zabbix-Server的性能开销较少,适合大规模环境使用。
被动模式:Zabbix-Server向Zabbix-Agent请求数据,Zabbix-Agent被动接受数据请求后回应,属于一对一的响应模式。比如有100个监控项,Zabbix-Server需要向Zabbix-Agent 请求100次,同时,Zabbix-Agent在响应Zabbix-Server时,对监控项数据采集也需要消耗时间,Zabbix-Server 只能耗着时间安静地等待Zabbix-Agent。
相对于主动模式的高效,被动模观时间开销和发送数据量上都处于劣势,对Zabbix-Server的性能开销较大,适合小规模环境使用。
解决Agent无法连接的问题
查看一下zabbix相关的进程,发现zabbix进程还运行着。那应该还是连接不上的问题。
ps aux | ag zabbix
root 19035 0.0 0.0 13424 768 pts/0 S+ 15:08 0:00 ag zabbix
zabbix 55291 0.0 0.0 85036 1308 ? SN 14:48 0:00 /usr/sbin/zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf
zabbix 55292 0.0 0.0 85036 1888 ? SN 14:48 0:00 /usr/sbin/zabbix_agentd: collector [idle 1 sec]
zabbix 55293 0.0 0.0 85036 2220 ? SN 14:48 0:00 /usr/sbin/zabbix_agentd: listener #1 [waiting for connection]
zabbix 55294 0.0 0.0 85036 2220 ? SN 14:48 0:00 /usr/sbin/zabbix_agentd: listener #2 [waiting for connection]
zabbix 55295 0.0 0.0 85036 2220 ? SN 14:48 0:00 /usr/sbin/zabbix_agentd: listener #3 [waiting for connection]
zabbix 55296 0.0 0.0 85036 2300 ? SN 14:48 0:00 /usr/sbin/zabbix_agentd: active checks #1 [idle 1 sec]
zabbix 55297 0.0 0.0 85036 2300 ? SN 14:48 0:00 /usr/sbin/zabbix_agentd: active checks #2 [getting list of active checks]
同时,从进程输出中看到了Zabbix Agent的配置文件。进到配置文件中就看到了工作模式的配置和agent相关的日志文件了。
这里的Server配置项用于设置被动模式连接的Zabbix-Server的IP地址,ServerActive配置项用于设置主动模式连接的Zabbix-Server的IP地址。
vim /etc/zabbix/zabbix_agentd.conf
LogFile=/tmp/zabbix_agentd.log
Include=/etc/zabbix/zabbix_agentd.d/
Server=xxxx,xxxx,xxxx
ServerActive=xxxx
HostnameItem=system.hostname
AllowKey=system.run[*]
HostMetadata=aws prod linux
PidFile=/run/zabbix/zabbix_agentd.pid
UnsafeUserParameters=1
再看一下日志文件里的内容,这里也写的很明显了,Agent拒绝接收了从Server发过来的连接请求。涉及到host敏感信息,这里把host信息全都用xxxx替代了。
59371:20220130:142059.118 failed to accept an incoming connection: connection from "xxxx" rejected, allowed hosts: "xxxx,xxxx,xxxx"
看了一下conf中的Server和ServerActive的配置,确实没有写上对应的Server host。所以这里应该是配置文件被谁改过了。接下来我们把Zabbix Server的host添加到配置文件(Server配置项),然后再重启zabbix-agent,这样之后就可以连上了。
重启命令:
systemctl restart zabbix-agent
日志文件里的内容:
24531:20220130:142705.998 Starting Zabbix Agent [xxxx]. Zabbix 5.4.9 (revision d81e50696f).
24531:20220130:142705.998 **** Enabled features ****
24531:20220130:142705.998 IPv6 support: YES
24531:20220130:142705.998 TLS support: YES
24531:20220130:142705.998 **************************
24531:20220130:142705.998 using configuration file: /etc/zabbix/zabbix_agentd.conf
24531:20220130:142705.998 agent #0 started [main process]
24532:20220130:142705.999 agent #1 started [collector]
24533:20220130:142705.999 agent #2 started [listener #1]
24534:20220130:142705.999 agent #3 started [listener #2]
24535:20220130:142706.000 agent #4 started [listener #3]
24536:20220130:142706.000 agent #5 started [active checks #1]
24537:20220130:142706.000 agent #6 started [active checks #2]
接下来也可以在Zabbix网页上看到相应的监控信息了。