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)
主动和被动 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模式,轮询器连接到主机,请求数据,然后等待,直到它收到数据或超时。
服务器超时值
超时值存储在zabbix_server.conf中的超时变量中。最大值是30秒,如果在生产中使用这个值(30s)那么轮询等待时间则太长。
Agent超时值
超时值也可以在Zabbix Agent配置文件中设置。zabbix_agentd.conf。如果设置3秒,那么这个进程会等待3秒或者规定时间内拿到了返回值,进程关闭。
一般此值设置多长时间呢?通过下面的命令就可以知道你的可以设置的值。
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主机的项将从两个不同的服务器接收它们的值。
您将会在最新的历史图形值中看到差异。例如,空闲磁盘空间可以在两个不同的值之间反复变化,每个值对于其各自的服务器都是有效的,从而导致错误的报告。这强调了为每个代理分配唯一主机名的重要性。