使用supervisord比monit有什么好处

mur*_*a52 33 linux ubuntu monit supervisord

我们有一个自定义设置,它有几个守护进程(Web应用程序+后台任务)运行.我正在寻找使用一种服务,它可以帮助我们监视这些守护进程,并在资源消耗超过一个级别时重新启动它们.

我会欣赏任何关于何时一个人比另一个更好的见解.据我所知,monit会在supervisord启动子流程时旋转一个新进程.这种方法的优点和缺点是什么?

我也将使用暴发来监控monit或supervisord本身.webapp部署将使用capistrano完成.

谢谢

cre*_*176 34

我没有使用monit但是有一些重要的缺陷与supervisord.

  1. 程序应该在前台运行

这意味着你不能只执行/etc/init.d/apache2 start.大多数情况下,您只需编写一个内容,例如"source/etc/apache2/envvars && exec/usr/sbin/apache2 -DFOREGROUND",但有时您需要自己的包装器脚本.包装器脚本的问题在于您最终得到两个进程,父进程和子进程.看下一个缺陷......

  1. supervisord不管理子进程

如果你的程序启动子进程,supervisord就不会检测到这一点.如果父进程死亡(或者如果它使用supervisorctl重新启动)子进程继续运行,但将由init进程"采用"并保持运行.这可能会阻止将来对程序的调用运行或消耗额外的资源.最近的配置选项stopasgroup和killasgroup应该解决这个问题,但对我来说不起作用.

  1. supervisord没有依赖管理 - 见#122

我最近用qlproxy设置了squid.qlproxyd需要先启动,否则squid会失败.尽管这两个程序都是用supervisord管理的,但是没有办法确保这一点.我需要为squid编写一个启动脚本,使其等待qlproxyd进程.添加启动脚本导致了漏洞2中描述的孤立进程问题

  1. supervisord不允许您控制startretries之间的延迟

有时当进程无法启动(或崩溃)时,这是因为它无法访问其他资源,可能是由于网络抖动.可以将主管设置为多次重启该过程.在重新启动之间,进程将进入"BACKOFF"状态,但是没有文档或控制退避的持续时间.

在其国防主管确实80%的时间满足我们的需求.配置合理,文档非常好.

  • 好答案.所以,你基本上喜欢supervisord,但它并不总是适合每个工作的工具. (2认同)

Dar*_*rek 30

如果你想要额外监控资源,你应该接受monit.除了检查进程是否正在运行(可用性)之外,monit还可以执行一些资源使用(性能,容量使用),负载级别甚至基本安全检查(bianry文件的md5sum,配置文件等)的检查.它有一个基于规则的配置,很容易理解.还有很多可以使用的配置:http://mmonit.com/wiki/Monit/ConfigurationExamples

Monit需要进程来创建PID文件,这可能是一个缺陷,因为如果一个进程没有创建pid文件,你必须创建一些包装器.请参阅http://mmonit.com/wiki/Monit/FAQ#pidfile

另一方面,Supervisord更多地受制于一个过程,它自己产生它.它不能将任何基于资源的检查作为监控.它有一个很好的CLI servicectl和Web GUI.

  • @xavier不同意,包装脚本还是另一个SPOF,并不是每个deamon都可以确定性地包装,想想一些java的东西,例如 (3认同)
  • @Dārayavahuštdi,你有一个有效的观点,但是对于supervisord,它是另一种方式:一些程序喜欢守护,而supervisord需要一切都留在前台.但是,为monit编写包装似乎更直接.http://supervisord.org/subprocess.html#nondaemonizing-of-subprocesses http://www.mmonit.com/wiki/Monit/FAQ#pidfile (2认同)