Ruby on Rails的架構組合實在太多了,但Mongrel的確是Ruby on Rails平台的主力Server,因為這傢伙又穩又可以做Cluster,甚至連Django那群人都很想要擁有一台。
Mongrel夠穩,但是臨時出狀況怎麼辦?
有沒有辦法隨時監控著?可不可以設定條件自動發email通知?可不可以設定條件自動重開?萬一流量暴增,可不可以在他佔系統資源過多的時候自動通知或自動重開?
有了monit,一切都好辦,那就看看monit可以怎樣幫Mongrel的忙。
monit本身用途很廣,可以監控UNIX/Linux底下各種檔案、目錄、行程或各種裝置,拿來監控Mongrel自然綽綽有餘。
用monit的好處是可以透過他帶起相關服務,只要monit起來之後,被設定監控的服務也會一併帶起來,或者也可以利用以下指令:
monit [start|stop|restart|monitor|unmonitor|status|summary] [all|appname]啟動或關閉服務,或看全部服務的狀態:
monit summary Process 'lighttpd' running Process 'mysql' running Process 'mephisto' running Process 'money' running System 'etch' running如此一來,無論是控制一群Mongrel server的Mongrel cluster或是那支控制Mongrel的小程式根本都用不到了。
除了下載最新版原始碼安裝monit之外,在Debian平台上可以像安裝其他套件一樣安裝monit,做法如下:
sudo apt-get install monit
Setting up monit (4.8.1-2.1) ...
Starting daemon monitor: monit won't be started/stopped
unless it it's configured
please configure monit and then edit /etc/default/monit
and set the "startup" variable to 1 in order to allow
monit to start要開機自動啟動,請修改startup參數為1。sudo pico /etc/default/monit # Defaults for monit initscript # sourced by /etc/init.d/monit # installed at /etc/default/monit by maintainer scripts # Fredrik Steen <stone@debian.org> # You must set this variable to for monit to start startup=1再來是修改monitrc這個設定檔:
sudo pico /etc/monit/monitrc
# 設定每兩分鐘檢查一次
set daemon 120
# 要不要把訊息寫到系統log,隨便。
set logfile syslog facility log_daemon
# 設定瀏覽器入口位址及Port,要小心設定,不然會進不去。
set httpd port 2812 and
use address localhost
allow localhost
allow admin:monit
# 引用其他設定檔。
include /etc/monit/*.monitrc這個設定檔還包括email通知、監控Apache、MySQL等相關設定,但這裡的重點在Mongrel,所以先略過。
再來是Mongrel的設定,我把mongrel的部份,設在另一個mongrel.monitrc檔案裡頭,這樣比較好整理,也不會跟其他監控設定搞在一起。
這裡先用最簡單的語法來監控Mongrel:
##### blahblah app #####
check process blahblah\
with pidfile blahblah...
##### mybug app #####
check process mybug\
with pidfile /home/winson/projects/mybug/log/mongrel.pid
start program = "/var/lib/gems/1.8/bin/mongrel_rails start\
-d -p 3200 -e production -c /home/winson/projects/mybug\
-P /home/winson/projects/mybug/log/mongrel.pid"
stop program = "/var/lib/gems/1.8/bin/mongrel_rails stop\
-P /home/winson/projects/mybug/log/mongrel.pid"
if totalmem is greater than 60.0 MB for 10 cycles then restart前面的start program跟stop program沒什麼,就是是啟動與關閉Mongrel的語法,最後一個是條件設定,當10次檢查都佔用記憶體超過60MB的時候,monit會自動將Mongrel重開。
如果有好幾支Mongrel需要監控,務必要在check process後面給他不同的名稱。
當然你也可以做其他設定,例如email通知或CPU佔用多少就重開之類的。
monit本身附有一支Web server,可以隨時從瀏覽器進去檢查Mongrel,甚至還可以從瀏覽器進去開啟、關閉或重開Mongrel。
先檢查一下設定檔語法對不對:
sudo monit -t有問題就改一下設定,沒問題可以直接啟動:
sudo /etc/init.d/monitmonit的安裝還算簡單,就是設定過程稍微複雜了一點。
但這沒差,總比不之所云的XML設定檔要清楚易懂,更何況:
據了解,Ruby上頭快要有一支稱為神(God)的監控程式,未來會以Gem的形式釋出,而他的設定檔根本就是Ruby的語法,簡單易懂,敬請期待。
從瀏覽器看到的monit畫面如下,相當簡單清爽:

