もぐてっく

人は1つ歳をとるたび、1ビットづつ大きくなれると信じてた。

alertyとmikutterでマイクラサーバの死活を監視するよ

はじめに

会社のお友達との会話。

友(品証部門「もぐのさん・・・またマイクラのサーバが落ちてません?」


も(ソフト屋さん)「あ、うあああ、あのですねっ!
サーバの電源が何故か落ちてる事がありまして!OAタップが怪しいんですが原因究明には至っていません!
仮対策でAC Power Fail AfterとVM自動起動をですねっ!てか今仮復旧させました!さぁ!さぁ!ご確認ください!!」

まぁ、恒久対策は後から考えるとして(考えない)、サーバが落ちてるのに気付けてない現状はアレなので、死活管理をする事にしました。

正直、専用のWebページやアラートメールなんか絶対見ないので、毎日平均6時間以上見つめているmikutterさんに表示させるのが良いかと思いました。

しかしながら、単に「pingを打つプラグイン」を作るのもつまらないので、今回はもうちょっと汎用的な仕組みを目指そうと思います。

UNIXによく似た世界と、ておくれたmikutterの世界

サーバの監視といえばUNIXライクなOSが得意とする分野ですね。
pingに限らずUNIXの任意のツールとmikutterが連携ができれば、色々応用が利きそうです。

と言うわけで、UNIXの世界とmikutterの世界を橋渡しするmikutterプラグインを作りました。

mikutter-datasource-netcat

moguno/mikutter-datasource-netcat · GitHub

ncやtelnetなどでlocalhost:39390/TCPに文字列を送り込むと、その内容をメッセージとして出力します。
(抽出タブの"TCP:39390"データソースのメッセージになります。)

例えばこんな感じです。

date | nc localhost 39390

f:id:moguno:20150907185641p:plain

コマンドの出力がmikutterのメッセージになりました。

echoを使えば任意のセリフをみくったーちゃんにしゃべらせることもできます。

echo 'もう!マスターのえっち' | nc localhost 39390

f:id:moguno:20150907185857p:plain

アホですね。

mikutterでping死活管理

さて、本題のping死活監視ですが、こんな感じでパーツを組み合わせていこうと思います。

  1. cronを使って定期的にサーバにpingを打つ。
  2. サーバから返事がなかったらncでlocalhost:39390にメッセージを送信。
  3. mikutter-datasource-netcatが抽出タブにメッセージを出力。

まずはcronで動かす監視スクリプトの作成ですが、ここで朗報が。

丁度この記事を書いてる最中に、cron用のエラー通知ツールの記事がはてブのホットエントリに出てきました。

blog.livedoor.jp

どうやらコマンドがエラーになったときに、色んなところに通知が飛ばせるツールっぽいです。
通知先に「任意のコマンド」を指定することも出来るっぽいので、ncを使ってmikutterとも連携出来そうです。
(くくく、これで俺もホットエントリの仲間入りじゃね?)

それではalertyのインストール。

sudo gem2.2 install alerty

続いてレシピファイルを書きます。
(/Users/moguno/alerty/watch_mincraft_server.yml)

plugins:
  - type: exec
    command: echo "マスター大変!マイクラサーバが死んでるよ!" | nc localhost 39390

次にcrontabを設定します。
ちなみに"araaraufufu.pw"がうちのマイクラサーバのホスト名です。(遊びに来てね。)

*/1 * * * * /opt/local/bin/alerty -c /Users/moguno/alerty/watch_mincraft_server.yml -- /sbin/ping -t 5 -c 3 araaraufufu.pw

後はmikutterで"TCP:39390"をデータソースとする抽出タブを作れば完成です。

これで1分周期でみくったーちゃんがサーバのダウンを通知してくれるようになります。

f:id:moguno:20150907191716p:plain

まとめ

UNIXな世界と連携して、mikutterにサーバの死活監視機能を持たせることができました。

屈強なUNIXコマンド達がガチではじき出した結果をゆるふわ可愛いみくったーちゃんが通知してくれるという、大変バランスの良い仕組みになりました。

alertyでオレオレ監視スクリプトを書かなくても良くなるのもいい感じです。
今後「もうちょっと真面目な通知システムで監視したいなぁ」ってなったときも、レシピファイルを書き換えるだけでOKですね。

お手軽で柔軟な良いシステムができました。

Minecraftを100倍楽しむ徹底攻略ガイド

Minecraftを100倍楽しむ徹底攻略ガイド