Write by lyc at 2022-06-24
官方博文|Zabbix Agent: 主动模式 VS 被动模式

zabbix-agent 主动与被动模式

1.什么是 zabbix-agent “主动模式” 与 “被动模式”?

当涉及到 zabbix-agent 模式时,可以在 “主动模式” 和 “被动模式” 之间进行选择。每次在前端添加新 “监控项” 或 “主机” 时,您都需要选择项类型。

“主动模式” 和 “被动模式” 最大的区别就是 数据连接的方向

zabbix-agent 被动模式:

“被动模式” 下使用 zabbix-agent,这意味着轮询器 pollerszabbix-server 进程)连接到端口 10050/TCP 上的代理并轮询某个值(例如,主机CPU负载)。轮询器 pollers 等待,直到主机上的代理使用该值进行响应。最后 zabbix-server 获得该值,接着连接关闭。

zabbix-agent 主动模式:

“主动模式” 下,所有数据处理轮询都在 zabbix-agent 上执行,不受 zabbix-server 上的轮询器 pollers 的干扰。但是,zabbix-agent 又需要知道应该监视哪些指标,所以 zabbix-agent 每两分钟(默认情况下)连接一次 zabbix-server 的主动(trapper)端口 10051/TCPzabbix-agent 请求有关项的信息,然后在 zabbix-agent 主机上执行监控程序,并通过相同的 10051/TCP 端口将数据推送到 zabbix-server

2.两种模式各自的优势

拓扑优势

一些使用者可能不希望在他们的环境中有任何传入的连接,甚至不希望有来自内部网络的连接,但是允许出站连接。在这样的场景下,不得不使用主动模式

性能优势

例如有一个需要执行大量 Bash 脚本的场景,该脚本会运行15秒,使用了 “自动发现规则” 的场景就非常常见。

在被动模式下:

zabbix-serverpollers 轮询器将等待15秒直到获得该值,且期间不能处理任何其他项。zabbix-server 的轮询器 pollers 的等待时间将显著增加,这时必须增加轮询器 pollers 进程数量才能跟上监控项目的数量:

1
2
3
4
5
6
7
8
9
10
/etc/zabbix/zabbix_server.conf

### Option: StartPollers
# Number of pre-forked instances of pollers.
#
# Mandatory: no
# Range: 0-1000
# Default:
# StartPollers=5
StartPollers=100

同时需要增加双端的超时时间 Timeout 大于 Bash 脚本的运行时间 :

  • zabbix-server 的超时时间 Timeout:指定我们等待 zabbix-agent, SNMP 或其他的外部设备等待的时间(单位秒)
  • zabbix-agent 的超时时间 Timeout:如果设置 3秒,那么这个进程会等待 3秒或者规定时间内拿到了返回值,进程关闭。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/etc/zabbix/zabbix_server.conf

### Option: Timeout
# Specifies how long we wait for agent, SNMP device or external check (in seconds).
#
# Mandatory: no
# Range: 1-30
# Default:
# Timeout=3
Timeout=30

################################################################################################

/etc/zabbix/zabbix_agentd.conf

### Option: Timeout
# Spend no more than Timeout seconds on processing
#
# Mandatory: no
# Range: 1-30
# Default:
# Timeout=3
Timeout=30

最后可以适当增加 zabbix-agent 端的 StartAgents,默认值 3。

表示有三个内部进程可以执行所需的检查,在默认情况下,Agent 可以同时处理三个监控项的请求数据。如果有大量运行缓慢的检查,并且 Agent 进程处理达到瓶颈,则可以增加此参数。

1
2
3
4
5
6
7
8
9
10
11
/etc/zabbix/zabbix_agentd.conf

### Option: StartAgents
# Number of pre-forked instances of zabbix_agentd that process passive checks.
# If set to 0, disables passive checks and the agent will not listen on any TCP port.
#
# Mandatory: no
# Range: 0-100
# Default:
# StartAgents=3
StartAgents=10

综上所述,在 “被动模式” 下运行缓慢的检查会降低 zabbix-server 的性能:因此我们需要增加以下3个参数:

  • zabbix-server 端的 StartPollers 轮询器数量
  • 双端的 Timeout 超时时间
  • zabbix-agent 端的 StartAgents 被动模式下默认的 Agent 端处理进程

在主动模式下:

主动模式似乎更适合这个场景:zabbix-server 根本不进行干预,只接收已经收集的数据即可。处理都是在 zabbix-agent 上完成,zabbix-agent 它运行 Bash 脚本,等待 15秒,然后获取数据。一旦收集了数据,Agent 就会立即向服务器发送响应,这样服务器就不必在脚本运行时等待。

