2008年8月20日水曜日

Monitでサービス・プロセス監視、止まったら勝手にリスタート(3)

Monitオフィシャルサイト
 

ローカルプロセスの監視をする


前回の記事(2)からの続き
 

とりあえず起動するようになった monit にサービス・プロセスの監視をさせてみる。
監視対象のサービスごとに(2)で作成したディレクトリ、 "/etc/monit.d/conf.d" に "XXXX.conf" ファイルを作っていきます、Monitでインクルード指定しておけばリスタートで監視が始まる。
ではサンプルを
 

Postfixで提供するSMTPを監視、サーバレスポンスをチェックつき


メールは配送も受付も止まるといやなので監視したい。
 
"postfix.conf" とでもして下記内容で保存する。

[sourcecode language='bash']
check process postfix with pidfile /var/spool/postfix/pid/master.pid
group mail
start program = "/etc/init.d/postfix start"
stop program = "/etc/init.d/postfix stop"
if failed port 25 protocol smtp then restart
if 5 restarts within 5 cycles then timeout
[/sourcecode]
 

さてこれでpidファイルの内容から該当のpidプロセスが生きているか監視する、pidが変わった時も教えてくれる。
で、ローカルの TCP/25番 宛にSMTPプロトコルによるサービス状態確認を行う、SMTPのログファイルを見れば繋ぎに来ているのがわかります。
※60秒ごとにmonitの確認が来てログに残るとうっとおしい場合は動作確認したら除外してしまえばよいです。
 

これでPOSTFIXを止めてみるとアラートメールを受け取る頃には勝手に復活している。
一応5回連続でリスタートがかかるようなら、何かしらおかしい ということでその後のリスタートは行わない。
 
 
アプリケーションプロトコルによるサービス状態の確認は HTTP や SSH など主要なプロトコルに対応しているほ他、 OverSSL/TSL 用にポート指定の所で "TYPE TCPSSL" といったオプションが使える。
もっと応用した使い方は公式ドキュメントのサンプルが詳しいです。
 
 

initからの起動


監視対象プロセスの起動がDaemontoolsのようにMonit経由ではないので、Monitプロセス自身がいなくなると監視止まってしまうがな。
ということで monit の起動・動作監視を、全てのプロセスの親である init にやらせます。
起動スクリプトはこれ以降使いません、chkconfig も monit は off です
 
 

まず monit側 で準備、(2)でつくった base.conf をちょっと変更
# set init
↓コメントを外す
set init

 

で、init の設定ファイル "/etc/inittab" を編集、 公式マニュアルに "-I" オプションを使えとあるのでそのように。
###最終行に追記します
mo:2345:respawn:monit -Ic /etc/monit.conf

 
ランレベル2から5で monitを起動、いなければ立ち上げる という設定です。
 

で、monitが停止していることを確認したら、initの再読み込みを下記コマンドで行います。

# telinit q

 
 
これで自動的にmonitが起動したままになります、kill で何度プロセスを停止しても蘇りますので試してみましょう。
 
 
 

次回、monit管理用のWEBとコマンドラインからの管理を記事にしてmonit紹介終わりです。
 
 



Monitでサービス・プロセス監視、止まったら勝手にリスタート(1)
Monitでサービス・プロセス監視、止まったら勝手にリスタート(2)
Monitでサービス・プロセス監視、止まったら勝手にリスタート(3)
Monitでサービス・プロセス監視、止まったら勝手にリスタート(4)