さくらVPS 監視環境構築

既にWebサーバ、メールサーバ、データベースなどのミドルウェアがインストール済みであることを前提に監視の環境の構築手順メモ。さくら VPS 契約後のほぼ自分用セットアップメモ第四弾です。

1. logwatch のインストール

1-1. yum でインストール

yum -y install logwatch
※Perl がインストールされている必要があります。

1-2. 設定ファイルを編集

vim /usr/share/logwatch/default.conf/logwatch.conf
※/etc/logwatch/conf/logwatch.conf にも設定ファイルがあります。本来は追記はこちらで行うようですが自分は上記ファイルをバックアップして編集しました。(動作に影響はなし)変更箇所は以下の通り。

-#Archives = No
+Archives = Yes

-MailTo = root
+MailTo = example@example.com

-Detail = Low
+Detail = High

インストールと同時にcronも仕込まれるため、この後は午前4時に指定メールアドレスにレポートが送信されます。

2. Monit のインストール

2-1. yum-priorities のインストール

標準リポジトリにmonitが存在しないので、DAGレポジトリを利用します。
DAGはレポジトリ規模が大きいため、CentOSの標準リポジトリを上書きしてしまわないようにポジトリの優先度を設定できる yum-priorities を使います。
yum -y install yum-priorities

2-2. 標準レポジトリに優先度を設定

base と updates にpriority=1、それ以外に priority=2 を追加します。
vim /etc/yum.repos.d/CentOS-Base.repo

[base]
#(中略)
priority=1

#released updates
[updates]
#(中略)
priority=1

#additional packages that may be useful
[extras]
#(中略)
priority=2

#additional packages that extend functionality of existing packages
[centosplus]
#(中略)
priority=2

#contrib - packages by Centos Users
[contrib]
#(中略)
priority=2

2-3. DAG レポジトリを登録

vim /etc/yum.repos.d/dag.repo

[dag]
name=Dag
baseurl=http://ftp.riken.jp/Linux/dag/redhat/el$releasever/en/$basearch/dag/
enabled=0
gpgcheck=1
gpgkey=http://dag.wieers.com/packages/RPM-GPG-KEY.dag.txt

※DAGレポジトリが大規模なため、enabled=0 にしておき、インストール時に指定する運用にした方が無難

2-4. yumでインストール

yum -y --enablerepo=dag install monit
※enabled=0 のため、オプションでレポジトリを指定する

2-5. 設定ファイルを編集

cp -a /etc/monit.conf /etc/monit.conf.YYMMDD
※編集前のバックアップ

vim /etc/monit.conf
以下を追記

# ログファイルの出力
set logfile /var/log/monit.log
# アラートメールの送信サーバ
set mailserver localhost
# アラートメールの送信先
set alert example@example.com

2-6. 監視プロセスの設定

監視して死んでる時はプロセスを再起動させるための設定ファイルを新規で作成します。

nginx

vim /etc/monit.d/nginx

check process nginx
  with pidfile /var/run/nginx.pid
  start program = "/sbin/service nginx start"
  stop program = "/sbin/service nginx stop"
  if failed host psychopomp.jp port 80 send "GET / HTTP/1.1\r\nHost: psychopomp.jp\r\n\r\n" expect "HTTP/1\.[01x] [1-4][0-9]{2} .*\r\n" with timeout 60 seconds then restart
  if 1000 restarts within 1000 cycles then timeout

MySQL

vim /etc/monit.d/mysqld

check process mysqld
  with pidfile /var/run/mysqld/mysqld.pid
  start program = "/sbin/service mysqld start"
  stop program = "/sbin/service mysqld stop"
  if failed unixsocket /var/lib/mysql/mysql.sock then restart
  if 5 restarts within 5 cycles then timeout

PHP-fpm

vim /etc/monit.d/php-fpm

check process php-fpm
  with pidfile /var/run/php-fpm/php-fpm.pid
  start program = "/sbin/service php-fpm start"
  stop program = "/sbin/service php-fpm stop"

SSH

vim /etc/monit.d/sshd

check process sshd with pidfile /var/run/sshd.pid
  start program = "/etc/rc.d/init.d/sshd start" with timeout 60 seconds
  stop  program = "/etc/rc.d/init.d/sshd stop"
  if failed port 123456 protocol ssh then restart
  if 5 restarts within 5 cycles then timeout

※Port は適宜変更した値を指定します。

Postfix

vim /etc/monit.d/postfix

check process postfix with pidfile /var/spool/postfix/pid/master.pid
  start program = "/etc/init.d/postfix start"
  stop program  = "/etc/init.d/postfix stop"
  if failed port 25 protocol smtp then restart

2-7. サービスの登録

サーバ起動時に monit が立ち上がるように設定
chkconfig monit on

サービスの起動
service monit start

ステータスの確認
monit status

参考サイト