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
コマンドの出力がmikutterのメッセージになりました。
echoを使えば任意のセリフをみくったーちゃんにしゃべらせることもできます。
echo 'もう!マスターのえっち' | nc localhost 39390
アホですね。
mikutterでping死活管理
さて、本題のping死活監視ですが、こんな感じでパーツを組み合わせていこうと思います。
- cronを使って定期的にサーバにpingを打つ。
- サーバから返事がなかったらncでlocalhost:39390にメッセージを送信。
- mikutter-datasource-netcatが抽出タブにメッセージを出力。
まずはcronで動かす監視スクリプトの作成ですが、ここで朗報が。
丁度この記事を書いてる最中に、cron用のエラー通知ツールの記事がはてブのホットエントリに出てきました。
どうやらコマンドがエラーになったときに、色んなところに通知が飛ばせるツールっぽいです。
通知先に「任意のコマンド」を指定することも出来るっぽいので、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分周期でみくったーちゃんがサーバのダウンを通知してくれるようになります。
まとめ
UNIXな世界と連携して、mikutterにサーバの死活監視機能を持たせることができました。
屈強なUNIXコマンド達がガチではじき出した結果をゆるふわ可愛いみくったーちゃんが通知してくれるという、大変バランスの良い仕組みになりました。
alertyでオレオレ監視スクリプトを書かなくても良くなるのもいい感じです。
今後「もうちょっと真面目な通知システムで監視したいなぁ」ってなったときも、レシピファイルを書き換えるだけでOKですね。
お手軽で柔軟な良いシステムができました。
- 作者: タトラエディット
- 出版社/メーカー: ソーテック社
- 発売日: 2015/05/30
- メディア: 単行本
- この商品を含むブログを見る
TLに背景画像を付けるmikutterプラグインを作ったよ。
何これ?
TLに背景画像を付けちゃいます。
インストール
GitHubからzipファイルをダウンロードして適当なディレクトリに展開して下さい。
moguno/mikutter-background_image · GitHub
※mikutterプラグインマネージャ"Packaged"で"moguno"を検索してインストールするのもおすすめです。
使い方
設定画面で画像ファイルと透明度を指定してください。
設定
Windows10タブレットにMSYS2を入れてsshデーモンを立ち上げてみた
これまでのあらすじ
Windows10タブレット(DELL Venue 8 Pro)に、Linuxっぽい環境を構築するMSYS2と、現時点で最強と思われるBluetoothキーボードのMicrosoft Wedge Mobile Keyboardを組み合わせて、外出先でも快適にRubyのコードが書ける環境を手に入れました。
マイクロソフト キーボード Bluetooth対応/ワイヤレス/小型/テンキーレス - Wedge Mobile Keyboard U6R-00022
- 出版社/メーカー: マイクロソフト
- 発売日: 2012/09/07
- メディア: Personal Computers
- クリック: 6回
- この商品を含むブログ (8件) を見る
しかしながら自宅に帰ればメイン環境のMacBookAirがある訳で、残作業をわざわざタブレットでするのもめんどい訳です。
なので、タブレットでsshデーモンを動かしてMBAからリモートアクセスできる様にしました。
Windowsサービスなのでログインしてなくても電源を入れてればOKです。
sshデーモンの設定
まずはsshデーモンを設定していきましょう。
MSYS2 Shellを起動してください。
opensshのインストール
pacman -s openssh
Windowsサービス化
次に、Windowsにログインしなくてもsshできるようにサービス化します。
サービス化には、同じくWindowsでLinuxっぽいことをするcygwinの成果物を使用します。
どちらのコマンドもpacmanからインストール可能なのですが・・・
pacman -S cygrunsrv editrights
何故かeditrightsはMSYS2 64bit版にしかありません。
今回のターゲットは32bitなWindows10タブレットなので、ソースからコンパイルします。
editrightsのコンパイル
pacman -S make gcc tar curl -O http://ftp.jaist.ac.jp/pub/cygwin/x86/release/editrights/editrights-1.03-1-src.tar.xz tar xvf editrights-1.03-1-src.tar.xz tar xvf editrights-1.03-1.src/editrights-1.03.tar.bz2 cd editrights/ sed -i -e "s/stricmp/strcasecmp/g" main.c make make install
アカウントの追加
sshデーモンをWindowsサービス化するには特殊な権限を持つAdministratorsのアカウントが必要です。
sshdは内部でsetreuid()を呼びますが、Windowsサービスのユーザ("LocalService"とか)にはこれを呼ぶ権限がないためです。
こちらも、コマンドプロンプトを「管理者として実行」で作業します。
追加するユーザはcygrunsrvとします(パスワードもcygrunsrv)。
net user cygrunsrv cygrunsrv /add net localgroup Administrators cygrunsrv /add editrights -u cygrunsrv -a SeAssignPrimaryTokenPrivilege editrights -u cygrunsrv -a SeCreateTokenPrivilege editrights -u cygrunsrv -a SeTcbPrivilege editrights -u cygrunsrv -a SeServiceLogonRight
sshデーモンをサービスとして登録する
サービス登録に管理者権限が必要なので、MSYS2 Shellを「管理者として実行」して作業します。
cygrunsrv --install sshd -u cygrunsrv -w cygrunsrv -p /usr/bin/sshd -a -D cygeunsrv --start sshd