このエントリは Mackerel Advent Calendar 2017 の7日目のエントリです。
qiita.com
自宅サーバやそれに類する物に mackerel-agent を入れていく話を淡々とします。
目的
- mackerel-agent を家のいろいろなものに入れて眺めて喜ぶ
- 監視によって実利が得られると最高
サクサクいきましょう。
パート1
ふつうに agent 入れればいい人達です。
macOS on MacBook
昔エントリにしたこともあります:
astj.hatenablog.com
最近 Mackerel 側のヘルプも公開されました:
mackerel.io
去年のエントリに書いた内容もありますが、監視項目はこの辺にしています:
パート2
ふつうに入れるだけではダメで手を加えている人達です。
FireTV stick (Android)
Android ベースなので id:nonylene さんの Mackerel Agent for Android が動きます。
しかし FireTV は Play Store が動かないので自前でビルドしてから adb で転送することになり壮大だったのでした……
ふつうのモバイル Android で mackerel-agent を入れる必要はそんなにないと思っているけど、据え置き端末なら結構入れる甲斐はあると思っています。動画のストリーミングをしてると Network Traffic が変化するのを見れたりしてかわいい。しかし実用度はそんなにないのでかわいさ重視……
QNAP TS-220
ARM の上で Linux ベースのカスタム OS が動いてる NAS。 id:aereal さんから譲ってもらった。 agent を動かす話も aereal さんが書いています。
一方でこの2年で Go や mackerel-agent 周りで色々事情が変わったところもあって、自分用にまとめていた gist があったのでそれを貼っておきます。雑。
そのままでは動かない(ところもある)ので fork して少しパッチを当てた物がぼくの GitHub にあります。
これをクロスコンパイルして scp すればよい、というのが書いてあるのが下の gist 。
ふつうに /usr/local/bin/ や /etc/ 以下に物を置きたくなるけど、 QNAP でこのあたりは揮発性なので、 /share/... 以下の具体的な HDD の中に置いておくと永続化できる、という感じでした。ぼくの環境だと RAID 組んでいるので /share/MD0_DATA/ だった。
また、 mackerel-plugin-linux を動かしているのですが、 QNAP の busybox では全てのメトリックが動くわけではありません。適度に mackerel-plugin-linux -p xxx -p yyy
しながら動く type だけ追加しています。
少しだけおもしろグッズとしては、 QNAP では get_hd_temp
コマンドで HDD の温度を取得できるので、 HDD の温度をカスタムメトリックにしています。しかし本当は snmp かなにかでも取れる気がする……
サーバなので死活監視などもしているのですが、個人的にはディスク容量の長期的な変化を可視化できるのが便利だと思っています。しかしこれは Standard プランでないとできない……
そして GoARMv5 なんかそのうちサポート終わりそうで心配しています。
EdgeRouter X
お安くて小さいけど機能十分の Linux ルータ、 EdgeRouter X というのを我が家では運用しています。
Debian ベースの Vyatta ベースのカスタマイズディストリビューションである EdgeOS という物で動いており、アーキテクチャは mipsle です。つまり mackerel-agent が動きます。
QTS と異なりそのままビルドすれば動くのですが、折角なのでちょっと手を加えて filesystem のメトリックがちゃんと表示されるようにしています。(デフォルトのままだと EdgeRouter の構成と mackerel-agent の仕様の兼ね合いで filesystem のメトリックが表示されなくなっていました。)
また、折角なので DHCP のリース数をメトリックにしています。ワンライナーで処理した結果地獄のようなことになっています:
[plugin.metrics.dhcp] command = "/usr/sbin/ubnt-dhcp print-stats | perl -nalE 'next if $.<3;@v=split/ +/;$t=time;say qq/edge-os.dhcp.$v[0].leased\t$v[2]\t$t\nedge-os.dhcp.$v[0].available\t$v[3]\t$t/;'"