zabbix 主动、被动模式

⚠️:

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

主动 被动 配置文件示例

/etc/zabbix/zabbix_agentd.conf

############ GENERAL PARAMETERS #################  通用配置
PidFile=/var/run/zabbix/zabbix_agentd.pid  #pid文件路径
LogType=file    #日志类型,file表示将日志存储在文件中
LogFileSize=0  #日志最大尺寸,大于这个值会进行切割,0表示不切割
DebugLevel=3  #日志记录的等级,3级别表示提醒
SourceIP=  #这里可以设置agent监听的ip(如果有多个网卡,这一项可能有用)
EnableRemoteCommands=0 #是否允许执行远程命令,0表示不允许
LogRemoteCommands=0  #是否记录执行远程命令产生的日志信息

##### Passive checks related  被动监控相关配置
Server=127.0.0.1  #允许哪台服务器采集数据,建议开启,主动被动模式共用
ListenPort=10050  #agent监听的端口
ListenIP=0.0.0.0  #监听的ip地址
StartAgents=3     #响应请求预先启动3个子进程

##### Active checks related 主动监控相关配置
ServerActive=127.0.0.1  #将监控数据发送到哪台服务器
Hostname=Zabbix server #标明主机名,这里必须与配置主机时的Host name保持一致不然会出错的;可以注释,因为配置了HostnameItem
HostnameItem=system.hostname  # 建议开启,特别是配置了自动注册;

############ ADVANCED PARAMETERS #################  优化配置参数
####### USER-DEFINED MONITORED PARAMETERS #######用户自定义的监控参数
####### LOADABLE MODULES #######
####### TLS-RELATED PARAMETERS #######

主动模式监控项配置主动方式的模板;

被动模式的监控项配置被动模式的模板;

主动 VS 被动 介绍

参考链接:官方博文|Zabbix Agent: 主动模式 VS 被动模式 - 腾讯云开发者社区-腾讯云 (tencent.com)

img

主动和被动 Agent 连接方式

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

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

拓扑优势

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

但是远程命令只能在Agent被动模式下工作。

性能优势

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

    img

    服务器超时值

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

    img

    Agent超时值

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

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

    time zabbix_get -s 127.0.0.1 -k system.cpu.load
    

    img

    为项目请求计时

    它只需要0.002秒。

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

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

img

默认启动的Agent进程

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

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

img

在Agent主动检查

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

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

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

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

Agent 配置

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

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

被动检查

img

更改被动Server列表

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

主动检查

img

更改主动动Server列表

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

img

更改主机名

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

img

前端主机名

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

img

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主机的项将从两个不同的服务器接收它们的值。

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