WordPress Advent Calendar 2013 全部オレ 20日目のできる限り俺です。
WordPress を運用するサーバでは、Nginx や Aapche などの Web サーバ、MySQL、fastcgi を使っているのならば php-fpm などのプロセスが稼働しています。
夜中だとか旅行中にこれらのプロセスが落ちてしまうとサイトに繋がらなくなってしまうこともあります。
そういった障害を検知し、復旧するための様々な障害検知を行うツールが存在するのですが、今回は Monit の紹介をしようと思います。
これはプロセスを監視して異常を検知したらメールを出したり、自動的に再起動したりしてくれる便利なツールです。
何はともあれインストール
Amazon Linux や RHEL 系の OS を使っているなら yum でインストールしましょう。
$ sudo yum install monit $ sudo chkconfig monit on
monit の設定は /etc/monit.conf で行います。
こんな感じで良いですかね?
# monit の監視間隔 set daemon 30 with start delay 5 # web ステータスチェック set httpd port 2812 and use address localhost allow localhost # アラートメールの送信先 set alert root@localhost set alert example@example.com # 設定ファイルのインクルード include /etc/monit.d/*
監視プロセスの設定
プロセスごとに /etc/monit.d の中にファイルを置いておくと管理が楽です。
yum でインストールすれば /etc/monit.d は作られていますが、ない場合は mkdir /etc/monit.d してやってください。
nginx の例
/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 (SERVER-IP-ADDRESS) port 80 send "GET / HTTP/1.1\r\nHost: (SERVER-IP-ADDRESS)\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
※ (SERVER-IP-ADDRESS) は、サーバ自身のグローバル IP アドレスを指定してください
apache の例
/etc/monit.d/httpd
check process httpd with pidfile /var/run/httpd.pid start program = "/sbin/service httpd start" stop program = "/sbin/service httpd stop" if failed host (SERVER-IP-ADDRESS) port 80 send "GET / HTTP/1.1\r\nHost: (SERVER-IP-ADDRESS)\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 の例
/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"
※ /etc/my.cnf で pid-file=/var/run/mysqld/mysqld.pid
を設定していない場合、pid ファイルが別の名前で作られているかもしれません。そのときは、適宜 /etc/my.cnf に従って修正してください
php-fpm の例
/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 の例
/etc/monit.d/sshd
check process sshd with pidfile /var/run/sshd.pid start program "/sbin/service sshd start" stop program "/sbin/service sshd stop" if failed port 22 protocol ssh then restart if 5 restarts within 5 cycles then timeout
設定が終わったら service monit start
で起動してみましょう。
monit が起動したら、プロセスを停止して起動するか確かめてみてください。
30秒周期で監視しているので、最大でも30秒後にはプロセスが再起動しているはずです。
サービスを監視対象から外したいときは /etc/monit.d ディレクトリから監視対象から外したいサービスの設定ファイルを削除しましょう。
ちなみに現在配布しているマーケットプレイス版の 網元AMI には monit がインストールされていて nginx, mysql, php-fpm の各プロセスを監視しています。
それでは、良い監視ライフを!
… WordPress あまり関係なかった …