itochin2の日記(仮)

主に備忘録。Perl、MySQL、Unity、開発管理などについて情報を残していきたい。

mackerelでnasneの監視をはじめた

mackerel-pluginを作りました。
github.com

動機

nasneは録画した動画が1000件に達すると、録画できない仕様がある。
撮りためたアニメを消化しようかな?と思ったら、
1000件以降の録画予約が全滅しててマジF◯CKという出来事があって、監視を決めた。

監視

監視と言えばmackerel。
mackerelのカスタムメトリックに録画件数と、録画失敗件数を投稿して
しきい値こえたらLINEに通知したい。

録画件数と録画失敗件数を得る

たぶん公式ではないと思うけど、nasneAPIをサービスしていることはわかった。

参考になった既存のソリューション
github.com
なにがありがたいって、APIがリストアップされてる事。
こんなん調べるの、絶対めんどくさい。インターネットがあってよかった。
残念なことにパラメータは書いてなかったから、torneのアプリをパケットキャプチャして突き止めた。

どこからAPIを呼ぶか

nasneにmackerel-agentぶっこめたら話は早かったけど、手間そうだったのですぐ諦めた。
バラしてHDDを取り出す、とかも嫌だったし。
なのでこれを期にラズベリーパイを買った。
本体やらSDカードやらで8000円くらい飛ぶ ☠

プラグインの実装

mackerel.io
ドキュメントが分かりやすいし、公式のプラグインを参考にガリガリ作っていけた。
副産物としてgoからAPIを呼び出すClientも実装した。
curlとjqで十分なのでClientは不要説ある
とても勉強になった。

録画件数はnasneAPIで取得した値を投げるだけ。
録画失敗はAPIで取った失敗件数の差分を投げれば、失敗の発生が検知できる。
ついでにHDDの容量も監視してみたけど、HDDは複数あるので、グラフ定義も動的に。
usedを積み上げ、totalを折れ線で定義したけどなぜか反映されなくて、WEBの設定で変更した。

ラズベリーパイ3は32bitなのでコンパイルはこれで。

GOOS=linux GOARCH=arm go build

あとはバイナリを転送してmackerelのconfigをペロッと更新。

最後に監視ルールの設定

f:id:itochin2:20170722093131p:plain
900件を超えたら警告を出す感じにした。

所感

golangは覚えるのもそんなに難しくないし、ラズパイに実行環境用意したりしなくていいので
独自のプラグインを設定するのは結構かんたんだった。
無料枠で監視ができてありがたい。