1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

nasneの録画件数をシェルスクリプトとmackerelで監視する

Last updated at Posted at 2018-01-16

nasneの最大録画件数は以外と少なかった

nasneには録画できる番組の最大数が決まっていて、最大数に達すると例えHDDに十分な空き容量があっても録画がエラーとなってしまいます。
最大予約件数は、2017/11/16にリリースされたシステムソフトウエア Ver.2.601にて3,000件に拡張されましたが、それ以前は1,000件でした。一見すると多いように感じますが、一度番組を録り溜めてしまうとすぐ上限値に達してしまい、奥さんが予約した番組がエラーで録画できず、こっぴどく叱られたことが何度かありました。
そこで、nasneに録画されている番組数を監視し、上限値に近くなったときに通知する仕組みを作ることにしました。

環境

  • ハード
    • Intel NUC(自宅サーバ)
  • OS
    • CentOS 6.9
  • 追加導入ソフト
    • mkr
    • jq

録画件数の取得

nasneはAPIを持っているので、これを使って録画件数を取得します。
録画件数はJSONの TotalMatches が該当しますので、この値を curljq を使用して取り出します。
nasneのAPIについては、こちらのサイトを参考にさせていただきました。

mackerelを使って録画件数のしきい値監視をする

mackerelはメトリックに対し警戒域、危険域の2種類のしきい値監視ができ、EメールやLINEへの通知が可能です。
またSaaSなので導入が簡単で、なにより今回の要件の範囲内であれば無料で使用できるというのが素晴らしいです。
今回はnasneの録画件数をmackerelの mkr というツールを使用し、サービスメトリックとしてデータを投稿します。
mkr のインストールは公式サイトを参考にしました。

mkrmackerel-agent がなくても動作します。今回の要件では mackerel-agent のインストールは必須ではありません。
また mkr でメトリックの投稿先となるサービスは事前にmackerelの管理画面で作成しておいてください。
mkr については、こちらのサイトが大変参考になりました。

シェルスクリプトの作成

というわけでシェルスクリプトを作成しました。
家庭内限定利用ということでエラー処理は考慮していません。
スクリプトを利用する場合は必要に応じてエラー処理を追加してください。

nasne.TotalNumberOfRecodings.mkr.sh
#! /bin/bash

: mackerel設定
export MACKEREL_APIKEY='mackerelのAPIキー'
_service='サービス名'
_value='メトリック名'

: リストファイル(後述)のパスを記載
_list=/path/to/nasne.lst

_mkr=/path/to/mkr
_jq=/path/to/jq

_time=`date -u +%s`

for _line in `grep -E -v "#"\|^$ ${_list}`; do
        _name=`echo ${_line} | cut -d, -f1`
        _addr=`echo ${_line} | cut -d, -f2`
        _num=`curl -s \
            'http://'${_addr}':64220/recorded/titleListGet?searchCriteria=0&filter=0&startingIndex=0&requestedCount=0&sortCriteria=0&withDescriptionLong=0&withUserData=0' | \
             ${_jq}  '.totalMatches'`

        echo -e "${_value}.${_name}\\t${_num}\\t${_time}" | ${_mkr} throw -s ${_service}

done

今回は複数台のnasneに対応させるため、nasneのIPアドレスをリストファイルとしてシェルスクリプトに読み込ませています。
リストファイルは以下のようにカンマ区切りで nasneの名前,IPアドレス の順に記載してください。
作成したリストのパスをスクリプトの _list 変数にセットしてください。

(例)nasne.lst
nasne-ani,192.168.0.55
nasne-ototo,192.168.0.56

ちなみに、我が家では最初に買ったnasneを nasne-ani(兄) 、後から買ったnasneを nasne-ototo(弟) と呼んでます。

crontab登録

録画件数を定期的にmackrelに投稿するため、このスクリプトをcrontabに登録します。
実行間隔は30分~1時間程度がいいかと思います。

監視ルール設定

mackerelにメトリックが投稿されると、自動的にこんな感じグラフが作成されます。
(最初は手動で何回かスクリプトを実行してあげるとグラフがすぐ表示されます)
mackerel.png

グラフが作成できていることを確認したら、監視ルールを設定します。
今回はnasneの録画件数をサービスメトリックで投稿していますので、サービスメトリック監視を選択し、しきい値を設定します。
しきい値については、まずはテストのため現在の録画件数の近辺を設定し、
正しく監視できていることを確認した後に本番で監視したい値を設定し直すことをおすすめします。

まとめ

システムソフトウェアのアップデートにより、録画件数の上限が"ほぼ"ない状態となった今では、このスクリプトはあまり利用する機会がないかもしれませんが、身の回りの機器を監視してしきい値を超えたらアラートを出すというのはIoTチックなところもあり大変興味深いです。
また、nasneはAPIでいろいろな情報を取得できるようなので、nasneを使った次のネタを考えてみようかと思います。

  1. 今日から「nasne(ナスネ)™」がVer.2.60にアップデート! 最大録画件数が1,000件から3,000件に大幅拡張!

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?