在使用EC2时,如何跟上Nagios / Capistrano的configuration?

我使用Amazon EC2作为我的移动应用程序。 根据应用程序在特定时间的负载情况,我可能会产生新的实例,然后在负载较低时将其取下,以节省成本。

如何跟上这种dynamic环境下的Nagiosconfiguration? 当处理被pipe理的硬件时,configuration文件是可预测的。 在这种情况下,需要添加Nagios,Capistrano和其他一些configuration文件。 Capistrano需要知道在哪里部署一个新的构build应用程序服务器。 Nagios需要知道删除现有的实例或添加一个新的实例进行监控。 Nagios还需要知道某个节点是故意closures还是主机由于错误而closures。

这是如何做的VPS /dynamic实例的美好世界?

我们使用一个configurationpipe理工具(在我们的例子中是Chef),它从节点信息中写出Nagiosconfiguration。

写了我自己的一套php脚本,将nagiosconfiguration写入文件。 Nagios很简单,因为它只是一个文本文件,所以您只需要为每种types的服务器创build一个模板。 然后,当服务器开始使用模板添加文件。 该文件中唯一更改的数据是主机IP和名称。

对于更多的静态服务器,我创build了一个运行ec2-describe-instances的脚本,并为每个返回ec2-describe-instances创build一个文件。 每个实例标记为:Purpose = XXXX,所以我知道要应用哪个模板。

对于我们的自动扩展组,我们使用as-put-notification-configuration命令来设置通知,该命令将消息发送到SQS队列。 php脚本是由crontab执行的。 脚本执行时,会检查队列是否有新的服务器。 每当它发现一个新的服务器,它会创build一个新的文件。 当服务器被删除时也会发生同样的情况。 如果你已经使用了Chef或者其他东西,可能会更容易一些,但是如果你不用,你可以在几天之内写出一个简单的php服务。

我们使用Opsview ,这是另一个nagios +数据库+ rest-api包装。 我不知道这是否是所有人(甚至我们)的最佳解决scheme,但它允许我们在节点(或其他pipe理节点)出现时通过简单的REST APIdynamicconfigurationNagios服务器,并将其从完成后的configuration。 我使用主机模板的定义作为Opsview(/ Nagios)服务器的Puppet清单的一部分,受监视的主机只需向其注册,并作为其Puppet清单的一部分join正确的主机模板。

一个更“通用”的方法,即使是原始的Nagios及其静态文件也应该可以工作,这就是Puppet Stored Configuration – 这可以让你根据puppet收集的信息编写任何你想要的工具其performance。

我build议,为了取证目的,当它被取下时,不应该删除节点的configuration,而是尝试对其进行归档,并在收集时收集关于它的监控信息。

几个方法。

  • 使用预configuration的Amazon EC2模板

  • 使用可变化模板的木偶清单。

  • 在你的nagiosnetworking和你的亚马逊虚拟机之间build立一个VPN。然后你所有的亚马逊虚拟机都会有静态IP,你甚至可以在它们上面设置一个DNS。 我们有一个nagios运行和监视我们所有的亚马逊实例。 我们甚至不需要一个弹性ip。 我们使用openvpn进行VPN。

  • 构build监听外部命令的Nagios并相应地更新其configuration。 最终机器可以注册,取消注册,挂起,在Nagios上自行恢复。

我没有一个银子弹来解决这个问题。 但是对于capistrano来说, capify-ec2是Capistrano的扩展,它使用亚马逊标记function解决了服务器angular色列表。