Monitを導入してsshdを監視する
Monit
Monitとは、サービスを再起動したり、異常をメールで通知してくれたりするデーモン監視プログラムです。
今回はsshdが落ちてしまった際に、Monitが自動で起動してくるように設定。今回の環境はCentOS 5.4、monit-5.1.1-1.el5.rfです。
導入の流れとしては下記のようになります。
- rpmforgeリポジトリの追加
- monitのインストール
- monit設定ファイルの用意
- sshd監視用ファイルの作成
- init経由でのmonit起動
- 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

