主动模式和被动模式都是相对 zabbix agent而言的
Zabbix默认是被动模式,如果有100个监控项,被动模式需要 Zabbix Server找 Zabbix Agent要100次
主动模式是Zabbix Server给 Zabbix Agent发送一个包括100个监控项的任务清单,Zabbix Agent根据任务清单,采集好100个监控项的值,主动汇报给 Zabbix Server这100个监控项,Zabbix Agent主动模式只需要发送一次数据,大大提高了传输效率。
被动模式: Server 向 Agent 请求获取监控项的数据,Agent返回数据。此为默认模式,如果有100个监控项,则需要100次交互
主动模式: Agent 请求 Server 获取主动的监控项列表,并主动将监控项内需要检测的数据提交给server/proxy,如有100个监控项,只需要1次交互即可
注意: 两种模式可以在Zabbix Server上同时存在,可以将一部分监控项设为主动,其它设为被动模式
被动监测通信过程如下:
Server打开一个TCP连接
Server发送请求agent.ping
Agent接收到请求并且响应<HEADER><DATALEN>
Server处理接收到的数据
关闭TCP连接
被动模式每获取一个监控项都需要打开一个tcp连接,这样当监控项越来越多时,Zabbix Server会打开很多
端口,就会出现server端性能瓶颈问题。主动模式监测通信过程如下:
zabbix agent 首先向ServerActive配置的IP请求获取active items,获取并提交active items数据值给server或者proxy。
zabbix多久获取一次active items?
它会根据agent的配置文件中的RefreshActiveChecks的频率进行,如果获取失败,那么将会在60秒之后重试。主动模式的流程分两个部分:
获取ACTIVE ITEMS列表
Agent主动打开一个TCP连接(主动检测变成Agent打开)
Agent请求items检测列表
Server返回items列表
Agent 处理响应
关闭TCP连接
Agent开始收集数据主动检测提交数据过程
Agent建立TCP连接
Agent批量提交items列表收集的所有监控项数据
Server处理数据,并返回响应状态
关闭TCP连接被动模式
被动模式是指 zabbix agent 被动的接受zabbix server(或者Zabbix Proxy)周期性发送过来的数据收集指令
此为默认的工作方式。
在被动模式之下,zabbix server会根据主机关联的模板中的监控项和数据采集间隔时间,周期性的打开随机端口并向zabbix agent服务器的10050端口发起tcp连接,然后发送获取监控项数据的指令,即zabbix server发送什么指令那么zabbix agent就收集什么数据,zabbix server什么时候发送指令,zabbix agent就什么时候采集,zabbix server不发送指令,zabbix agent就一直不响应,所以zabbix agent也不用关心其监控项和数据采集周期间隔时间。
被动模式的优点就是配置简单,安装后即可使用,因此也成为zabbix的默认工作模式,但是被动模式的最大问题就是会加大zabbix server的负载,在数百甚至数千台服务器的环境下会导致zabbix server需要轮训向每个zabbix agent发送数据采集指令,如果zabbix server负载过高还会导致不能及时获取到最新数据
被动模式因为性能的原因,一台 Zabbix Server 一般只能监控500台以下的主机,更多的主机建议使用主动模式
Zabbix Server 通过Poller进程实现被动模式
root@Zabbix-Server:~#grep StartPollers /etc/zabbix/zabbix_server.conf
### Option: StartPollers
#此数量可以适当进行调整
# StartPollers=5
### Option: StartPollersUnreachable
# StartPollersUnreachable=1
root@Zabbix-Server:~#grep StartAgents /etc/zabbix/zabbix_agentd.conf
# Mandatory: yes, if StartAgents is not explicitly set to 0
### Option: StartAgents
#被动模式的进程数量,默认为3个,可以适当修改
# StartAgents=3
root@Zabbix-Server:~#ps ax|grep poller
87 ? I< 0:00 [edac-poller]
1170 ? S 0:00 /usr/sbin/zabbix_server: http poller #1 [got 0 values in 0.000791 sec, idle 5 sec]
1177 ? S 0:00 /usr/sbin/zabbix_server: proxy poller #1 [exchanged data with 0 proxies in 0.000032 sec, idle 5 sec]
1180 ? S 0:00 /usr/sbin/zabbix_server: poller #1 [got 1 values in 0.001133 sec, idle 1 sec]
1181 ? S 0:00 /usr/sbin/zabbix_server: poller #2 [got 1 values in 0.001408 sec, idle 1 sec]
1186 ? S 0:00 /usr/sbin/zabbix_server: poller #3 [got 0 values in 0.000038 sec, idle 1 sec]
1187 ? S 0:00 /usr/sbin/zabbix_server: poller #4 [got 0 values in 0.000028 sec, idle 1 sec]
1188 ? S 0:00 /usr/sbin/zabbix_server: poller #5 [got 0 values in 0.000005 sec, idle 1 sec]
1189 ? S 0:00 /usr/sbin/zabbix_server: unreachable poller #1 [got 0 values in 0.000035 sec, idle 5 sec]
1197 ? S 0:00 /usr/sbin/zabbix_server: history poller #1 [got 0 values in 0.000007 sec, idle 1 sec]
1198 ? S 0:00 /usr/sbin/zabbix_server: history poller #2 [got 0 values in 0.000023 sec, idle 1 sec]
1202 ? S 0:00 /usr/sbin/zabbix_server: history poller #3 [got 0 values in 0.000025 sec, idle 1 sec]
1204 ? S 0:00 /usr/sbin/zabbix_server: history poller #4 [got 0 values in 0.000071 sec, idle 1 sec]
1205 ? S 0:00 /usr/sbin/zabbix_server: history poller #5 [got 3 values in 0.000104 sec, idle 1 sec]
1208 ? S 0:00 /usr/sbin/zabbix_server: odbc poller #1 [got 0 values in 0.000029 sec, idle 5 sec]
1372 pts/0 R+ 0:00 grep --color=auto poller主动模式
主动模式是由每个zabbix agent 打开本机的随机端口, 主动向 Zabbix Server (或者Zabbix Proxy)的10051端口发起tcp连接请求
主动模式下必须在zabbix agent配置文件中指定zabbix server的IP或者主机名(必须可以被解析为IP地址)
在连接到zabbix server之前zabbix agent是不知道自己要采集那些数据以及间隔多久采集一次数据的,然后在连接到zabbix server以后获取到自己的监控项和数据采集间隔周期时间,之后再根据监控项采集数据并返回给zabbix server
在主动模式下不再需要zabbix serve向zabbix agent发起连接请求,因此主动模式在一定程度上可减轻zabbix server打开的本地随机端口和进程数,在一定程度就减轻了zabbix server的压力。经过优化后可以轻松监控2000台,甚至5000以上的主机
以下场景下生产推荐使用主动模式
Zabbix Server 出现性能瓶颈, 监控队列出现大量延迟的监控项,告警不及时
监控主机超过 500 台以上
Zabbix Agent 默认是被动模式,需要修改配置才能支持主动模式
Zabbix Agent 的关健配置有下面三项
Server=<Zabbix Server> #被动模式指向 Zabbix Server的IP或FQDN,默认模式
ServerActive=<Zabbix Server> #主动模式指向 Zabbix Server的IP或FQDN
Hostname=<当前主机IP> #当前主机的IP,此项必须和Zabbix Server中设置的主机名称相同范例: Zabbix Agent配置主动模式配置
root@ubuntu2204:~#grep '^[^#]' /etc/zabbix/zabbix_agent2.conf
PidFile=/var/run/zabbix/zabbix_agent2.pid
LogFile=/var/log/zabbix/zabbix_agent2.log
LogFileSize=0
Server=zabbix.xiaopohai.icu #被动模式指向 Zabbix Server的IP或FQDN
ServerActive=zabbix.xiaopohai.icu #主动模式指向 Zabbix Server的IP或FQDN
Hostname=10.0.0.103 #当前主机的IP,此项必须和Zabbix Server中设置的主机名称相同
Include=/etc/zabbix/zabbix_agent2.d/*.conf
PluginSocket=/run/zabbix/agent.plugin.sock
ControlSocket=/run/zabbix/agent.sock
Include=./zabbix_agent2.d/plugins.d/*.conf
root@ubuntu2204:~#systemctl restart zabbix-agent2