Zabbix 3.2でsidekiqを監視する - Amazon Linux編

Sidekiqを導入することになったので、Zabbixでプロセス監視をします。
Amazon LinuxでUpstartがSupervisorを監視し、SupervisorがSidekiqを監視する形です。
Upstartで直接監視しようと思ったのですが、Amazon LinuxのUpstartのバージョンが古く、実行ユーザが容易には設定できないため断念しました。

# Railsでsidekiqが動くように設定する

[ここ](https://github.com/mperham/sidekiq/wiki/Getting-Started)を参照する

# 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用のテンプレートを作成する](http://qiita.com/wapa5pow/items/d5290979cfa8f6b6a0b6)を参考にしつつ以下のように設定します。以下に一部を示します。

![image](https://qiita-image-store.s3.amazonaws.com/0/30079/596973da-002f-919e-cfd1-da30af175d47.png)


Supervisorを停止し、アラートがでれば成功です

```
sudo initctl stop supervisord
```

## Sidekiqの監視

まずプロセス監視をします。以下に設定の一部を示します。

![image](https://qiita-image-store.s3.amazonaws.com/0/30079/5941e4bb-7ce0-f48e-07b0-71849a875fe0.png)

# 有用なコマンド

```
# 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
* 運用時の注意
    * http://shiro-16.hatenablog.com/entry/2015/10/12/192412

## 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
    * http://qiita.com/sawanoboly/items/d28a05d3445901cf1b25
* エラー対応
    * http://qiita.com/NewGyu/items/d03fc1793e799550657a#_reference-706f8e068322b1ff0f78
    * https://github.com/mperham/sidekiq/issues/2808 <= これだとrootが実行ユーザになってしまう
* Zabbixでの監視について
    * https://sourceforge.net/p/zabbix/mailman/message/31522290/

## monit
* http://inokara.hateblo.jp/entry/2013/12/06/142258
* http://moqada.hatenablog.com/entry/2013/10/18/013513
* 設定ファイル
  * http://richfisher.me/blog/2014/07/18/monit-configuration-for-rails/

## supervisor
* sidekiqでの設定
    * https://gist.github.com/seyhunak/417bff4cd84e0f8469c2
* Upstartでの設定
    * http://qiita.com/astronaughts/items/0391a484f5c7d3eb88e4
* Supervisor vs Monit
    * http://stackoverflow.com/questions/12156434/what-is-the-advantage-of-using-supervisord-over-monit