monit
2008/5/23更新
対応バージョン: 4.10.1
monitrcの設定項目は以下の2つのセクションに分かれる。
monitの動作全般
システムリソース・プロセス等の監視対象に対する設定
以下、主な設定項目についてそれぞれ説明する。
monitの動作全般
デーモンの動作
デーモンとして動作させる場合の監視間隔を秒で指定する。
set daemon 60
設定そのものを省略するとデーモンとして動作せず、すぐに処理が終了する。
ログ出力
ログをファイル、またはsyslog経由で出力する場合の設定を行う。
ファイルに出力する場合は以下のようにファイル名を指定する。
set logfile /var/log/monit.log
syslog経由で出力する場合は以下のようにsyslog facilityオプションに続けてファシリティを指定する。
ファシリティは先頭に"log_"を付与する必要がある。
例) daemonファシリティの場合
set logfile syslog facility log_daemon
ファシリティを省略するとuserファシリティがデフォルトとして使われる。
set logfile syslog
設定そのものを省略するとログは出力されない。
アラート送信先メールサーバ
アラートを送信するメールサーバを指定する。カンマで区切って複数指定可能である。
ポート番号をデフォルトの25以外にする場合はportオプションに続けて指定する。
例)
set mailserver smtp.bar.com, slave.bar.com port 8025, localhost
アラート送信先メールサーバ利用不可時のスプール設定
アラート送信先メールサーバが利用できない場合デフォルトではアラートが捨てられるが、この設定により特定のディレクトリにスプールしておくことができる。
ディスク容量が許す限りスプールできるがslotsオプションで最大個数を指定することもできる。
例)
set eventqueue basedir /var/spool/monit slots 100
(*) ディレクトリは存在しなければ自動的に作成される。
アラートメールフォーマット
アラートメールのフォーマットを指定する。
デフォルトでは以下のフォーマットでメールが送られる。
From: monit@$HOST Subject: monit alert -- $EVENT $SERVICE $EVENT Service $SERVICE Date: $DATE Action: $ACTION Host: $HOST Description: $DESCRIPTION Your faithful employee, monit
$に続く変数には以下の内容が入る。
$HOST
monit動作ホスト名
$EVENT
発生イベント名("Changed"等)
$SERVICE
monitrcで定義されたサービス名("apache"等)
$DATE
イベント発生日時
$ACTION
実行アクション名("restart"等)
$DESCRIPTION
詳細
このフォーマットの任意の一部分を変更することができる。
例) 送信アドレスとタイトルを変更
set mail-format { from: admin@bar.com subject: $SERVICE $EVENT ($DATE) }
アラート送信先メールアドレス
アラートを送信するメールアドレスを指定する。
目的に応じて複数指定することができる。
例) すべてのアラートの送信先
set alert adm@bar.com
例) サービスタイムアウト時に発生するアラートの送信先
set alert sub@bar.com only on { timeout }
内蔵Webサーバ
monitでは設定をWebブラウザから確認するためのWebサーバが用意されている。
以下、ポート番号や待ち受けホスト、許可ユーザなどを設定する。
例)
set httpd port 8880 and # 待ち受けポート use address localhost # 待ち受けホスト allow localhost # 接続許可ホスト allow admin:passwd # 許可ユーザのID/パスワード
このWebサーバにアクセスするとmonitの稼働状態や監視しているサービスの状態が一覧で確認できる。
システムリソース・プロセス等の監視対象に対する設定
CPU/メモリ/ディスク等の各種リソースやサーバプログラムの状態などを監視し、必要に応じてアラート送信やプロセス再起動などを行う設定ができる。
設定そのものが分かりやすいので個々のパラメータの説明は割愛し、いくつかの設定例を示す。
CPU/メモリ使用率
例) ロードアベレージ/CPU使用率/メモリ使用率がそれぞれ一定以上に達したらアラート送信
check system fedora.private.jp if loadavg (5min) > 2 then alert if cpu usage (user) > 70% then alert if cpu usage (system) > 30% then alert if memory usage > 75% then alert
ディスク使用率
例) ディスク使用率/inode使用率が一定以上に達したらアラート送信やディスク使用停止
check device datafs with path /dev/sda1 if space usage > 80% for 5 times within 15 cycles then alert if space usage > 95% then stop if inode usage > 90% then alert
ファイル
例) データベースファイルの指定時間以内に更新されていたらアラート、指定サイズ以上になったらクリーンアッププログラム実行
check file database with path /data/foo.db if timestamp > 15 minutes then alert if size > 100 MB then exec "/usr/local/bin/cleanup.sh"
ディレクトリ
例) 指定したディレクトリのパーミッションやオーナーが指定された状態以外になっていたらアラート送信して以降の監視停止
check directory bin with path /bin if failed permission 755 then unmonitor if failed uid 0 then unmonitor if failed gid 0 then unmonitor
プロセス監視
例) Apacheのプロセスを監視し、停止あるいは応答がなければアラート送信して再起動
check process apache with pidfile /usr/local/apache2/logs/httpd.pid start program = "/etc/init.d/apache start" stop program = "/etc/init.d/apache stop" if failed port 80 protocol http then alert if failed port 80 protocol http then restart
2008/5/23更新
対応バージョン: 4.10.1
公式サイト
http://www.tildeslash.com/monit/
準備
導入OS
Fedora 8,9
インストール
配布ファイル展開
% tar zxvf monit-4.10.1.tar.gz % cd monit-4.10.1
make,インストール
% ./configure <オプション> % make % su % sudo make install
インストール物 (man,infoは除く)
/usr/local/bin/monit
各種設定
/usr/local/etc/monitrcにて設定を行う。同ファイルのパーミッションは0700にしておく。
ここではとりあえず以下のような設定にする。
基本設定
デーモンとして動作、監視間隔は60秒
syslog経由でログ出力
アラート送信先メールサーバとメールアドレスを指定
set daemon 60 set logfile syslog set mailserver smtp.bar.com set alert admin@bar.com
プロセス監視
Apacheのプロセスを監視し、停止あるいは応答がなければアラート送信して再起動
check process apache with pidfile /usr/local/apache2/logs/httpd.pid start program = "/etc/init.d/apache start" stop program = "/etc/init.d/apache stop" if failed port 80 protocol http then alert if failed port 80 protocol http then restart
その他の設定も含め、詳細は以下を参照のこと。
関連資料・記事
またmonitrcに以下のように記述することによって外部のファイルを設定ファイルの一部としてインクルードすることができるので、monitrcを変更することなく設定を追加/変更したい場合などに便利である。
include /usr/local/etc/monit.d/*
動作確認
デーモンを起動する。
% sudo /usr/local/bin/monit
プロセスが動作しているか確認する。
% ps ax|grep monit 970 ? S 0:07 /usr/local/bin/monit
ログを出力するようにしている場合はログファイルに以下の内容が出力されていることを確認する。
Starting monit daemon Monit started
監視対象のプロセスが再起動できることを確認する。
例えば上述ようにApacheのプロセスを監視している場合、以下のようにApacheのデーモンを停止させてしばらくして再起動されるのを確認する。
% sudo service apache stop
この時ログには以下のような内容が出力される。
'apache' process is not running 'apache' trying to restart 'apache' start: /etc/init.d/apache
また以下のようなメールが配信される。
(Apache未起動)
subject: monit alert -- Does not exist apache Does not exist Service apache Date: Thu, 22 May 2008 02:26:02 +0900 Action: restart Host: fedora.private.jp Description: 'apache' process is not running Your faithful employee, monit
(Apache起動) ... monitが再起動
monit alert -- Exists apache Exists Service apache Date: Thu, 22 May 2008 02:26:09 +0900 Action: alert Host: fedora.private.jp Description: 'apache' process is running with pid 8649 Your faithful employee, monit
デーモンを終了する。
% sudo /usr/local/bin/monit quit
initスクリプト設置
スクリプト作成
/etc/rc.d/init.d/monitを作成する。
#!/bin/bash # # monit # # chkconfig: 345 80 20 # description: monit server TARGET=monit DST_PREFIX=/usr/local DST_BIN=${DST_PREFIX}/bin/${TARGET} DST_CONF=${DST_PREFIX}/etc/monitrc [ -f ${DST_BIN} ] || exit 0 [ -f ${DST_CONF} ] || exit 0 start() { echo -n "Starting ${TARGET}: " ${DST_BIN} > /dev/null 2>&1 echo } stop() { echo -n "Shutting down ${TARGET}: " ${DST_BIN} quit > /dev/null 2>&1 echo } restart() { echo -n "Restarting ${TARGET}: " ${DST_BIN} reload > /dev/null 2>&1 echo } case "$1" in start) start ;; stop) stop ;; restart) restart ;; *) echo "Usage: `basename $0` {start|stop|restart}" >&2 exit 1 esac exit 0
サービス登録/起動
% sudo chkconfig --add monit % sudo chkconfig --list monit monit 0:off 1:off 2:off 3:on 4:on 5:on 6:off % sudo service monit start