7-主动模式和被动模式
Zabbix 有两种工作模式: 主动和被动模式
无论是模式还是被动模式,都是站在zabbix agent 角度来说的工作模式
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秒之后重试。
主动模式的流程分两个部分**:**
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:~# ps ax|grep poller 50 ? I< 0:00 [edac-poller] 3019 ? S 0:03 /usr/sbin/zabbix_server: http poller #1 [got 0 values in 0.001002 sec, idle 5 sec] 3026 ? S 0:00 /usr/sbin/zabbix_server: java poller #1 [got 0 values in 0.000051 sec, idle 5 sec] 3027 ? S 0:00 /usr/sbin/zabbix_server: java poller #2 [got 0 values in 0.000063 sec, idle 5 sec] 3028 ? S 0:00 /usr/sbin/zabbix_server: java poller #3 [got 0 values in 0.000035 sec, idle 5 sec] 3033 ? S 0:00 /usr/sbin/zabbix_server: java poller #4 [got 0 values in 0.000046 sec, idle 5 sec] 3035 ? S 0:00 /usr/sbin/zabbix_server: java poller #5 [got 0 values in 0.000049 sec, idle 5 sec] 3036 ? S 0:00 /usr/sbin/zabbix_server: java poller #6 [got 0 values in 0.000036 sec, idle 5 sec] 3039 ? S 0:00 /usr/sbin/zabbix_server: java poller #7 [got 0 values in 0.000026 sec, idle 5 sec] 3043 ? S 0:00 /usr/sbin/zabbix_server: java poller #8 [got 0 values in 0.000051 sec, idle 5 sec] 3045 ? S 0:00 /usr/sbin/zabbix_server: java poller #9 [got 0 values in 0.000034 sec, idle 5 sec] 3047 ? S 0:00 /usr/sbin/zabbix_server: java poller #10 [got 0 values in 0.000046 sec, idle 5 sec] 3048 ? S 0:00 /usr/sbin/zabbix_server: proxy poller #1 [exchanged data with 0 proxies in 0.000070 sec, idle 5 sec] 3054 ? S 0:06 /usr/sbin/zabbix_server: poller #1 [got 2 values in 0.000166 sec, idle 1 sec] 3055 ? S 0:06 /usr/sbin/zabbix_server: poller #2 [got 2 values in 0.002588 sec, idle 1 sec] 3058 ? S 0:06 /usr/sbin/zabbix_server: poller #3 [got 1 values in 0.005135 sec, idle 1 sec] 3060 ? S 0:06 /usr/sbin/zabbix_server: poller #4 [got 0 values in 0.000085 sec, idle 1 sec] 3062 ? S 0:06 /usr/sbin/zabbix_server: poller #5 [got 0 values in 0.000063 sec, idle 1 sec] 3064 ? S 0:00 /usr/sbin/zabbix_server: unreachable poller #1 [got 0 values in 0.000056 sec, idle 5 sec] 7769 pts/0 S+ 0:00 grep --color=auto poller
范例: 查看被动模式下 Zabbix agent 进程和端口打开情况
[root@rocky8 ~]# grep StartAgents /etc/zabbix/zabbix_agentd.conf # Mandatory: yes, if StartAgents is not explicitly set to 0 ### Option: StartAgents # StartAgents=3
[root@rocky8 ~]# ps ax|grep zabbix 1033 ? S 0:00 /usr/sbin/zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf 1034 ? S 2:10 /usr/sbin/zabbix_agentd: collector [idle 1 sec] 1035 ? S 0:08 /usr/sbin/zabbix_agentd: listener #1 [waiting for connection] 1037 ? S 0:08 /usr/sbin/zabbix_agentd: listener #2 [waiting for connection] 1038 ? S 0:08 /usr/sbin/zabbix_agentd: listener #3 [waiting for connection] 1039 ? S 0:01 /usr/sbin/zabbix_agentd: active checks #1 [idle 1 sec] 12180 pts/0 S+ 0:00 grep --color=auto zabbix
[root@rocky8 ~]# tail /var/log/zabbix/zabbix_agentd.log 1033:20220727:090507.434 TLS support: YES 1033:20220727:090507.434 ************************** 1033:20220727:090507.434 using configuration file: /etc/zabbix/zabbix_agentd.conf 1033:20220727:090507.435 agent #0 started [main process] 1034:20220727:090507.449 agent #1 started [collector] 1035:20220727:090507.451 agent #2 started [listener #1] 1037:20220727:090507.453 agent #3 started [listener #2] 1039:20220727:090507.455 agent #5 started [active checks #1] 1038:20220727:090507.456 agent #4 started [listener #3] 1039:20220727:090507.461 active check configuration update from [127.0.0.1:10051] started to fail (cannot connect to [[127.0.0.1]:10051]: [111] Connection refused)
主动模式介绍
主动模式是由每个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 Agent 实现主动模式
在Zabbix Agent实现主动模式流程
在 Zabbix Agent 配置主机模式相关配置
在 Zabbix Server 创建配置有主动模式监控项的模版
关联主动模版至支持主动模式的 Agent 主机
注意基于原被动模版克隆生成的主动模式模版,不是所有监控项都能改为主动模式比如agent.ping监
控项如果改为主动模式 ZBX 提示将无法变绿
Zabbix Agent 配置主动模式
root@zabbix-server:~# grep StartTrappers /etc/zabbix/zabbix_server.conf ### Option: StartTrappers #进程数可以适当调整 # StartTrappers=5 默认是5个最多1000个 修改成10 root@zabbix-server:~# sed -i 's/# StartTrappers=5/StartTrappers=10/' /etc/zabbix/zabbix_server.conf 重启zabbix-server服务 root@zabbix-server:~# systemctl restart zabbix-server.service
查看进程数量 root@zabbix-server:~# ps ax|grep trapper 8485 ? S 0:00 /usr/sbin/zabbix_server: trapper #1 [processed data in 0.000835 sec, waiting for connection] 8486 ? S 0:00 /usr/sbin/zabbix_server: trapper #2 [processed data in 0.000000 sec, waiting for connection] 8487 ? S 0:00 /usr/sbin/zabbix_server: trapper #3 [processed data in 0.001758 sec, waiting for connection] 8488 ? S 0:00 /usr/sbin/zabbix_server: trapper #4 [processed data in 0.000000 sec, waiting for connection] 8489 ? S 0:00 /usr/sbin/zabbix_server: trapper #5 [processed data in 0.000417 sec, waiting for connection] 8491 ? S 0:00 /usr/sbin/zabbix_server: trapper #6 [processed data in 0.000000 sec, waiting for connection] 8492 ? S 0:00 /usr/sbin/zabbix_server: trapper #7 [processed data in 0.000000 sec, waiting for connection] 8494 ? S 0:00 /usr/sbin/zabbix_server: trapper #8 [processed data in 0.000000 sec, waiting for connection] 8496 ? S 0:00 /usr/sbin/zabbix_server: trapper #9 [processed data in 0.000000 sec, waiting for connection] 8503 ? S 0:00 /usr/sbin/zabbix_server: trapper #10 [processed data in 0.000435 sec, waiting for connection] 8528 pts/0 S+ 0:00 grep --color=auto trapper
Zabbix Agent 默认是被动模式,需要修改配置才能支持主动模式
Server=<Zabbix Server> #有些监控基于被动模式,此处需要指向 Zabbix Server的IP ServerActive=<Zabbix Server> #主动模式指向 Zabbix Server的IP Hostname=<当前主机IP> #当前主机的IP
范例: Zabbix Agent配置主动模式配置
[root@rocky8 ~]# grep '^[^#]' /etc/zabbix/zabbix_agentd.conf PidFile=/var/run/zabbix/zabbix_agentd.pid LogFile=/var/log/zabbix/zabbix_agentd.log LogFileSize=0 Server=10.0.0.81 #有些监控基于被动模式,此处需要指向 Zabbix Server的IP ServerActive=10.0.0.81 #主动模式指向 Zabbix Server的IP Hostname=10.0.0.60 #当前主机的IP Timeout=30 #建议修改 Include=/etc/zabbix/zabbix_agentd.d/*.conf
重启客户端服务
[root@rocky8 ~]# systemctl restart zabbix-agent.service
新增一台主动模式的监控客户机10.0.0.61
[root@rocky8 ~]# cat /etc/redhat-release Rocky Linux release 8.6 (Green Obsidian)
安装zabbix-agent
官方地址
https://www.zabbix.com/cn/download?zabbix=5.0&os_distribution=centos&os_version=8_stream&db=mysql&ws=apache
配置zabbix官方源
[root@rocky8 ~]# rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/8/x86_64/zabbix-release-5.0-1.el8.noarch.rpm
清理缓存
[root@rocky8 ~]# dnf clean all 27 files removed
安装zabbix-agent
[root@rocky8 ~]# dnf install zabbix-agent -y
修改zabbix客户端配置文件,修改为主动模式
vim /etc/zabbix/zabbix_agentd.conf 修改后如下 Server=10.0.0.80 ServerActive=10.0.0.80 Hostname=10.0.0.61 解释: Server=10.0.0.80 这里是不管是主动模式还是被动模式都要填写zabbix-server服务端的IP地址,方便zabbix-server监控这台主机 ServerActive=10.0.0.80 主动模式下,要填写zabbix-server端的IP地址 Hostname=10.0.0.61 主动模式下,这里要填写本机的IP地址,一定要添加本机的IP地址S
设置为启动并设置为开机自启动
[root@rocky8 ~]# systemctl enable zabbix-agent.service --now Created symlink /etc/systemd/system/multi-user.target.wants/zabbix-agent.service → /usr/lib/systemd/system/zabbix-agent.service.
把10.0.0.61这台主机添加zabbix-server上面
再来改一下更新间隔的时间,这里为测试环境,真实环境建议修改时间长一些
默认的是一分钟,我这里修改成10s
修改以后有一些监控项会改过来,有一些不会改过来
把这个模板添加到主机的模板里面,把原来的模板移除掉