UNIXのシステム監視ツールmonitを紹介します。プロセス、ファイルシステム、ネットワーク、CPUやメモリなどの状況をモニタリングして、特定の状況(プロセスが死んでいる、ディスクの使用率が一定の値を超えた etc)になったら、決めておいた処理(プロセスの再起動、アラートメールの送信 etc)を実行することができます。
主要なLinuxディストリビューションならパッケージが用意されています。ソースからのインストールも./configure && make && make installで簡単に行えます。Ubuntu12.04のパッケージからインストールしたという前提で進めます。monitのバージョンは5.3.2です。
インストール
| 
					 1  | 
						$ apt-get install monit  | 
					
起動
インストールすると起動スクリプト/etc/init.d/monitが作られます。また設定ファイル/etc/monit/monitrcが作られます。設定ファイルは~/.monitrc, /etc/monitrc, ./monitrcの順番で検索されて最初に見つかったものが使われますが、以下のように明示的に指定することも可能です。
| 
					 1  | 
						$ monit -c /etc/monit/monitrc  | 
					
設定
monitrcを編集もしくは/etc/conf.d/の下に設定ファイルを追加してmonitの動作をカスタマイズします。カスタマイズしたら設定ファイルを再読込(もしくは再起動)して変更内容をmonitに反映させますが、その前に以下のようにして設定ファイルの文法上の誤りをチェックします。
| 
					 1 2 3 4  | 
						$ cd /etc/monit $ monit -t $ Control file syntax OK $ /etc/init.d/monit reload  | 
					
1.共通設定
チェックする内容によらず、共通で使用する主要な設定項目としては次のようなものがあります。
(1)デーモンとして起動してサービスをチェックする間隔
| 
					 1 2 3  | 
						set daemon 120              # check services at 2-minute intervals #   with start delay 240    # optional: delay the first check by 4-minutes (by #                           # default Monit check immediately after Monit start)  | 
					
(2)ログファイルの指定
| 
					 1  | 
						set logfile /var/log/monit.log  | 
					
(3)アラートメールの送信に使うSMTPサーバー
2〜4行目はメールサーバーが落ちていた場合にイベントを保存するキューの記述です。
| 
					 1 2 3 4  | 
						set mailserver XXX.XXX.XXX.jp set eventqueue     basedir /var/lib/monit/events # set the base directory where events will be stored     slots 100                     # optionally limit the queue size  | 
					
(4)アラートメールのフォーマット
送信するメールの文面などもカスタマイズできます。例えば、From:は以下のようにして書き換えることができます。
| 
					 1  | 
						set mail-format { from: info@XXX.XXX.XXX.jp }  | 
					
(5)アラートメールの送信アドレス
特定のイベントが発生した場合にのみ送信したい場合は、2行目のように{}内にそのイベントを指定します。複数指定する場合はカンマで区切って記述します。
| 
					 1 2  | 
						set alert sysadm@XXX.XXX.XXX.jp                       # receive all alerts set alert manager@XXX.XXX.XXX.jp only on { timeout }  # receive just service-timout alert  | 
					
ここまでできたら、設定ファイルに文法上の誤りがないか確認して、monitを再起動してみましょう。っ正しく設定できていれば、set alertで設定したアドレス宛にメール以下のような2通のメール送信されているはずです。1つはmonitが停止したことをもう1つはmonitが起動したことを告げています。
| 
					 1 2 3 4 5 6 7 8 9  | 
						Monit instance changed Service system_XXX         Date:        Fri, 22 Feb 2013 15:31:21         Action:      stop         Host:        thinkly         Description: Monit stopped Your faithful employee, Monit  | 
					
| 
					 1 2 3 4 5 6 7 8 9  | 
						Monit instance changed Service system_thinkly         Date:        Fri, 22 Feb 2013 15:32:37         Action:      start         Host:        thinkly         Description: Monit started Your faithful employee, Monit  | 
					
2.個別設定
様々な項目をチェックできますが、今回はApacheの死活監視を行なってみます。
httpリクエストを投げてNGの場合にapacheを再起動して5回のチェックのうち3回NGの場合にアラートメールを送信するという設定です。
| 
					 1 2 3 4 5  | 
						check process apache2 with pidfile "/var/run/apache2.pid"       start program = "/etc/init.d/apache2 start"       stop  program = "/etc/init.d/apache2 stop"       if failed port 80 protocol http then restart       if 3 restarts within 5 cycles then alert  | 
					
