我在两台不同的计算机上有一个 zabbix 服务器和一个代理。代理在活动模式下运行,例如我在配置文件中有这个:
StartAgents=0
ServerActive=my.zabbix.server.com
Hostname=my.zabbix.agent.com
zabbix server 可以从带有代理的机器上访问,例如:
telnet my.zabbix.server.com 10051
Trying 111.111.111.111...
Connected to my.zabbix.server.com.
Escape character is '^]'.
Connection closed by foreign host.
而且服务器开启了主机自动注册,我刚启动的时候代理已经成功注册了主机。所以连接必须是活动的。这是我在启动它时在代理日志中看到的内容:
83074:20171128:082440.324 Starting Zabbix Agent [my.zabbix.agent.com]. Zabbix 3.4.1 (revision 71734).
83074:20171128:082440.324 **** Enabled features ****
83074:20171128:082440.324 IPv6 support: YES
83074:20171128:082440.324 TLS support: YES
83074:20171128:082440.324 **************************
83074:20171128:082440.324 using configuration file: /usr/local/etc/zabbix34/zabbix_agentd.conf
83074:20171128:082440.324 agent #0 started [main process]
83076:20171128:082440.325 agent #1 started [collector]
83077:20171128:082440.326 agent #2 started [active checks #1]
换句话说,代理可以连接到服务器,它甚至可以识别它的版本。代理日志中没有其他任何事情发生。
在服务器上,它仍然说主机不可达!
可能是什么问题呢?
更新:在前端,我看到这条消息:
我不确定它为什么要连接到 10050?它用于被动代理。我的代理应该是活跃的。
UPDATE2:如果我从 zabbix 服务器中删除主机,然后重新启动代理,则会发生以下情况:
主机再次在服务器上自动注册。代理日志:
14551:20171128:193954.483 Starting Zabbix Agent [my.zabbix.server.com]. Zabbix 3.4.1 (revision 71734).
14551:20171128:193954.484 **** Enabled features ****
14551:20171128:193954.484 IPv6 support: YES
14551:20171128:193954.484 TLS support: YES
14551:20171128:193954.484 **************************
14551:20171128:193954.484 using configuration file: /usr/local/etc/zabbix34/zabbix_agentd.conf
14551:20171128:193954.484 agent #0 started [main process]
14553:20171128:193954.485 agent #1 started [collector]
14554:20171128:193954.485 agent #2 started [active checks #1]
14554:20171128:193954.614 no active checks on server [my.zabbix.server.com:10051]: host [my.zabbix.agent.com] not found
在哪里:
- my.zabbix.server.com 是服务器的 FQDN
- my.zabbix.agent.com 是代理的 FQDN,也是代理配置中的 HostName 参数。
看起来,代理成功注册了主机,但由于某种原因,服务器试图以被动模式从代理获取信息。尽管事实上,代理被配置为活动模式。
更新 3:虽然代理正在发送数据,但主机列表仍然显示一个问题:
可用性/ZBX 有一个危险信号,并显示一条消息“从代理获取值失败:无法连接到 [[ip_address_here]:1050]:[4] 中断系统调用”。我已经检查了这些主机的每一个项目和每一个发现,它们都有 type="Zabbix Agent Active"。所以我不明白为什么服务器试图以被动模式连接它们???这不会导致真正的“问题”(例如,生成动作并从 zabbix 服务器发出通知的东西),但在屏幕上看到红旗是非常令人不安的。
在这个问题完全解决之前,我什至不会接受我自己的答案。
更新4:在更改了所有连接到我的主机的所有模板的所有项目类型、发现类型和项目原型的类型,以及所有链接到那里的模板之后,ZBX 危险信号终于消失了. 我相信我是一个经验丰富的软件用户,但很难理解发生了什么,并更改所有参数以使其工作。
要使主动检查起作用,代理主机名必须与 Zabbix 服务器中的主机名匹配。“代理主机名”不一定是系统主机名 - 它取决于配置参数“主机名”和“主机名项”。Zabbix 中的主机名不是 DNS 或 IP 地址 - 它是主机属性中“主机”字段的内容。
当代理启动时,它会打印出它发送到服务器的主机名。在您的示例中:
Starting Zabbix Agent [my.zabbix.server.com]
- 也就是说,代理将自己向服务器标识为my.zabbix.server.com
. 使该值与正确的主机名匹配(注意区分大小写),主动检查将开始工作。请注意,如果两个或多个代理正在发送数据并识别为它,则其他主机可能具有不正确的值。请注意,代理日志中打印的版本是代理版本,而不是服务器版本 - 代理无法确定服务器版本。
简短的回答:问题是所有项目都有 Type="Zabbix Agent" 而不是 Type="Zabbix Agent Active"。
长答案:主机要么是主动代理,要么是被动代理。(好吧,也许如果您尝试在同一台机器上启动两个代理,那么您可以在一台主机上同时执行这两个代理,但这似乎毫无意义。)合乎逻辑,对吗?
所以实际上,主动或被动是宿主的属性,而不是物品。尽管如此,数据收集的模式(例如被动或主动)是绑定到项目,而不是主机。我认为这是 zabbix 的设计缺陷。这是非常反直觉的。他们唯一能克服这个问题的方法是:
您需要克隆系统中几乎所有的模板。对于独立于项目类型的单个项目,您不能有一个触发器,因为没有这样的事情。如果你想在被动和主动代理混合的环境中改变某些东西,那么你必须做两次。
最后,当您添加主机时,您需要分配主动或被动模板版本,具体取决于您要用于该特定主机的模式。
所有这一切都是因为主动/被动模式不能是主机的属性。它必须是项目的属性。更糟糕的是:它也是发现规则的属性,是发现规则的原型(并且原型项目不能大规模更新,你必须一个一个,手工)。说真的,像“cpu.load”这样的项目与数据的收集方式完全无关。我的意思是来吧,你可以改变主意,从主动模式切换到被动模式,或者返回。这不应该强迫您删除所有旧项目,创建新项目。但是,如果您决定这样做,您将丢失所有历史记录,因为您不仅在更改项目,而且在替换它们。这真的很烦人!
我希望他们能在即将到来的 4.0 版本中解决这个问题。
改变/etc/zabbix/zabbix_agentd.conf的值,把zabbix的ip地址