日頃の行い

個人的な日頃の行いをつらつら書いてます\\\\ ٩( 'ω' )و ////

Darkを支える技術 #2 Hubotの死活管理について

この記事は 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"
...

設定についてはヘルプがしっかりしているのでそちらがわかりやすかったです。

help-ja.mackerel.io

mackerelはSlackへの通知もしてくれるので便利ですね。
New Relicとかもできるのかな。

help-ja.mackerel.io

これで万が一、supervisordが変な感じになってたとしてもそれに気がつけそうです。
supervisordもmackerelも死んでたらもう仕方ないですね。
そこまでのSLAはいいかなって思ってます。

まとめ

  • プロセス管理もプロセス監視もなんとなく簡単にできてよかった。
  • 明日の投稿者いないけどどうしようwポエムでも書こうかな。
  • 少なくとも明後日の投稿者は anoworl - Adventar 氏による記事です。乞うご期待。