GOL @Wiki
プロセス監視をしよう
最終更新:
divadiva
-
view

monitとは、プロセス、ファイル、ディレクトリ、ファイルシステムを管理・監視するためのユーティリティです。この手のオープンソースプロダクトとしては他に daemontools というのもありますが、今回は、HPに犬の写真が使われていて好感のもてるmonitをいぢってみることにしました。
monitは、監視対象のサービスが停止していた場合は再起動をかけ、あるいはシステムリソースを大量に使用している場合はサービスを停止して再起動をかけます。システム管理者へのメール通知もできます。また、デーモンがゾンビ化していないかや、CPUやメモリをどれくらい使用しているかも監視できます。
また、ファイル、ディレクトリ、ファイルシステムの変更を監視することもできます。タイムスタンプの変化、チェックサムやサイズの変化などを監視します。つまり、セキュリティ上の都合で、触られたくないファイルなどを監視できることを意味しています。
もっと一般的な使用法としては、マシンのCPU、メモリ使用率など、マシン負荷を監視することができます。
インストール
基本的にソースで配布されていますが、単に使うだけならめんどうはいりません。バイナリパッケージをダウンロードして、パッケージインストール・コマンド一発でOK。幸い、Solaris版もあります。
下記はインストールファイルの一例です。
/etc/monit.conf /etc/monit.d /etc/rc.d/init.d/monit /usr/bin/monit /usr/share/doc/monit-4.9 /usr/share/doc/monit-4.9/CHANGES.txt /usr/share/doc/monit-4.9/CONTRIBUTORS /usr/share/doc/monit-4.9/COPYING /usr/share/doc/monit-4.9/FAQ.txt /usr/share/doc/monit-4.9/LICENSE /usr/share/doc/monit-4.9/PACKAGES /usr/share/doc/monit-4.9/README /usr/share/doc/monit-4.9/README.SSL /usr/share/doc/monit-4.9/STATUS /usr/share/doc/monit-4.9/UPGRADE.txt /usr/share/man/man1/monit.1.gz /var/lib/monit
設定
monitはmonitrcという制御ファイルに従って動作します。これは ~/.monitrc を指しますが、このファイルがないばあいは、/etc/monit.conf を参照します。
制御ファイルは3種類の文章(?)で構成されます。1つは「set」で始まる環境設定文。たとえば下記のようなものですと、
set alert manager@foo.bar only on { timeout }
サービス・タイムアウトに関するアラートを manager@foo.bar 宛てにメール送信します。
1つは「include」で始まる外部制御ファイル読み込み指示文。たとえば、
include /etc/monit.d/*
は、/etc/monit.d ディレクトリ内の各サービスごとの制御文を読み込みます。
もう1つは「check」で始まる、監視対象サービスに関する情報です。
動作モードでの動作
下記のコマンドでmonitを起動するとバックグラウンドで動作し、指定した秒間隔で、サービス状態をチェックします。
# /usr/bin/monit -d <監視ポーリング間隔秒数>
monitrc内に、
set daemon <秒数>
と記述すると、毎回指定する手間が省けます。
また、monitをコントロールするためにWeb管理コンソールが使用可能です。monitrc内で、下記のような設定をします。想像がつくとは思いますが、
set httpd port 2812 and use address localhost allow localhost allow admin:admin
この設定でmonitを起動すると、Web管理コンソールはローカルホストからのみ利用可能で、ユーザID:admin、パスワード:admin で接続可能となります。
monit自身は?
monitでサービスを監視するのはよしとして、monit自身は誰が制御すればよいのでしょうか?
もっとも推奨される方法は init でmonitを制御することです。monitが何らかの理由で停止した場合は、initがmonitを再起動させます。
もっとも推奨される方法は init でmonitを制御することです。monitが何らかの理由で停止した場合は、initがmonitを再起動させます。
とにもかくにも使ってみる!
というわけで、はやる気持ちを抑えず(!)にとりあえずさっさとコマンドから起動してみます。今回はあらかじめ、bind に関するスクリプトを /etc/monit.d/bind という名前で作成しておきました。スクリプトはmonitのサイトのサンプルを若干修正した上で作成しました。
エイ!
# monit -d 120 Starting monit daemon with http interface at [localhost:2812] #
と、起動メッセージが出れば、とりあえずOKです。
で、http://localhost:2812/ にアクセスして、admin/admin でログインすれば。。

のような画面が出てきて、めでたし、めでたし!
(便宜上、RedHatでキャプチャしたものとなっております)
(便宜上、RedHatでキャプチャしたものとなっております)
添付ファイル