问题描述
我们有一个自定义设置,其中运行了几个守护程序(Web应用程序+后台任务)。我正在使用一种服务,该服务可以帮助我们监视那些守护程序,如果它们的资源消耗超过某个级别,则重新启动它们。
我会很感激任何关于什么时候比另一个更好的见解。据我了解,monit启动了一个新流程,而主管启动了一个子流程。这种方法的优缺点是什么?
我还将使用新贵来监视监控或监视自身。 Webapp部署将使用capistrano完成。
谢谢
最佳解决办法
我没有使用过监控功能,但主管人员存在一些重大缺陷。
-
程序应在前台运行
这意味着您不能仅仅执行/etc/init.d/apache2 start。大多数情况下,您只能写一个衬纸,例如“源/etc /apache2 /envvars&&exec /usr /sbin /apache2 -DFOREGROUND”,但是有时您需要自己的包装脚本。包装脚本的问题在于,您最终有两个进程,父进程和子进程。查看下一个缺陷…
-
主管人员不管理子流程
如果您的程序启动子进程,则supervisord将不会检测到该进程。如果父进程死亡(或者如果使用supervisorctl重新启动),则子进程将继续运行,但在初始进程中将变为”adopted”并保持运行状态。这可能会阻止以后调用程序运行或消耗其他资源。最近的配置选项stopasgroup和killasgroup应该可以解决此问题,但对我不起作用。
-
主管没有依赖项管理-请参阅#122
我最近用qlproxy设置了鱿鱼。 qlproxyd需要先启动,否则乌贼可能会失败。即使这两个程序都在有监督的情况下进行管理,也无法确保这一点。我需要为鱿鱼编写一个启动脚本,以使其等待qlproxyd进程。添加启动脚本导致缺陷2中描述的孤立过程问题。
-
主管不允许您控制两次重试之间的延迟
有时,当某个进程无法启动(或崩溃)时,是因为它可能无法访问另一个资源,这可能是由于网络抖动造成的。可以将Supervisor设置为多次重新启动该过程。在重新启动之间,该过程将进入”BACKOFF”状态,但是没有文档或对退回时间的控制。
主管的确在80%的时间内满足了我们的需求。配置合理,文档也不错。
次佳解决办法
如果您想额外监视资源,则应该进行监视。除了仅检查进程是否正在运行(可用性)之外,monit还可以对资源使用情况(性能,容量使用情况),负载级别甚至基本安全性检查(bianry文件,配置文件的md5sum等)执行一些检查。它具有rule-based配置,非常容易理解。也有很多现成的配置可供使用:http://mmonit.com/wiki/Monit/ConfigurationExamples
Monit要求进程创建PID文件,这可能是一个缺陷,因为如果进程不创建pid文件,则必须创建一些包装器。参见http://mmonit.com/wiki/Monit/FAQ#pidfile
另一方面,Supervisord更受制于流程,它是自动生成的。它不能进行任何基于资源的检查。它具有一个不错的CLI servicectl
和一个Web GUI。