はじめまして。
Fusicエンジニアの山本と申します。
昨年、大阪のシステム会社より転職して参りまして、
入社してからは主にruby(on Rails)を使っての開発に携わっています。
初めての投稿の今回は、プロセス監視ツール「God」について取り上げたいと思います。
みなさんはプロセス監視ツールは何をお使いでしょうか。
代表格には、Daemontoolsやmonitがあるかと思います。
近日公開する弊社のウェブサービスに監視ツールを導入するにあたって、そのサービスが他にない試みであるということもあり、今まで使ったことのない監視ツールを導入したいなと考えておりました。
そんな中、名前がすごく特徴的で、rubyで動くという「God」に注目しました。
God – A Process Monitoring Framework in Ruby
god.rubyforge.org/
トップのシルエットが印象的ですね。
Daemontoolsやmonitと比べて優れている点、劣っている点はそれぞれあるようですが、
・監視の間隔の時間指定ができる
・障害時にメール送信できる
・一定のメモリ使用以上でリスタートできる
という、必要最低限の機能は備えているようですし、すでにrubyを導入しているサーバーであったため、こちらを選択することにしました。
あとで調べて分かったんですが、有名なレシピコミュニティーサイトのクックパッドさんでも導入されているんですね。
動作サンプルはサイト上に掲載されていますが、以下の作業だけで導入することができます。
gemの動作が必須となります。
・gemによるインストール
# sudo gem install god
・設定ファイルの作成
拡張子godのファイルを作成します。
記述例は以下のとおり。
# vim sample_ready.god
God.watch do |w| w.name = "sample_ready" #この設定の名称 w.interval = 60.second #監視時間間隔 w.start = "ruby #{File.dirname( __FILE__ ) + '/sample.rb'}" #実際に動かすプログラム w.log = "#{File.dirname( __FILE__ ) + '/sample.log'}" #ログを残す場合の書き込み場所 # プロセスが落ちいていた場合は起動 w.start_if do |start| start.condition(:process_running) do |c| c.running = false end end # メモリが一定上超えたら再起動 w.restart_if do |restart| restart.condition(:memory_usage) do |c| c.above = 10.megabytes end end end |
・godの起動
# god -c sample_ready.god
これだけで監視の開始です。
試しに、rubyで動かしているプロセスをkillして、60秒後に再度確認してみると起動しているのが確認できます。
このGODの監視を止めるコマンドは
# god stop sample_ready
です。stopのあとに続く文字列は、ファイル名ではなく、w.nameで設定した名称でなければいけません。
Deamontoolやmonitとの比較についても検証してみたいところですが、
今回はここまでとさせていただきます。