Zabbix Agent的监控方式分为主动模式和被动模式;主动模式为Zabbix Agent主动发送监控数据给Zabbix Server,被动模式为Zabbix Agent等待Zabbix Server来获取监控数据(另一种表述是:Zabbix Server向Zabbix Agent获取数据)。


       其实更内行一点的理解方式是从TCP连接的角度看;主动模式是Zabbix Agent向Zabbix Server侦听的IP地址及端口发起TCP连接请求,连接成功后再向Zabbix Server发送Zabbix Agent监控到的数据;被动模式是Zabbix Server向Zabbix Agent侦听的IP地址及端口发起TCP连接请求,连接成功后再向Zabbix Agent请求获取监控数据。


       绝大多数情况下,Zabbix Server是被安装在有固定公网IP地址、操作系统是Linux的服务器上。所以Zabbix Agent为主动模式的优点有:1、减轻Zabbix server服务器的性能开销(Zabbix Server避免了了大量的对Zabbix Agent的连接请求、数据请求及处理) 2、某些安装Zabbix Agent并被监控的主机不一定有公网IP,Zabbix Server是不能直接连接Zabbix Agent(被动模式)的,这时往往只能用主动模式,主动连接Zabbix Server。


       但是Zabbix Agent的主动模式有一些弊端,在主动模式下,有一些重要的功能是没法使用的,更多的功能是在被动模式中。比如:实现自动触发zabbix-agent端shell脚本任务  请参考博文链接                  Zabbix Server 中设置的触发器(trigger)被触发后可以执行动作(action):发送告警信息或执行远程命令等。是Zabbix Server对Zabbix Agent下达执行命令,不支持主动模式(己注:按道理是可以实现支持的,但系统是人家开发的,只能是系统支持什么就用什么,虽然开源,如若修改,成本会比较大)。

 

        我提出的问题是这样:我既想监控内网的主机,又想对内网主机下达命令执行脚本任务。怎么实现呢?答案:首先还是需要用被动模式。既然用被动模式,那么Zabbix Server怎么连接内网主机中的Zabbix Agent呢?用frp可以解决这问题。FRP服务端安装在有固定公网IP的服务器上,FRP客户端安装在Zabbix Agent所在的内网服务器上。即可实现公网和内网的端口映射。