Archive for the ‘ruby’ Category

    はてなブックマーク - プロセス監視ツール「God」
    このエントリーをはてなブックマークに追加

    はじめまして。
    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との比較についても検証してみたいところですが、
    今回はここまでとさせていただきます。