monit で始めるお手軽サーバ監視
最近、この日記を設置している VPS サーバがちょっと不安定。 サーバ上で動いている Apache プロセスが、頻繁に落ちている。 VPS サーバのリソース制限*1に引っかかったかと思ったけど、アラートがあがっていないので原因不明。
これまでは montastic というフリーの監視サービスを使っていた。 でも、 Apache がダウンしてからアラートが届くまで数時間のタイムラグがあったり、外出先の場合は帰宅しないと Apache を再起動できなかったりと、サービス復旧までに時間がかかっていた。
仕方がないので、 cron で定期的にプロセスを監視して、 httpd プロセスが落ちていたら自動的に再起動するスクリプトでも作ろうかと考えていた。 そんな中、ちょっと調べてみたら monit という監視ツールがお手軽に目的を達成できそうだと分かったので、早速入れてみた。
monit とは?
monit はサーバの監視ツール。 サーバのリソース (CPU使用率、メモリなど) やプロセスの状態を監視して、自動的にアラートメールを送ったりプロセスを再起動したりする機能がある。 監視ツールと言えば、商用の JP1 やオープンソースの Nagios などがあるけど、これらの遠隔監視が可能なツールと違って monit はローカル上での監視になる。 シンプルな分だけ、面倒な設定が不要ですぐに使うことができる。
参考になるサイト。
- ウノウラボ - プロセスの監視を行う デーモン monit
- Monit の導入 - ARCHIVESDRIVE HD
- Monit の導入 - 設定ファイルいくつか - ARCHIVESDRIVE HD
- monit 入門 - dann@catalyst
インストール
OSはCentOS 5.2。rpmforgeをyumリポジトリに加えていれば、以下のコマンドでインストールできる。
$ sudo yum install monit
設定ファイルは /etc/monit.conf で、起動スクリプトは /etc/init.d/monot にインストールされる。
設定
/etc/monit.conf に監視の設定を記述する。 かなりのテンプレートが書かれているので、基本的にはコメントアウトして部分的に変更するだけ。 以下、ポイントを解説。
まずは基本設定。 120秒ごとに監視をする。ただし、起動時は240秒待ってから監視をスタート(起動時はプロセスが立ち上がるまでに時間がかかる)。 ログは syslog に送り、アラートメールは管理者宛に送る。 アラートメールを送れるようにするために、あわせてに postfix をインストールした。
set daemon 120 # check services at 2-minute intervals with start delay 240 # optional: delay the first check by 4-minutes set logfile syslog facility log_daemon set mailserver localhost # primary mailserver set alert admin@example.com # receive all alerts
次は監視用 Web サーバの設定。 Monit には、監視状況をチェックするための Web サーバが付属している。 これを有効にすることで、外部からでも Web ブラウザだけでサービスの状況を確認することができる。 しかも、サービスの停止や再起動も可能。
set httpd port 2812 and use address machu.jp # only accept connection from localhost allow ******:******** # require user 'admin' with password 'monit'
以下はhttpプロセスの設定。 「process httpd」は管理上の名前。実際のプロセス名でなくてもよさそう。 start programに起動スクリプト、stopには停止スクリプトを記述する。 pidfileにはPIDが書かれたファイルを設定する。
if 文以降では、実際に Apache サーバに接続するための設定が書かれている。 ここではポート 80 に HTTP で接続して、ルート「/」のファイルが取得できるかどうかテスト。 取得できなかったら自動的に再起動するようになっている。
check process httpd with pidfile /var/run/httpd.pid start program = "/etc/init.d/httpd start" with timeout 60 seconds stop program = "/etc/init.d/httpd stop" if failed host www.machu.jp port 80 protocol http and request "/" then restart
設定ファイルの記述が終われば、 monit を起動する。
$ /etc/init.d/monit start
設定ファイルが正しく、かつローカルにSMTPサーバが起動していれば、起動時にアラートメールが送られるはず。 また、 /var/log/messages にも、 monit が出力するログが書き出されるようになっている。
起動後は Web ブラウザから監視状態をチェックできる。 監視画面からはサービスの起動停止も可能なので、 Web サーバの公開範囲をただしく設定しておくこと。
この状態で試しに Apache サーバを終了してみると、自動的にプロセスを再起動してくれた。 設定ファイルを見ると、他にも CPU やメモリ使用量での監視もできるみたい。
と言うわけで、1台のサーバを気軽に監視するには、 monit がお手軽でオススメ。