ユビレジのサービス状況を監視するためのモニタを作りました

ユビレジではNew RelicとかLogglyとか使ってサービスに問題が生じていないかを監視しているのですが、そうはいってもあんまりちゃんと監視できていないのが問題になっていました。簡単に言うとWebブラウザでいちいちアクセスするのは、明らかにめんどくさいわけです。具体的にNew Relicを見ようと思ったとすると、

  1. New Relicを見ようと思う
  2. ブラウザの新しいタブにrpm.newrelic.comと入れる
  3. パスワードを入れる
  4. アプリケーション一覧からUbiregiを選ぶ
  5. やっとモニタにたどり着く!

という手順が必要になります。全体的に面倒くさいのですが、この中で一番問題になるのは1の「New Relicを見ようと思う」ということです。あんまり思いません。そして、問題が発生するのは、問題が発生すると思いもしなかったタイミングです。メール通知なんかもありますが、わりと簡単に他のものに埋もれます。

そういうわけでこうなりました。


  • 上半分はNew Relicの画面(レスポンスタイム、スループット、エラー率、Apdexが表示されている)
  • 左下はHerokuのDyno数を表示(ユビレジではHireFireを使って自動でWeb Dynoを増減しています)
  • 右下はTwitterエゴサーチした結果

これを開発チームのデスクからお菓子エリアの動線に接するように設置したところ、お菓子を食べるタイミングで必ず目に入るようになりました。割と良い感じです。

作り方(ハードウェア)

iPad miniと、Apple TVと、DELLで買った19インチのディスプレイと、ディスプレイアームを使っています。ディスプレイはもっと大きくても良かったかもしれない。iPadが余っていたので使いましたが、別にMac miniとかでも良かった気もします(次で補足します)。

CI用の計算機やテスト用のレシートプリンタなどを配置してあるメタルラックにディスプレイアームでくっつけました。

作り方(ソフトウェア)

まず、Panicが公開しているStatus BoardというiPadアプリを使います。いまいち使いどころが難しいアプリだなーと思っていましたが、こんなぴったりの使い道があったなんてびっくりです!有料オプションのHD出力を購入すると、良い感じのアスペクト比で出力してくれます。

New Relicの画面は、Webページを表示する機能を使います。New Relicのチャート埋め込み機能を使うとiframeのスニペットができるので、それを並べてサイズ調整したHTMLを作り、Dropboxに置いて、それを表示しています。サイズ調整は、現物あわせでがんばります。

  • New Relicの埋め込みチャートのiframeの先を、直接Status Boardに表示することも考えましたが、サイズ調整が難しかったので諦めました
  • New RelicのiPadアプリもありますが、ちょっと今回の用途には使えない感じの機能でした

HerokuのDyno数は、グラフを表示する機能を使います。CSVファイルを作れば、それを適当にグラフに表示してくれます。本当は24時間分あるのですが、12時間分しか表示されなくて残念。Dyno数は、Mac miniが1時間毎にherokuコマンド経由で数えます。Dropboxで共有されているフォルダにCSVを書き出せば、後は自動でStatus Boardまで繋がります。

Twitterエゴサーチは、Status Board組み込みの機能。

その他に注意したことと言えば、iOSのアクセスガイドを使っています。アクセスガイドは特定のアプリしか実行できないようにする機能ですが、今回はStatus Boardがクラッシュしたときに自動で再起動するために使っています。

ずっと見ていたわけではないのでクラッシュしたことがあるかどうかはわかりません。アプリがクラッシュするというのは一般的な心配事であって、Status Boardの安定性に関するなんらかの言明ではありません。

まとめ

ほとんどプログラミングしなくても割と良い感じのサービスモニタツールが作れるよという話でした。もっとも先週から運用し始めたばっかりなので、本当に良い感じかどうかはまだわかりません。

あとユビレジでプログラマ的な人を募集しています。上のモニタの写真を見るとアクセスタイムがえらい遅いこととかわかると思いますので、Railsのアプリケーションを高速化するのが得意な方とかいらっしゃいましたら、ぜひご連絡ください。