主动模式也是有缺点的,缺点是每个 Agent 只能有一个这样的进程,并且不可能增加检查的进程数量。如果您有多个条目且每个运行15秒,并且主机上的更新间隔很短,并且您将所有这些条目配置为主动检查,那么就很大可能会有一些监控项未及时收到数据而被计算到队列中。

总而言之,在大多数情况下使用快速检查时,主动 Agent 在性能方面表现更好。缺点是不能使用远程命令(前端的 Action 里的远程命令)。

相反地,如果你有很多慢的项目,每项耗时30秒,并且你不能在 Agent 之外处理它们,那么被动模式是你唯一的选择。使用这些方法,可以增加代理端上的进程数量。

主动模式检查的另一个好处是,Agent 有一个用于这些检查的内存缓冲区。这意味着在出现网络问题时不会丢失数据。使用被动模式没有缓冲区。

3.Agent 端配置 主动或被动模式

以主动或被动模式配置 zabbix-agent默认设置是被动的,这意味着即使是默认的 zabbix-server 主机也将所有 zabbix-agent 类型配置为被动的。

每个 zabbix-agent 可以同时以两种模式运行。比如可以让一台机器在被动模式下运行10个监控项,在主动模式下运行10个监控项。这是使用相同的 zabbix-agent 完成的,不同之处在于配置文件。

客户端配置:被动模式

zabbix_agentd.conf 中配置被动检查时。您只需要更改一个参数 Server。它是一个以逗号分隔的IP地址和DNS名称列表,代理将从中接受传入的连接。zabbix-server 服务器连接到这个代理并轮询数据。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/etc/zabbix/zabbix_agentd.conf

### Option: Server
# List of comma delimited IP addresses, optionally in CIDR notation, or DNS names of Zabbix servers and Zabbix proxies.
# Incoming connections will be accepted only from the hosts listed here.
# If IPv6 support is enabled then '127.0.0.1', '::127.0.0.1', '::ffff:127.0.0.1' are treated equally
# and '::/0' will allow any IPv4 or IPv6 address.
# '0.0.0.0/0' can be used to allow any IPv4 address.
# Example: Server=127.0.0.1,192.168.1.0/24,::1,2001:db8::/32,zabbix.example.com
#
# Mandatory: yes, if StartAgents is not explicitly set to 0
# Default:
# Server=

Server=indevops.gao7ts.cn

客户端配置:主动模式

主动模式需要更深入的配置。首先,您需要 ServerActive 变量。这是 zabbix-server 服务器或代理的IP地址和DNS名称列表,Agent 将每两分钟连接一次,以请求配置。在接收到配置之后,它启动所请求的监视并推送所收集的数据。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/etc/zabbix/zabbix_agentd.conf

### Option: ServerActive
# List of comma delimited IP:port (or DNS name:port) pairs of Zabbix servers and Zabbix proxies for active checks.
# If port is not specified, default port is used.
# IPv6 addresses must be enclosed in square brackets if port for that host is specified.
# If port is not specified, square brackets for IPv6 addresses are optional.
# If this parameter is not specified, active checks are disabled.
# Example: ServerActive=127.0.0.1:20051,zabbix.domain,[::1]:30051,::1,[12fc::1]
#
# Mandatory: no
# Default:
# ServerActive=

ServerActive=indevops.gao7ts.cn

默认每 2min 主动连接一次 zabbix-server,向服务端请求监控项。你可以修改这个刷新时间 RefreshActiveChecks

1
2
3
4
5
6
7
8
9
/etc/zabbix/zabbix_agentd.conf

### Option: RefreshActiveChecks
# How often list of active checks is refreshed, in seconds.
#
# Mandatory: no
# Range: 60-3600
# Default:
# RefreshActiveChecks=120

然后是更改 zabbix-agent 主机名 Hostname,主机名必须与 zabbix-server 前端中指定的主机名匹配(区分大小写)。

1
2
3
4
5
6
7
8
9
10
11
12
/etc/zabbix/zabbix_agentd.conf

### Option: Hostname
# Unique, case sensitive hostname.
# Required for active checks and must match hostname as configured on the server.
# Value is acquired from HostnameItem if undefined.
#
# Mandatory: no
# Default:
# Hostname=

Hostname=192.168.100.159-INNER-CentOS7

Hostname 必须与zabbix-server 前端中指定的主机名一致。