官方博文|Zabbix Agent: 主动模式 VS 被动模式

2021-01-29 17:34:33 浏览数 (1)

Zabbix 4.0 高级认证专家

(点击查看如何认证?)

  • 长期从事Zabbix相关监控工作,3年Zabbix实施经验,参与过国内多家银行、保险客户的Zabbix监控实施项目。
  • Zabbix社区优质内容创作者,发表多篇技术文章。
  • Zabbix社区在线课程讲师。

简介

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

项目类型下拉

这是必需的,因为项类型决定了项的工作方式和收集数据的方式。对于Zabbix代理,可以在“Zabbix Agent(主动)”和“Zabbix Agent(被动)"之间进行选择。

主动 VS 被动

在介绍之前您可能已经知道这两种模式之间的区别,但是您知道这两种选择的实际好处吗? 主要的区别在于数据连接的方向。

主动和被动 Agent 连接方式

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

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

拓扑优势

第一个优势来自于安装Zabbix Agent的网络的拓扑结构。例如,一些使用者可能不希望在他们的环境中有任何传入的连接,甚至不希望有来自内部网络的连接,但是允许出站连接。在这样的场景下,不得不使用主动模式。

现在,假设您打算在您的主机上设置除监视之外的自动问题解决机制。Windows services的最简单示例是配置项和触发器,以检查特定服务的健康状况。但是在通知用户Windows服务已经停止之前,您需要尝试自动重新启动它。

这就需要一个远程命令。通过观看视频Zabbix Email Notifications And Actions,您可以了解关于设置远程命令的更多信息(https://www.youtube.com/watch?v=Y3O6-X-Zb18)。

在前端中,Configuration > Actions > Steps > Remote Command. 添加一个 CMD 远程命令:

代码语言:javascript复制
net start <service_name>

每次触发器触发时,Zabbix代理将尝试启动服务。如果它没有这样做,那么将发送一个通知。但是这个远程命令只能在Agent被动模式下工作。

性能优势

被动 Agent模式,轮询器连接到主机,请求数据,然后等待,直到它收到数据或超时。

服务器超时值

超时值存储在zabbix_server.conf中的超时变量中。最大值是30秒,如果在生产中使用这个值(30s)那么轮询等待时间则太长。

Agent超时值

超时值也可以在Zabbix Agent配置文件中设置。zabbix_agentd.conf。如果设置3秒,那么这个进程会等待3秒或者规定时间内拿到了返回值,进程关闭。

一般此值设置多长时间呢?通过下面的命令就可以知道你的可以设置的值。

代码语言:javascript复制
time zabbix_get -s 127.0.0.1 -k system.cpu.load

为项目请求计时

它只需要0.002秒。

现在,有一个自定义参数,它执行一个Bash脚本,该脚本每分钟运行15秒。然后轮询器将等待15秒,直到它获得该值,且不能在此期间处理任何其他项。Zabbix Server轮询器的等待时间将显著增加,这时增加这些进程的数量才能跟上监控项目的数量。

同样对于Agent,如果您有一个具有大量脚本和用户参数的代理,并且这些脚本和用户参数相对较慢,那么代理将需要一定的时间来处理它们。默认内部代理进程的数量存储在StartAgents变量中。

默认启动的Agent进程

有三个内部进程可以执行所需的检查,在默认情况下,代理可以同时处理三个项请求数据。如果有大量运行缓慢的检查,并且Agent进程处理达到瓶颈,则可以增加此参数。通过将StartAgents值增加到合适的值(0-100)范围,接着可以增加Zabbix服务器上的轮询器数量。需要注意,运行缓慢的检查会降低Zabbix Server的性能。

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

在Agent主动检查

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

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

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

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

Agent 配置

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

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

被动检查

更改被动Server列表

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

主动检查

更改主动动Server列表

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

更改主机名

在同一个zabbix_agentd.conf文件中,还有一个名为Hostname的参数。此主机名必须与前端中指定的主机名(区分大小写)匹配。

前端主机名

要在前端查看主机名,请转到Configuration > Hosts。注意,这个值是区分大小写的。

HostnameItem参数

在zabbix_agentd.conf,还有HostnameItem参数。如果未设置主机名,则在主机上执行此处指定的项,并将该项的返回值作为主机名。默认Key是' system.hostname '。

当HostnameItem参数未设置时,将使用实际的系统主机名。然而,后者并不总是匹配预期的值。您可以通过运行以下Bash命令检查默认报告的主机名:

zabbix_get -s127.0.0.1 -k system.hostname

假设您有一台Zabbix Server和一台名为“Zabbix Server”的Agent,并且还有一台不同的服务器在运行具有相同主机名的Zabbix Server。然后,来自Zabbix Server主机的项将从两个不同的服务器接收它们的值。

您将会在最新的历史图形值中看到差异。例如,空闲磁盘空间可以在两个不同的值之间反复变化,每个值对于其各自的服务器都是有效的,从而导致错误的报告。这强调了为每个代理分配唯一主机名的重要性。

0 人点赞