Digdag server を Supervisor で管理する
Posted on
最近 Treasure Data のワークフローエンジン「Digdag」をさわり始めました。
Digdag server はフォアグラウンドで起動するだけなので、Supervisor で管理できるようにしてみました。 Supervisor を使うことで、自動起動やログの取得などプロセス管理が楽になります。
検証した環境は Ubuntu 14.04 LTS です。
$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=14.04
DISTRIB_CODENAME=trusty
DISTRIB_DESCRIPTION="Ubuntu 14.04.3 LTS"
Supervisor のインストール
まず Supervisor をインストールします。 Ubuntu だとパッケージが用意されています。
$ sudo apt-get install supervisor
インストールすると自動的に立ち上がっていました。
$ ps aux | grep supervisor
root 1430 0.0 1.1 53656 11252 ? Ss 21:35 0:00 /usr/bin/python /usr/bin/supervisord -c /etc/supervisor/supervisord.conf
Oracle Java のインストール
Digdag は Java で書かれているので、先に JRE をインストールします。 Java 8u72 以降のバージョンが必要なので Oracle Java をインストールします(Ubuntu 14.04 の場合、apt-get
でインストールできる OpenJDK は Java 7 です)。
$ cd /opt
$ sudo tar xvf ~/jre-8u102-linux-x64.tar.gz
$ sudo chown -R root:root jre1.8.0_102
$ sudo ln -s jre1.8.0_102 jre
/opt/jre/bin
に PATH を通しておきます。
$ export PATH=$PATH:/opt/jre/bin
$ java -version
java version "1.8.0_102"
Java(TM) SE Runtime Environment (build 1.8.0_102-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.102-b14, mixed mode)
Digdag のインストール
Digdag のインストールは公式ドキュメントの通りです。ダウンロードしているのは digdag-<VERSION>.jar
という jar ファイルです。
$ sudo curl -o /usr/local/bin/digdag --create-dirs -L https://dl.digdag.io/digdag-latest
$ sudo chmod +x /usr/local/bin/digdag
digdag server
で起動してみます。
$ digdag server --memory
2016-08-17 12:19:39 +0000: Digdag v0.8.8
2016-08-17 12:19:41 +0000 [INFO] (main): Starting server on 127.0.0.1:65432
2016-08-17 12:19:41 +0000 [INFO] (main): XNIO version 3.3.3.Final
2016-08-17 12:19:41 +0000 [INFO] (main): XNIO NIO Implementation Version 3.3.3.Final
2016-08-17 12:19:41 +0000 [INFO] (main): Bound on /127.0.0.1:65432
フォアグラウンドで立ち上がりました。これを Supervisor で管理できるようにします。
Supervisor の設定
Supervisor の設定をします。パッケージでインストールした場合は /etc/supervisor/conf.d
が作られているので、その下にサービス単位の conf ファイルを作ると良いでしょう。
$ cat /etc/supervisor/conf.d/digdag.conf
[program:digdag]
command=/usr/local/bin/exec-digdag.sh
stdout_logfile=/var/log/supervisor/digdag-stdout.log
stderr_logfile=/var/log/supervisor/digdag-stderr.log
command
に digdag server
と書いてもいいのですが、今回は PATH を通したいので起動用のシェルスクリプトを用意します。
$ cat /usr/local/bin/exec-digdag.sh
#!/bin/sh
export PATH=$PATH:/opt/jre/bin
exec /usr/local/bin/digdag server --memory
最後の exec
コマンドを忘れると Supervisor で Java プロセスが制御できなくなります。これで数時間ハマりました…。
この起動用スクリプトにも忘れずに実行権限を付けておきます。
$ sudo chmod +x /usr/local/bin/exec-digdag.sh
これで準備完了です。 Supervisor を再起動すれば Digdag も立ち上がります。
$ sudo service supervisor restart
$ sudo supervisorctl
digdag RUNNING pid 1571, uptime 0:11:56
pstree
で確認すればプロセスの親子関係がよくわかります。
$ pstree -p 1570 --ascii
supervisord(1570)---java(1571)-+-{java}(1572)
|-{java}(1573)
|-{java}(1574)
|-{java}(1575)
|-{java}(1576)
|-{java}(1577)
|-{java}(1578)
|-{java}(1579)
|-{java}(1580)
|-{java}(1582)
|-{java}(1583)
|-{java}(1584)
|-{java}(1585)
|-{java}(1586)
|-{java}(1587)
|-{java}(1588)
|-{java}(1589)
`-{java}(1590)
Digdag を停止するときは supervisorctl
を使います。
$ sudo supervisorctl stop digdag
digdag: stopped
まとめ
Digdag を本格的に使い始める前に Supervisor を導入するのが良さそうです。