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