at posts/single.html

monit で始めるお手軽サーバ監視

最近、この日記を設置している VPS サーバがちょっと不安定。 サーバ上で動いている Apache プロセスが、頻繁に落ちている。 VPS サーバのリソース制限*1に引っかかったかと思ったけど、アラートがあがっていないので原因不明。

これまでは montastic というフリーの監視サービスを使っていた。 でも、 Apache がダウンしてからアラートが届くまで数時間のタイムラグがあったり、外出先の場合は帰宅しないと Apache を再起動できなかったりと、サービス復旧までに時間がかかっていた。

仕方がないので、 cron で定期的にプロセスを監視して、 httpd プロセスが落ちていたら自動的に再起動するスクリプトでも作ろうかと考えていた。 そんな中、ちょっと調べてみたら monit という監視ツールがお手軽に目的を達成できそうだと分かったので、早速入れてみた。

monit とは?

monit はサーバの監視ツール。 サーバのリソース (CPU使用率、メモリなど) やプロセスの状態を監視して、自動的にアラートメールを送ったりプロセスを再起動したりする機能がある。 監視ツールと言えば、商用の JP1 やオープンソースの Nagios などがあるけど、これらの遠隔監視が可能なツールと違って monit はローカル上での監視になる。 シンプルな分だけ、面倒な設定が不要ですぐに使うことができる。

参考になるサイト。

インストール

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 サーバの公開範囲をただしく設定しておくこと。

monit

この状態で試しに Apache サーバを終了してみると、自動的にプロセスを再起動してくれた。 設定ファイルを見ると、他にも CPU やメモリ使用量での監視もできるみたい。

と言うわけで、1台のサーバを気軽に監視するには、 monit がお手軽でオススメ。

関連する日記