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

公式サイト

準備

導入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