Sidekiqを導入することになったので、Zabbixでプロセス監視をします。
Amazon LinuxでUpstartがSupervisorを監視し、SupervisorがSidekiqを監視する形です。
Upstartで直接監視しようと思ったのですが、Amazon LinuxのUpstartのバージョンが古く、実行ユーザが容易には設定できないため断念しました。
Railsでsidekiqが動くように設定する
ここを参照する
Supervisorの導入
インストールします。root以外のユーザでインストールした際は/usr/local/bin/supervisord
、rootでインストールした際は/usr/bin/supervisord
インストールされます。
今回は、rootでインストールしました。
sudo su - root
pip install supervisor
exit
sudo mkdir /var/log/supervisor
sudo mkdir /etc/supervisor
sudo mkdir /etc/supervisor/conf.d/
設定ファイルの作成. /etc/supervisor/supervisord.conf
に以下を記載
[unix_http_server]
file=/root/supervisor.sock
[supervisord]
logfile=/var/log/supervisor/supervisord.log ; (main log file;default $CWD/supervisord.log)
logfile_maxbytes=50MB ; (max main logfile bytes b4 rotation;default 50MB)
logfile_backups=10 ; (num of main logfile rotation backups;default 10)
loglevel=info ; (log level;default info; others: debug,warn,trace)
pidfile=/var/run/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
nodaemon=false ; (start in foreground if true;default false)
minfds=65536 ; (min. avail startup file descriptors;default 1024)
minprocs=200 ; (min. avail process descriptors;default 200)
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
[supervisorctl]
serverurl=unix:///root/supervisor.sock
[include]
files = /etc/supervisor/conf.d/*.conf
foregroundで正しく起動できるか確認. 正しく起動できたらCtrl+Cで停止.
/usr/bin/supervisord -n -c /etc/supervisor/supervisord.conf
2017-01-25 16:09:00,624 CRIT Supervisor running as root (no user in config file)
2017-01-25 16:09:00,625 WARN No file matches via include "/etc/supervisor/conf.d/*.conf"
2017-01-25 16:09:00,625 INFO supervisord started with pid 25228
UpstartでSupervisorのプロセス永続化する.
sudo vi /etc/init/supervisord.conf
で以下のように編集
description "supervisord"
start on runlevel [2345]
stop on runlevel [!2345]
respawn
exec /usr/bin/supervisord -n -c /etc/supervisor/supervisord.conf
pre-stop exec /usr/bin/supervisorctl stop all
Upstartで設定を再読込みします
initctl reload-configuration
設定が読み込まれたか確認します。workersが登録されていれば大丈夫です。
initctl list
以下のコマンドでsupervisordを起動・停止できます。起動しておきます。
# 起動
sudo initctl start supervisord
# 停止
sudo initctl stop supervisord
起動後、以下で実際にsupervisorが動いているか確認します。
ps -ef |grep supervisor
Upstartの各種ログは以下に出ています
/var/log/message
Supervisorのログは以下のように出てます
/var/log/supervisor/supervisord.log
SupervisorでSidekiqの起動
以下のように設定ファイル( /etc/supervisor/conf.d/sidekiq.conf
)を作成します. usernameの部分は適宜かえてください。
[program:sidekiq]
command=bash -c 'source ~/.bash_profile && bundle exec sidekiq'
stopasgroup=true
environment=USER="username",HOME="/home/username"
directory=/home/username/server
user=username
startsecs=10
autostart=true
autorestart=true
stdout_logfile=/var/log/supervisor/sidekiq.log
logfile_maxbytes=1MB
logfile_backups=10
redirect_stderr=true
Upstartの設定を再読込します
sudo initctl reload supervisord
起動しているか確かめてみます
ps -ef |grep sidekiq
SupervisorやSidekiqをkillして再起動するか確かめてみます。
よければ実際にログを送ってみます
Zabbixを設定する
Supervisorの監視
- Zabbix 3.2でtd-agent用のテンプレートを作成するを参考にしつつ以下のように設定します。以下に一部を示します。
Supervisorを停止し、アラートがでれば成功です
sudo initctl stop supervisord
Sidekiqの監視
まずプロセス監視をします。以下に設定の一部を示します。
有用なコマンド
# Sidekiq再起動
supervisorctl -c /etc/supervisor/supervisord.conf restart sidekiq
TODO
SidekiqのQueueの数の監視はまだやっていないのでいずれやります。
参考
sidekiq
- http://qiita.com/zaru/items/bfa87b422bcad30b11fe
- http://qiita.com/wapa5pow/items/d5290979cfa8f6b6a0b6
- 運用時の注意
upstrat
- http://dev.classmethod.jp/cloud/amazon-linux-monit-non-kill/
- http://www.usupi.org/sysad/188.html
- http://takuya-1st.hatenablog.jp/entry/20110719/1311042559
- UpstartとInspector
- エラー対応
- Zabbixでの監視について
monit
- http://inokara.hateblo.jp/entry/2013/12/06/142258
- http://moqada.hatenablog.com/entry/2013/10/18/013513
- 設定ファイル