我如何用上帝监控独立应用程序?

时间:2012-07-09 17:06:05

标签: ruby god

我目前正在研究Rails / Ruby项目的流程监控选项,并且非常像上帝。

但我真的找不到任何关于如何监视多个应用程序(例如在一台机器上运行的2个轨道项目)与神。

据我所知,我只是设置了上帝(系统ruby)并让每个项目都添加了自己的配置(可能在某种程度上在deploy-hook中)。 这也适用于运行不同ruby版本(rbenv,rvm)或bundler的项目,因为god ruby​​不必访问任何项目代码。

有没有人像这样使用它?或者有更好的方法吗?

1 个答案:

答案 0 :(得分:7)

我用上帝来看我所有的东西(独角兽,雷迪斯,雷克斯工人)。基本设置如下:

上帝全局安装,在系统启动时加载并读取其配置文件/etc/god/all.god

/etc/god/all.god

files = Dir.glob "/etc/god/**/*.god"

files.each do |f|
  next if f == '/etc/god/all.god'
  God.load f
end

此文件加载/etc/god及其子项中的所有配置文件。部署脚本将配置文件放在那里并告诉上帝(重新)加载它们。

$ ls -l /etc/god
total 16
-rw-r--r-- 1 root   root    108 2012-02-23 16:26 all.god
drwxr-xr-x 2 sergio sergio 4096 2012-03-20 20:59 app1_production
drwxr-xr-x 2 sergio sergio 4096 2012-03-27 00:58 app2_production
drwxr-xr-x 2 root   root   4096 2012-04-23 01:37 util

$ ls -l /etc/god/app1_production/
total 0
lrwxrwxrwx 1 sergio sergio 55 2012-03-20 20:59 redis.god -> /srv/app1_production/current/config/god/redis.god
lrwxrwxrwx 1 sergio sergio 56 2012-03-20 20:59 resque.god -> /srv/app1_production/current/config/god/resque.god
lrwxrwxrwx 1 sergio sergio 57 2012-03-20 20:59 unicorn.god -> /srv/app1_production/current/config/god/unicorn.god

这是unicorn.god的负责人。

rails_env = "production"
pid_dir = "/srv/app1_#{rails_env}/shared/pids"
rails_root = "/srv/app1_#{rails_env}/current"

God.watch do |w|
  w.name = "unicorn-#{rails_env}"
  w.interval = 30.seconds # default

  # unicorn needs to be run from the rails root
  w.start = "cd #{rails_root} && /home/sergio/.rvm/bin/r193_bundle exec unicorn_rails -c #{rails_root}/config/unicorn/unicorn.#{rails_env}.rb -E #{rails_env} -D"

  # QUIT gracefully shuts down workers
  w.stop = "kill -QUIT `cat #{pid_dir}/unicorn.pid`"

  # USR2 causes the master to re-create itself and spawn a new worker pool
  w.restart = "kill -USR2 `cat #{pid_dir}/unicorn.pid`"

如您所见,独角兽通过rvm包装器启动,因此每个新应用程序都可以使用自己的红宝石。此外,您还提供了自己的startstoprestart命令,因此您可以使用god来观看任何软件。

这种方法对我来说非常好(到目前为止)。