如何configurationzabbixdynamic添加容器并在具有代理的服务器上监视它们?

我正在努力发现和监控多个物理服务器之间的dynamic(即移动)容器,并将结果与​​容器服务相关联,而不是运行它的代理服务器。

我有2个服务器:A和B; 我有一个容器:C. C可以在A或B上运行,我的编排引擎(Swarm,Kubernetes,Rancher等)负责确保它至less在一个地方运行。

我在A和B上有一个zabbix代理,所以我可以监视CPU,文件系统,内存,所有常见的东西。

我想监视2件事情:

  1. C.我不在乎在哪里,但我想知道它正在运行。
  2. 检查C中的进程。我有一个脚本来检查状态。

如何configurationZabbix和代理,以便报告C及其进程的状态,而不pipe它在哪里运行?

我的假设是:

  1. 我把C当作主机,而不是A或B.
  2. 我将C中的进程的发现及其状态分配为C的项目。

我的问题是:

  1. 如何将C设置为从A或B作为主机自动发现? 我可以使用自己的脚本或者https://github.com/monitoringartist/Zabbix-Docker-Monitoring来过滤只拾取我关心的容器。
  2. 如何设置进程检查在A和B代理上运行?

简而言之,如何设置它作为主机来运行容器自动发现,然后处理每一个这样的检查,以便它们在具有给定组/模式中的代理的每个服务器上运行,然后将输出附属到C容器而不是运行代理的A或B服务器?

编辑:感谢第一响应,我得到了“元主机”的想法。 但是这会产生新的问题:

  1. 如果我在创buildIP时添加IP,如何创buildC“元主机”? 这可能是A或B的IP!
  2. 如何根据规则自动创buildC?
  3. 由于Zabbix向A和B的每一个伸出来说“运行这些testing”,它是如何知道是让A运行还是B运行它们?

如果我可以说“在'Docker'组中的所有主机上运行发现”,它将发现所有C(和D等)容器并将它们添加为主机,这将更加容易。 然后,也可以说,“运行进程检查脚本在所有自动发现的容器上”,也许通过了解哪个代理程序当前可以访问容器(即它现在正在运行的位置)。

我开始越来越感觉到Zabbix对于监控与特定服务器绑定的应用程序是非常好的,而在监视移动的应用程序时则更less一些。 还是我误解了?

免责声明:我是https://github.com/monitoringartist/Zabbix-Docker-Monitoring的作者

在A和B上设置标准的Zabbix-Docker-Monitoring 。

编辑Docker模板 – 根据需要过滤发现的容器+删除任何触发器原型。

创build新的计算项目,它将从A和B中的每个C相关项目聚合到新的C计算项目(您可以在Zabbix中创buildC“metahost”) – 在这些新的C度量标准之上设置新的触发器。

更新:使用计算的项目进行聚合 – 例如来自A和B的聚合sum(docker.up[cid]) – 然后触发“Container cid is not running”的条件将为sum(docker.up[cid])<1 。 请阅读Zabbix文档以获取正确的语法。

LLD发现你的容器在哪里运行atm,它会相应地更新项目/触发器。 如果你想消除任何错误的警报,不要忘记调整LLD /触发器的时间。