Monitを導入してsshdを監視する

Monit
Monitとは、サービスを再起動したり、異常をメールで通知してくれたりするデーモン監視プログラムです。
今回はsshdが落ちてしまった際に、Monitが自動で起動してくるように設定。今回の環境はCentOS 5.4、monit-5.1.1-1.el5.rfです。
導入の流れとしては下記のようになります。

  1. rpmforgeリポジトリの追加
  2. monitのインストール
  3. monit設定ファイルの用意
  4. sshd監視用ファイルの作成
  5. init経由でのmonit起動
  6. monitでのデーモン監視確認



rpmforgeリポジトリの追加

Monitをyumでインストールするため、rpmforgeリポジトリを追加。

rpm --import http://dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txt
rpm -ivh http://apt.sw.be/redhat/el5/en/i386/RPMS.dag/rpmforge-release-0.3.6-1.el5.rf.i386.rpm

monitのインストール

yumで一発インストール。ラクチン

yum -y install monit

Monit設定ファイルの用意

Monitの主な設定ファイルは、

# Monit自身の設定ファイル(監視間隔やアラートメールの宛先など設定)
/etc/monit.conf
 
# Monitが監視するデーモンの設定ファイルを配置する
/etc/monit.d/

になります。

デフォルトの監視間隔120秒は少し長いので、60秒にperlで置換。
また以前init経由でmonitを起動しようとしたとき、monit.confのパーミッションを700にしろとエラーが出て起動してこなかったことがあるので、パーミッションを700に。

perl -i.dist -p -e 's/^# set daemon  120/set daemon  60/g' /etc/monit.conf
chmod 700 /etc/monit.conf

sshd監視用ファイルの作成

sshd監視用のファイルは/etc/monit.d/sshd として、下記ヒアドキュメントで用意。

/bin/cat<< EOF> /etc/monit.d/sshd
check process sshd with pidfile /var/run/sshd.pid
start program "/etc/rc.d/init.d/sshd start"
stop program "/etc/rc.d/init.d/sshd stop"
if failed port 22 protocol ssh then restart
if 5 restarts within 5 cycles then timeout
EOF

init経由でのMonit起動

Monitが落ちてしまっては、元も子もないので、Monitが落ちても自動で再起動させるためにinit経由で起動させるよう設定。/etc/monit.d/base.conf というファイルを用意し、/etc/inittabにmonit用の設定を追記。

追記:2010年5月21
inittabにmonitの絶対パス(/usr/bin/monitとか)を記載しないと動作しないサーバあったので修正しました。

echo "set init" >> /etc/monit.d/base.conf
MONITPATH=`which monit`
echo "mo:2345:respawn:${MONITPATH} -Ic /etc/monit.conf" >> /etc/inittab

次にinit経由でmonitを起動させて、落ちたときに自動で再起動がかかるかテスト。

# chkconfigでmonitをoffにする。chkconfigでonになっているとmonitが2重起動して正常動作しないので注意
chkconfig monit off
chkconfig --list monit
 
# monitが起動していたら停止させ、initの再読み込みを行う。
/etc/rc.d/init.d/monit stop
ps aux | grep monit
 
# monitが停止していることを確認して、設定読み込み。monitが起動してくることを確認する。
telinit q
ps aux | grep monit
 
# monitをkillして再起動してくるか確認
pkill monit
ps aux | grep monit

monitが落ちても自動で再起動がかかるようになったら、監視デーモンの動作確認。

monitでのデーモン監視確認

この作業中はサーバからログアウトしないようにしましょう。設定に不備があった場合sshdが起動してこないため、sshdを落としてログアウトしてしまうと、サーバに再ログインできなくなります。

# sshd が起動していることを確認。
ps aux | grep sshd
 
# sshdを停止
/etc/rc.d/init.d/sshd stop
#  sshdが停止していることを確認。(このとき絶対にログアウトしないようにしてください。
ps aux | grep sshd
 
# monit.confで設定した60秒後に再度sshdの状態を確認。無事起動してきていれば設定完了。
ps aux | grep sshd

sshdをkillしたり、起動スクリプトでstopを何度かしてmonitが自動で起動してくるのを確認して設定完了です。
ちなみにMonitでデーモン監視する場合でもsshdのchkconfigはonにしておきましょう。

chkconfig sshd on
chkconfig --list sshd

Monitのデーモン監視用設定ファイルのサンプルはMonit公式ページのドキュメントに多くありますので、ぜひ参照してみてください

参考サイト
Monitでサービス・プロセス監視、止まったら勝手にリスタート(3) « SawanoBlog.
ウノウラボ Unoh Labs: プロセスの監視を行う デーモン monit


Write a Comment

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>