Monit Service Manager

by winson, about 1 year ago.

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,所以先略過。

如果需要設定範例可以自行到Pastie找找

再來是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/monit
monit的安裝還算簡單,就是設定過程稍微複雜了一點。

但這沒差,總比不之所云的XML設定檔要清楚易懂,更何況:

據了解,Ruby上頭快要有一支稱為神(God)的監控程式,未來會以Gem的形式釋出,而他的設定檔根本就是Ruby的語法,簡單易懂,敬請期待。

從瀏覽器看到的monit畫面如下,相當簡單清爽:


  • Posted in Mongrel, on Saturday, June 23, 2007, at 06:05 AM.