この記事は Dark - Developers at Real Kommunity Advent Calendar 2015 - Adventar の7日目として書かれています。
こんにちは。たなあら (@ara_ta3) | Twitter です。
Darkのアドベントカレンダーに絶対に空きは作りません。
酔っ払った勢いで書ける唯一のアドベントカレンダーとして書き続けます。
こう言い続けられるのも後何日でしょうか。
Darkというコミュニティのアドベントカレンダーとして書いています。
前置きは #1 の日記を参考に・・・warata.hatenadiary.com
DarkではSlackを利用していて、そこにはDarkというHubotが存在します。
今日はその死活管理について話そうと思います。
Dark botはさくらVPSで動かしてるのですが、たまに接続が切れてプロセスがそのまま死ぬことがあります。つらい。
Dark botはpoemを詠んでくれたりするのですが、dark poemと打ったのに返事がないと心がさらに廃れてしまいます。
dark poemについてはこちらのちょっとふざけてる記事を御覧ください。arata.hatenadiary.com
なので、Dark botの死活管理はとても重要です(たぶん
Q. じゃあなにやってるの?
A. やっていることは2つです。
- supervisord によるプロセス管理
- mackerel によるプロセス監視
supervisord によるプロセス管理
supervisordのインストールは省きますが、設定はとても簡単です。
$cat /etc/supervisord/darkbot.conf [program:dark] command=make -C /path/to/dark-bot start credential=/credentials/dark-bot-for-ngineerxiv monitoring-code=dark-bot-ngineerxiv stdout_logfile=/var/log/hubot/dark-hubot.log stderr_logfile=/var/log/hubot/dark-hubot.log.err autorestart=true autostart=true numprocs=1
commandのところに起動スクリプトのコマンドを書いています。
これを書いてsupervisordのserviceを起動すれば、死んでも勝手に蘇る闇が・・・ごほんごほん、Dark botが出来ます。
人が頑張らなくても勝手に起動するので楽でいいですね。
monitoring-codeというオプション(?)はmackerelで監視するようのものとして付け加えています。
mackerel によるプロセス監視
こちらもとても簡単です。
$cat /etc/mackerel-agent/mackerel-agent.conf # Configure pidfile = "/var/run/mackerel-agent.pid" root = "/var/lib/mackerel-agent" verbose = true apikey = "hogehoge" diagnostic = true [host_status] on_start = "working" on_stop = "poweroff" [plugin.checks.dark-ngineerxiv] command = "/usr/local/bin/check-procs --pattern dark-bot-ngineerxiv -C 1" ...
設定についてはヘルプがしっかりしているのでそちらがわかりやすかったです。
mackerelはSlackへの通知もしてくれるので便利ですね。
New Relicとかもできるのかな。
これで万が一、supervisordが変な感じになってたとしてもそれに気がつけそうです。
supervisordもmackerelも死んでたらもう仕方ないですね。
そこまでのSLAはいいかなって思ってます。
まとめ
- プロセス管理もプロセス監視もなんとなく簡単にできてよかった。
- 明日の投稿者いないけどどうしようwポエムでも書こうかな。
- 少なくとも明後日の投稿者は anoworl - Adventar 氏による記事です。乞うご期待。