ServersMan@VPS (CentOS 5) に Monit を入れてサービスの監視+自動起動


ServersMan@VPS に サービス・プロセス監視 + 自動起動をやってくれる Monit を入れてみたので設定方法を紹介します。


目次

Monit インストール

yum から入れるためにリポジトリ(rpmforge)を追加します。

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

インストール

yum install --enablerepo=rpmforge monit

基本設定

最も単純な、「サービス(プロセス)が死んでたら、起動しなおす」設定だけ紹介します。
(CPU、メモリの使用率をチェックしてサービスの再起動や、メールを送信なんかもできます)

vi /etc/monit.conf
# コメントアウト解除。監視周期の秒数。デフォルト120なので、2分ごとに監視
set daemon 300

# コメントアウト解除。Monit のログ出力。デフォルトでは、/var/log/message に出力される。
set logfile syslog facility log_daemon

# コメントアウト解除。Monit の状態確認用インターフェース。なくても動くけど、監視が停止されたサービスの再開などができなくなるので使ったほうがいい。
set httpd port 2812 and
    use address localhost  # only accept connection from localhost
    allow localhost        # allow localhost to connect to the server and

Monit用ディレクトリの作成

mkdir /var/monit

パーミッションの設定(やらないと怒られます)

chmod 700 /etc/monit.conf

サンプル:apache の設定

サンプルとして apache で設定してみて想定どおり動作するか確かめてみます。
※ 本当は、 /etc/monit.d/ ディレクトリ以下に各サービスの設定ファイルを設置しますが、ほぼコメントアウトを解除するだけで済むので、ここでは、monit.conf の設定を変更します。

vi /etc/monit.conf

# コメントアウトされている行だけコメントアウト
  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 cpu > 60% for 2 cycles then alert
#    if cpu > 80% for 5 cycles then restart
#    if totalmem > 200.0 MB for 5 cycles then restart
#    if children > 250 then restart
#    if loadavg(5min) greater than 10 for 8 cycles then stop
# ↓ host 指定なしでOK(localhost を見に行く)
    if failed port 80 protocol http
#       and request "/index.html"
       then restart
#    if failed port 443 type tcpssl protocol http
#       with timeout 15 seconds
#       then restart
#    if 3 restarts within 5 cycles then timeout
#    depends on apache_bin
# apache の実行グループが apache の場合↓
    group apache

Monit の起動

/etc/init.d/monit start

動作確認
これで apache が死亡しても自動で起動できるようになったはずです。
apache を落としてみます。

/etc/init.d/httpd stop

ログを監視してみます。

tail -f /var/log/message
Oct 11 20:41:41 dti-vps-srv01 monit[28195]: 'httpd' process is not running 
Oct 11 20:41:41 dti-vps-srv01 monit[28195]: 'httpd' trying to restart 
Oct 11 20:41:41 dti-vps-srv01 monit[28195]: 'httpd' start: /etc/init.d/httpd 

無事、自動起動されました。

サービス毎の設定

止まっては困る系のサービスの設定方法です。

Apache

vi /etc/monit.d/httpd.conf
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 port 80 protocol http
    then restart
  group apache

Postfix

vi /etc/monit.d/postfix.conf
check process postfix with pidfile /var/spool/postfix/pid/master.pid
  start program = "/etc/init.d/postfix start" with timeout 60 seconds
  stop program  = "/etc/init.d/postfix stop"
  if failed port 25 protocol smtp
    then restart
  group postfix

dovecot

vi /etc/monit.d/dovecot.conf
check process dovecot with pidfile /var/run/dovecot/master.pid
  start program = "/etc/init.d/dovecot start"
  stop program  = "/etc/init.d/dovecot stop"
  if failed port 110 protocol pop
    then restart
  group dovecot

MySQL

vi /etc/monit.d/mysql.conf
check process mysql with pidfile /var/run/mysqld/mysqld.pid
  start program = "/etc/init.d/mysqld start"
  stop program  = "/etc/init.d/mysqld stop"
  if failed port 3306 protocol mysql
    then restart
  group mysql

PostgreSQL

vi /etc/monit.d/postgres.conf 
check process postgres with pidfile /var/run/postmaster.5432.pid
  start program = "/etc/init.d/postgresql start"
  stop program  = "/etc/init.d/postgresql stop"
  if failed port 5432 protocol pgsql
    then restart
  group postgres

Monit のコマンド

一部です。こちらにマニュアルがあります。

monit status 監視対象の全情報を表示します。
monit start all 監視対象の全サービスを起動します。
monit stop all 監視対象の全サービスを停止します。
monit monitor all 監視対象の監視をすべて再開します。
5回中、3回自動起動したら、監視をやめる、みたいな設定をしていると自動で監視対象から外れてしまうので、このコマンドで監視再開できます
monit unmonitor all 監視対象の監視をすべて停止します。

all と書いてある部分は、すべて個別のサービス名を指定できます。例えば、メンテで Apache を落としたままにしたいなら

monit unmonitor apache

で、apache だけ監視から外して、メンテ終了後に

monit monitor apache

で元通りです。

 

2 Responses to ServersMan@VPS (CentOS 5) に Monit を入れてサービスの監視+自動起動

  1. maigoofy より:

    てもぐさん。こんにちは。いつもお世話になっています。このサイトは私のようなサーバー管理初心者に非常に役立っています。PHPの設定方法をお教え願えますでしょうか。その他にサーバー管理者として何かしておくとよいようなことはありますか。よろしくお願いいたします。

  2. kumakuma より:

    monitのサービス毎の設定ですが、
    現在、「mysqld」と「mysql55-mysqld」のサービスを同時に使用しています。
    「mysqld」の設定については上記の方法で回避できましたが、
    「mysql55-mysqld」については色々試しましたが、
    サービスが自動起動してくれません。
    記述もついて、アドバイス頂けますでしょうか。
    宜しくお願いします。

コメントを残す

メールアドレスが公開されることはありません。

Top