Administrator
发布于 2024-05-16 / 9 阅读
0
0

Zabbix的主动和被动模式工作原理

主动模式和被动模式都是相对 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



评论