#chiroito ’s blog

Java を中心とした趣味の技術について

nasne 監視システム概要

背景

我が家にはHDDレコーダとしてSONYのnasneが2台あり、2番組を同時録画できるようにしています。普段は録画したら数日中に見て消すので何も気にせず使っていますが、仕事が忙しくなるとどうしても見ることができなくなってしまいます。ある日、仕事に没頭し、仕事が落ち着いて時間ができたので録画した番組を消化していたら、空き容量が足りずいくつかの番組が録画できていませんでした…録画できなかった番組には楽しみにしていた番組もあり、次にいつ同じことが起きるか分からないので、nasneを監視するシステムの構築に取りかかりました。

nasneにはブラウザからアクセスできる管理用のWebインターフェースがあり、HDDの空き容量が確認できます。この情報は画面表示後にJavaScriptを使って取得しており、フォーマットはJSONでやりとりしています。この情報を使用して、HDDの容量を監視し、空き容量の低下時にはメールで通知し、空き容量の推移をグラフ化して確認できるように実装することを考えました。
また、メールで通知を受けとった際の対処として、下記を検討しています。
  1. 足りなくなったら時間を取って見る
  2. 外付けHDDを足して容量を追加する
  3. nasneをもう1つ買ってきてスケールアウトする(同時録画可能数も増える)
1と2はどんなHDDレコーダでも対応可能かと思います。私が nasne を選んだ理由とnasneを気に入っている理由は3番のスケールアウトできる点です。また、スケールアウトしてもtorne PlayStation4やPC TV for nasne といったSONYが用意している様々なアプリケーションでかんたんに使えるようになるところが素晴らしいと思います。
参考:torne PlayStation 4PC TV for nasne

最初のアプローチ

最初のnasne監視システムはmainメソッドを実行して定期的に情報を取得するJavaアプリケーションを実装し、グラフ化には Zabbix を使ってました。このアプリケーションでは、nasne の情報の取得、外付けHDDの有無の判断、nasne の短期的な不通、nasneの障害検知、グラフ化する方法の変更などいろいろ機能を追加していきました。機能を追加していくと、当初予定していなかった機能の実装により、アーキテクチャレベルでの変更が頻繁に必要となりました。

Complex Event Processing の導入

新たな収集プログラムのアーキテクチャとしてCEPを導入しました。CEPを使用することで、時系列で発生するHDD情報の操作が簡単に行える様になります。この操作には、外付けHDDの有無の判断、指定した間HDD情報が送られてこなかったらnasneに障害が起きたとするパターンマッチングなどが含まれます。


CEP を実現するミドルウェアとして、Oracle Stream Explorer (OSX)を使用しています。OSXの詳細は割愛しますが、Java SE上で動作し、 CEP の機能の他に今回の要件に必要なグラフ作成の機能も含んでいます。
参考:Oracle Stream Explorer


今回作成したシステムでは、nasneから情報を取得してOSXに投げるだけの単純な収集プログラムを使用し、グラフ化にはLibratoを使用しています。
前者は将来的にnasneのアップデートで特定のURLにHDDの容量を投げる機能が含まれることに対する期待から、OSX上で動くアプリケーションには取り込まないようにしています。
後者は、外から自宅へアクセスするためにプロバイダが提供しているDynamic DNSを利用していますが、IPが更新してからDynamic DNSに反映されるまで少し時間が掛かります。OSXでグラフを作ると、自宅の Dynamic DNS の更新タイミングでグラフへアクセスできなくなるリスクがあり、そのリスクを避けるためLibratoを使うことにしました。外のサービスを使用してグラフを見ても、サービスが止まるリスクがありますが、そちらの方が発生する確率が小さいと判断してます。
参考:Librato

これらの理由から、nasne 監視システムは下記の構成で構築しています。


OSXではGUIを使用して処理の流れを定義していきます。左端で HDD の情報を受け取り、右端でLibratoへ空き容量を投げています。

Libratoで2台分のHDD容量を見るとこのようになります。青と緑がそれぞれ nasne の空き容量です。

次回は、実際の実装方法について紹介します。目次ページはこちらです。

今回紹介するnasne 監視システムで用意する物を下にまとめておきます。

Oracle Stream Explorer のダウンロードはこちら:Oracle Stream Explorer ダウンロード
Libratoの登録はこちら:Librato