EC2へSupervisorの監視ツール入れてみた

# 参考URL
- [Supervisorで簡単にデーモン化 - Qiita](http://qiita.com/yushin/items/15f4f90c5663710dbd56)
- [Supervisord を Amazon Linux AMI にインストール - massatの日記](http://d.hatena.ne.jp/massat/20111013/1318484253)
- [Supervisord + Amazon Linux | TECH](http://tech.akat.info/?p=1931)
- [複数のSupervisordを一括監視する「py-supervisord-monitor」 - Symfoware](http://symfoware.blog68.fc2.com/blog-entry-1677.html)
- [symfo / py-supervisord-monitor — Bitbucket](https://bitbucket.org/symfo/py-supervisord-monitor)
- [JapaneseDownload - Mercurial](https://www.mercurial-scm.org/wiki/JapaneseDownload)
- [hg](http://mercurial-users.jp/manual/hg.1.html)

# インストール
* py-supervisord-monitorのソースを引っ張るために必要なツール(mercurial)をインストールしていく。

```bash
$ sudo vim /etc/yum.repos.d/mercurial.selenic.com.repo
```
* 上記ファイルへ下記をコピペ。

```bash
[mercurial.selenic.com]
name=mercurial.selenic.com
baseurl=https://www.mercurial-scm.org/release/centos$releasever  ←　Amazon Linuxだと、「"The requested URL returned error: 404 Not Found"」が起こるので、「centos6」に直した
enabled=1
# Temporary until we get a serious signing scheme in place,
# check https://www.mercurial-scm.org/wiki/Download again
gpgcheck=0
```

* mercurialのインストールして、ツールをダウンロード

```bash
$ sudo yum install mercurial
$ hg clone https://symfo@bitbucket.org/symfo/py-supervisord-monitor
```
* supervisorのconfigファイルを編集

```bash
$ sudo vim /etc/supervisord.conf
```
* 下記を設定

```bash
[supervisord]
http_port=127.0.0.1:9001  ; (alternately, ip_address:port specifies AF_INET)
```
```bash
[supervisorctl]
serverurl=unix:///var/tmp/supervisor.sock ; use a unix:// URL  for a unix socket
serverurl=http://127.0.0.1:9001 ; use an http:// url to specify an inet socket
```
```bash
[inet_http_server]
port = 0.0.0.0:9001
```

* supervisorの再起動

```bash
$ sudo service supervisord status
supervisord (pid  1543) is running...
$ sudo service supervisord restart
Stopping supervisord:                                      [  OK  ]
Starting supervisord:                                      [  OK  ]
$ curl http://localhost:9001
※HTMLがレスポンスされるが、Supervisor2.Xだと、コマンド入力待ちにならない。。。
```
* supervisordのアップデート

```bash
$ sudo pip install --upgrade pip
Successfully installed pip-8.0.2
$ sudo pip install --upgrade supervisor
Successfully installed meld3-1.0.2 supervisor-3.2.1
$ sudo service supervisord stop
Stopping supervisord:                                      [  OK  ]
$ sudo service supervisord start
Starting supervisord: /usr/lib/python2.6/site-packages/supervisor/options.py:296: UserWarning: Supervisord is running as root and it is searching for its configuration file in default locations (including its current working directory); you probably want to specify a "-c" argument specifying an absolute path to a configuration file for improved security.
  'Supervisord is running as root and it is searching '
                                                           [  OK  ]
```
* なんか、Warning出てるので、起動スクリプトをエラーにならい、一部変更

```bash
$ sudo vim /etc/init.d/supervisord
start() {
        echo -n $"Starting supervisord: "
        daemon supervisord
                      ↓
        daemon supervisord -c /etc/supervisord.conf

$ sudo service supervisord restart
Stopping supervisord:                                      [  OK  ]
Starting supervisord:                                      [  OK  ]
```
* 怒られなくなったｗ

```bash
$ curl http://localhost:9001
※HTMLがレスポンスされるが、次のコマンド入力待ちになればOK
```
* 次に、監視ツール側のsupervisor.confを修正

```bash
$ sudo vim py-supervisord-monitor/supervisor.conf 
[server:server01]
#url = http://192.168.1.101/RPC2
url = http://127.0.0.1/RPC2
port = 9001
#username = user
#password = P@ssw0rd
```
* 起動してみる。

```bash
$ sudo python index.py 
Bottle v0.13-dev server starting up (using WSGIRefServer())...
Listening on http://0.0.0.0:8080/
Hit Ctrl-C to quit.
```
* http://127.0.0.1:8080/
* 画面を開くが、プロセスが出てこない。。。
![Py Supervisord Monitor.jpg](https://qiita-image-store.s3.amazonaws.com/0/14268/43013fdf-b573-0505-86e2-59dbe6daeddc.jpeg)


* 調べると、RPCによる接続をしてるということなので、これをチェックする
    - [PythonからSupervisorのXML-RPC APIに接続する - Symfoware](http://symfoware.blog68.fc2.com/blog-entry-1672.html)
    - [python - Supervisord RPC - UNKNOWN\_METHOD on any request - Stack Overflow](http://stackoverflow.com/questions/1714174/supervisord-rpc-unknown-method-on-any-request)


* supervisorのconfigファイルを編集して再起動

```bash
$ sudo vim /etc/supervisord.conf
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
```

* チェックしてみる。

```bash
$ sudo pythonsample.py
{'statename': 'RUNNING', 'statecode': 1}
```
* キター！！！！！
![Py Supervisord Monitor (2).jpg](https://qiita-image-store.s3.amazonaws.com/0/14268/f13af20a-0d0b-0317-a1f4-9b8fbebbdfc9.jpeg)
* 最後に、ログがうざいので、supervisordで起動するようにする。

```bash
$ sudo chmod +x /opt/py-supervisord-monitor/index.py 
$ sudo vim /etc/supervisord.conf 
[program:monitor]
command=/opt/py-supervisord-monitor/index.py
directory=/opt/py-supervisord-monitor
process_name=%(program_name)s
numprocs=1
autostart=true
autorestart=true

$ sudo service supervisord status
supervisord (pid  4168) is running...
$ sudo service supervisord restart
Stopping supervisord:                                      [  OK  ]
Starting supervisord:                                      [  OK  ]
```

# ツールのアップデートは下記でできるらしい。。。
```bash
$ cd /opt/py-supervisord-monitor
$ hg pull
$ hg update
```