我正在努力发现和监控多个物理服务器之间的dynamic(即移动)容器,并将结果与容器服务相关联,而不是运行它的代理服务器。
我有2个服务器:A和B; 我有一个容器:C. C可以在A或B上运行,我的编排引擎(Swarm,Kubernetes,Rancher等)负责确保它至less在一个地方运行。
我在A和B上有一个zabbix代理,所以我可以监视CPU,文件系统,内存,所有常见的东西。
我想监视2件事情:
如何configurationZabbix和代理,以便报告C及其进程的状态,而不pipe它在哪里运行?
我的假设是:
我的问题是:
简而言之,如何设置它作为主机来运行容器自动发现,然后处理每一个这样的检查,以便它们在具有给定组/模式中的代理的每个服务器上运行,然后将输出附属到C容器而不是运行代理的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 /触发器的时间。