注意:
ちょっとふざけて書いてます。
気分が悪くなる方はすぐにページを離れてください。
##基本
###概要
Ruby製モニタリングアプリケーション
設定ファイルをRubyで記述できる
名は " G o d " = " ネ 申 "
###インストール
$ [sudo] gem install god
god --version #=> Version 0.12.1
バージョンが確認できればOK
###神を動かしてみる
loop do
puts 'Hello'
sleep 1
end
というプログラムを作る。
確認のため、実行してみよう。
$ ruby simple.rb #=> 1秒おきに'Hello'と出力する
次に、神への願いを記述する。(Godの設定ファイルを書く)
God.watch do |w|
w.name = "simple"
w.start = "ruby [/full/path/to/]simple.rb" # sample.rbへのフルパス
w.keepalive
end
神が降臨する。(Godを起動する)
$ god -c [/path/to/]simple.god
神の気配を感じるか?(プロセスが生きているか確認)
$ ps ax | grep simple.rb
3546 s000 R+ 0:00.00 grep simple.rb
mosson-book:Desktop mosson$ god -c simple.god
mosson-book:Desktop mosson$ ps ax | grep simple.rb
3554 s000 R+ 0:00.00 grep simple.rb
神がいったい何をしたというのか!!?(先ほどのコードの解説)
# 神は見ておられる
God.watch do |w|
# 神に名前を覚えていただく
w.name = "simple"
# 神にコマンド実行の方法を覚えていただく
w.start = "ruby [/full/path/to/]simple.rb"
# 神にプロセスを生かし続けていただく
w.keepalive
end
$ god -c [/path/to/]simple.god -D
# -c CONFIG コンフィグファイルを読み込む
# -D デーモンで実行しない
# 神の預言を授かりたい人は以下のコマンドをうつべきだ
$ god --help
神に先ほどのプロセスを止めてもらう
$ god stop simple #=> 神は名前を覚えていらっしゃる
Sending 'stop' command
The following watches were affected:
simple
プロセスを確認する
$ ps ax | grep simple.rb
3560 s000 S+ 0:00.00 grep simple.rb
いったん神を停止する
$ god terminate
神に監視の条件を告げてみよう
God.watch do |w|
w.name = "simple"
w.start = "ruby /full/path/to/simple.rb"
# 次の条件で再起動
w.keepalive(
:memory_max => 150.megabytes,
:cpu_max => 50.percent
)
end
この条件を達成するためにサンプルアプリケーションを改変する
data = ''
loop do
puts 'Hello'
100000.times { data << 'x' }
end
お気づきの通りこのプログラムはメモリダダ漏れを狙っている。
良き羊達は実行しないように。
それでは神に降臨していただこう。
$ god -c [/path/to/]simple.god -D
今回はノンデモナイズで起動する
I [2012-09-14 18:12:01] INFO: Loading simple.god
I [2012-09-14 18:12:01] INFO: Syslog enabled.
I [2012-09-14 18:12:01] INFO: Using pid file directory: /Users/mosson/.god/pids
I [2012-09-14 18:12:01] INFO: Started on drbunix:///tmp/god.17165.sock
I [2012-09-14 18:12:01] INFO: simple move 'unmonitored' to 'init'
I [2012-09-14 18:12:01] INFO: simple moved 'unmonitored' to 'init'
I [2012-09-14 18:12:01] INFO: simple [trigger] process is not running (ProcessRunning)
I [2012-09-14 18:12:01] INFO: simple move 'init' to 'start'
I [2012-09-14 18:12:01] INFO: simple start: ruby /Users/mosson/Desktop/simple.rb
I [2012-09-14 18:12:01] INFO: simple moved 'init' to 'start'
I [2012-09-14 18:12:01] INFO: simple [trigger] process is running (ProcessRunning)
I [2012-09-14 18:12:01] INFO: simple move 'start' to 'up'
I [2012-09-14 18:12:01] INFO: simple registered 'proc_exit' event for pid 3763
I [2012-09-14 18:12:01] INFO: simple moved 'start' to 'up'
I [2012-09-14 18:12:01] INFO: simple [ok] memory within bounds [5024kb] (MemoryUsage)
I [2012-09-14 18:12:01] INFO: simple [ok] cpu within bounds [29.1%%] (CpuUsage)
…
I [2012-09-14 18:12:16] INFO: simple [ok] memory within bounds [5024kb, 33220kb, 61332kb, 88756kb] (MemoryUsage)
I [2012-09-14 18:12:16] INFO: simple [trigger] cpu out of bounds [29.1%%, *98.4%%, *100.0%%, *100.0%%] (CpuUsage)
I [2012-09-14 18:12:16] INFO: simple move 'up' to 'restart'
I [2012-09-14 18:12:16] INFO: simple deregistered 'proc_exit' event for pid 3763
I [2012-09-14 18:12:16] INFO: simple stop: default lambda killer
I [2012-09-14 18:12:16] INFO: simple sent SIGTERM
I [2012-09-14 18:12:16] INFO: simple process stopped
I [2012-09-14 18:12:16] INFO: simple start: ruby /Users/mosson/Desktop/simple.rb
I [2012-09-14 18:12:16] INFO: simple moved 'up' to 'restart'
I [2012-09-14 18:12:16] INFO: simple [trigger] process is running (ProcessRunning)
I [2012-09-14 18:12:16] INFO: simple move 'restart' to 'up'
I [2012-09-14 18:12:16] INFO: simple registered 'proc_exit' event for pid 3773
I [2012-09-14 18:12:16] INFO: simple moved 'restart' to 'up'
I [2012-09-14 18:12:16] INFO: simple [ok] memory within bounds [5012kb] (MemoryUsage)
I [2012-09-14 18:12:16] INFO: simple [ok] cpu within bounds [32.8%%] (CpuUsage)
I [2012-09-14 18:12:21] INFO: simple [ok] memory within bounds [5012kb, 32936kb] (MemoryUsage)
I [2012-09-14 18:12:21] INFO: simple [ok] cpu within bounds [32.8%%, *99.0%%] (CpuUsage)
I [2012-09-14 18:12:26] INFO: simple [ok] memory within bounds [5012kb, 32936kb, 61164kb] (MemoryUsage)
I [2012-09-14 18:12:26] INFO: simple [ok] cpu within bounds [32.8%%, *99.0%%, *100.0%%] (CpuUsage)
I [2012-09-14 18:12:31] INFO: simple [ok] memory within bounds [5012kb, 32936kb, 61164kb, 89260kb] (MemoryUsage)
I [2012-09-14 18:12:31] INFO: simple [trigger] cpu out of bounds [32.8%%, *99.0%%, *100.0%%, *100.0%%] (CpuUsage)
cpu out of bounds が発生して
move 'up' to 'restart'が呼ばれた。
神は見ておられた。
というようにgodを使うと簡単に便利なことができました。
もっと気になる方はオフィシャルページへGO!