- 更新日: 2014年8月14日
- Vagrant & Chef
Monit で Unicorn プロセスを監視する設定用の Chef Recipe
Nginx + Unicorn で Rails アプリケーションを動作させる場合、Nginx のプロセスと共に Unicorn のプロセス監視も行ったほうが良い。ということで、それを実現するための Chef Recipe を書きました。
このエントリーは、CentOS サーバー設定用 Chef Cookbook/Recipe の目次 の一部です。
unicorn プロセスを監視するための monit 設定用 recipe
Monit 設定用の Recipe は、MonitでSSH,Nginx,MySQLのサービス死活監視を行うChef Cookbook | EasyRamble で作成したものを活用。この site-cookbooks/app_monit_cookbook/recipes/default.rb に以下を追加します。
site-cookbooks/app_monit_cookbook/recipes/default.rb
1 2 3 4 5 6 7 8 9 |
# monit config for unicorn_app unicorn_app = "unicorn_#{node.set['project']['name']}" template "/etc/monit.d/#{unicorn_app}.conf" do source "unicorn_app.erb" owner "root" group "root" mode "0644" notifies :restart, 'service[monit]' end |
アプリケーション(プロジェクト)ごとに、monit で監視する Unicorn の設定ファイルを作成します。そのため、プロジェクト名の部分を変数にしました。template リソースの中で source を指定してやると、アップロード先の設定ファイルの名前などを動的に作成できるのが便利です。
以下、template のファイル(unicorn_app.erb)。
site-cookbooks/app_monit_cookbook/templates/default/unicorn_app.erb
1 2 3 4 |
check process unicorn with pidfile /home/<%= node.set['deploy_user'] %>/projects/<%= node.set['project']['name'] %>/current/tmp/pids/unicorn.pid start program = "/etc/init.d/unicorn_<%= node.set['project']['name'] %> start" with timeout 60 seconds stop program = "/etc/init.d/unicorn_<%= node.set['project']['name'] %> stop" |
昨日の Unicorn プロセスを自動起動させる init.d スクリプト用の Chef Recipe | EasyRamble で作成した、Unicorn 用の init.d 起動スクリプトを使っています。また template でも、プロジェクト名、デプロイを行うユーザー名を変数で取得するようにしています。
プロビジョニング実行後に動作確認
node.set[‘project’][‘name’] の値が ‘app’ だと前提しまして・・・unicorn_app.conf が正しく作成されているか確認。
1 2 3 4 5 6 7 |
$ sudo cat /etc/monit.d/unicorn_app.conf check process unicorn with pidfile /home/deploy_user/projects/app/current/tmp/pids/unicorn.pid start program = "/etc/init.d/unicorn_app start" with timeout 60 seconds stop program = "/etc/init.d/unicorn_app stop" |
unicorn のプロセスを確認。
1 2 3 4 5 6 7 |
$ sudo ps aux | grep unicorn root 1829 0.0 0.0 107452 932 pts/0 S+ 09:56 0:00 grep unicorn deploy_user 11488 0.1 16.9 400860 172836 ? Sl 08:56 0:06 unicorn master -E vagrant -c /home/deploy_user/projects/app/current/config/unicorn.rb -D deploy_user 11500 0.0 16.5 400860 168668 ? Sl 08:56 0:00 unicorn worker[0] -E vagrant -c /home/deploy_user/projects/app/current/config/unicorn.rb -D deploy_user 11503 0.0 16.5 400860 168660 ? Sl 08:56 0:00 unicorn worker[1] -E vagrant -c /home/deploy_user/projects/app/current/config/unicorn.rb -D |
master, worker プロセスが起動しています。
unicorn のプロセスを停止させます。
1 2 3 4 5 6 |
$ sudo /etc/init.d/unicorn_app stop stop unicorn_app # ps aux | grep unicorn root 1844 0.0 0.0 107452 932 pts/0 S+ 09:57 0:00 grep unicorn |
ログを監視しておく。
1 2 3 4 5 6 |
$ sudo tail -f /var/log/messages Aug 13 09:59:59 localhost monit[28567]: 'unicorn' process is not running Aug 13 09:59:59 localhost monit[28567]: 'unicorn' trying to restart Aug 13 09:59:59 localhost monit[28567]: 'unicorn' start: /etc/init.d/unicorn_app |
しばらくしたら、上記のログが表示されて unicorn のプロセスが自動で起動されました。プロセスを確認すると以下のようにちゃんと起動しています。
1 2 3 4 5 6 7 |
$ sudo ps aux | grep unicorn deploy_user 2012 0.5 16.8 400920 172176 ? Sl 09:59 0:05 unicorn master -E vagrant -c /home/deploy_user/projects/app/current/config/unicorn.rb -D deploy_user 2024 0.0 17.6 411480 179880 ? Sl 10:00 0:00 unicorn worker[0] -E vagrant -c /home/deploy_user/projects/app/current/config/unicorn.rb -D deploy_user 2027 0.0 18.2 417624 186344 ? Sl 10:00 0:00 unicorn worker[1] -E vagrant -c /home/deploy_user/projects/app/current/config/unicorn.rb -D root 2078 0.0 0.0 107452 932 pts/0 S+ 10:18 0:00 grep unicorn |
以上です。Monit 簡単で素晴らしい!
- – 参考リンク –
- Vikrant : Monit Conf for Various Services
- Linux – monitで手軽にプロセスの監視を行う – Qiita
- RailsサーバUnicornを飼いならす! 運用時の便利技 | TechRacho
- Vagrant & Chef の関連記事
- Vagrantで使うVirtualBoxのVM(仮想マシン)を外付けHDDに移動
- Chefで/etc/sysctl.confのkernel.panicを設定
- Chefでtelnetをインストール
- Chefでyumリポジトリを追加する設定
- Chef で iptables の設定
- ChefでSSH接続用の公開鍵をサーバーに設置
- nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
- Chef Recipe でユーザー・グループを作成
- Chef Recipe で CentOS のネットワーク・ホストを設定
- NetworkManager 他不要なパッケージを削除する Chef Recipe
Leave Your Message!