7-主动模式和被动模式

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秒之后重试。


主动模式的流程分两个部分**:**

获取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:~# 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


#被动模式下agent主机的日志中会提示以下错误

[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 配置主动模式

Zabbix Server 主动和被动模式无需配置即可支持,还可以支持多个主动和被动模式的Zabbix Agent 同时存在

Zabbix Server 通过 trapper 进程实现主动模式

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 默认是被动模式,需要修改配置才能支持主动模式

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上面

image-20220728110636856.png

image-20220728111144611.png


image-20220728110926016.png


image-20220728161954123.png


image-20220728162439257.png


image-20220728162556022.png


image-20220728162822140.png


image-20220728162940994.png


image-20220728163000549.png



image-20220728163243847.png



再来改一下更新间隔的时间,这里为测试环境,真实环境建议修改时间长一些

默认的是一分钟,我这里修改成10s

image-20220728163632007.png


修改以后有一些监控项会改过来,有一些不会改过来

把这个模板添加到主机的模板里面,把原来的模板移除掉




Powered By Z-BlogPHP 1.7.3

 Theme By 优美模版

本博客为开源博客,本博客联系QQ:372097243