God - 进程监控守护神

God 是一个使用Ruby写成的,容易配置,容易扩展的进程监控框架。

God - 进程监控守护神_第1张图片
God

为什么要做进程监控呢,我们在网站的部署中需要保证Rails的进程或者其他相关进程持续运行,不会因为程序的异常而中止,而God就是一个非常简单但是功能强大的进程监控程序,在后台持续监控程序进程的运行状况,监控进程的CPU占用情况、内存消耗情况,以及在进程出现异常时进行重启等操作。

God的使用分为这样几步:

  1. 定义配置文件,在配置文件中告诉God需要监控程序的名称、启动中止重启的命令等等;
  2. 启动God守护进程,并指定配置文件的路径;
  3. 启动God后,需要监控的程序即可变为类似于后台服务,可以使用下述命令进行重启、停止等操作。
god start xxxx
god restart xxxx
god stop xxxx

看上去是不是很简单?

当然需要先安装God,安装命令简洁如下:

gem install god

配置文件是使用God的核心部分,有非常多的参数可以配置,这里就不一一介绍了,有兴趣可以参考God的网站,最好的学习方式就是参考示例,这里贴出unicorn的配置:

#unicorn.god
rails_env = ENV['RAILS_ENV'] || 'production'
rails_root = ENV['RAILS_ROOT'] || Dir.pwd
puts rails_root
God.pid_file_directory = "#{rails_root}/tmp/pids"

God.watch do |w|
  w.name = "unicorn"
  w.interval = 30.seconds # default

  # 启动命令
  w.start = "cd #{rails_root} && unicorn -c #{rails_root}/config/unicorn.rb -E #{rails_env} -D"

  # 中止命令
  w.stop = "kill -QUIT `cat #{rails_root}/tmp/pids/unicorn.pid`"

  # 重启命令
  w.restart = "kill -USR2 `cat #{rails_root}/tmp/pids/unicorn.pid`"

  w.start_grace = 10.seconds
  w.restart_grace = 10.seconds
  # PID文件路径
  w.pid_file = "#{rails_root}/tmp/pids/unicorn.pid"

  # 运行用户
  # w.uid = 'git'
  # w.gid = 'git'

  w.behavior(:clean_pid_file)

  # 启动条件(5s监控一次,没有在运行就启动)
  w.start_if do |start|
    start.condition(:process_running) do |c|
      c.interval = 5.seconds
      c.running = false
    end
  end

  # 重启条件 (内存占用超过500M,或者CPU持续占用超过80%)
  w.restart_if do |restart|
    restart.condition(:memory_usage) do |c|
      c.above = 500.megabytes
      c.times = [3, 5] # 3 out of 5 intervals
    end

    restart.condition(:cpu_usage) do |c|
      c.above = 80.percent
      c.times = 5
    end
  end

  # lifecycle
  w.lifecycle do |on|
    on.condition(:flapping) do |c|
      c.to_state = [:start, :restart]
      c.times = 5
      c.within = 5.minute
      c.transition = :unmonitored
      c.retry_in = 10.minutes
      c.retry_times = 5
      c.retry_within = 2.hours
    end
  end
end

是不是还挺简单的?

最后只需要运行以下命令就可以启动God了:

god -c path/to/unicorn.god

这个命令会让God在后台运行,如果想进行测试,可以加上 -D 这个参数,God会在前端运行并输出运行的日志。

启动God后,不到5s,Unicorn随即自动启动!

I [2015-06-15 22:11:19]  INFO: Loading config/bidding.god
I [2015-06-15 22:11:19]  INFO: Syslog enabled.
I [2015-06-15 22:11:19]  INFO: Using pid file directory: .../tmp/pids
I [2015-06-15 22:11:19]  INFO: Socket already in use
I [2015-06-15 22:11:19]  INFO: Socket is stale, reopening
I [2015-06-15 22:11:19]  INFO: Started on drbunix:///tmp/god.17165.sock
I [2015-06-15 22:11:19]  INFO: listener move 'unmonitored' to 'up'
I [2015-06-15 22:11:19]  INFO: unicorn move 'unmonitored' to 'up'
I [2015-06-15 22:11:19]  INFO: unicorn moved 'unmonitored' to 'up'
I [2015-06-15 22:11:19]  INFO: listener moved 'unmonitored' to 'up'

你可能感兴趣的:(God - 进程监控守护神)