平常運転

アニソンが好き

過去記事とかは記事一覧で見れます

MacBook を Mackerel で監視し始めた & mackerel-plugin-darwin-battery を書いた

QNAP を譲り受けることになって、折角なので QNAP の監視を Mackerel でやろうと思い立ったものの、肝心の QNAP のセットアップに失敗した。

仕方が無いのでとりあえず自分の MacBook を監視しようとしたのと、物の試しということでバッテリー容量をカスタムメトリクスとして収集する plugin を書いた。

mackerel-agent を入れる

Official の homebrew tap があるのでそれでシュッと入れる。
github.com

brew install したらでてくる指示に従って mackerel-agent.conf に api key を書いて動かせばとりあえず Mackerel にホストが生えてくるので眺める。

とりあえず監視設定する

デフォルトだと Connectivity 監視が入っているのだけれど、常時起動&ネットワーク疎通が前提のサーバと異なり、ノートパソコンは電源が入ってなかったり電波の届かない場所にあったりするので疎通はちょくちょく切れるが、そのたびにいちいちアラートをもらいたくない。アラートを受け取りたくないだけならホストを Standby にしてしまうと良いのだけれど、そうすると疎通以外のアラートも受け取れなくなってしまうので今回の目的には合わない。ということでノートパソコンとサーバで別のロールをつけることにして、ノートパソコンは疎通監視しないということにした。

f:id:astj:20160619120519p:plain

ついでに他の監視項目も適当に設定する。ひとまずディスク容量の監視を設定したところ、今回2台登録した MacBook のうち1台はディスクが70%埋まってて速攻アラートが来た。便利。。。

MacBook とは関係ないけど、自分で管理してるサイトいくつかの外形監視もついでにいれた。便利。

アラート通知先を設定する

アラートの通知先もちゃんと考えないといけない。仕事で使ってるときは Slack とかのチャットツールにアラート流すのが一番手軽だと思うけど、個人ひとりで使うとなると通知するチャットもないので、ひとまず諦めてメールにした。

ついでにほしいメトリクスを考える

常時疎通がある訳ではないノートパソコンのメトリクスでいったい何がほしいだろうかと考える。監視したい項目という観点と、時系列データとして保存しておくとおもしろそうという観点でぼーっと考えたところ、 uptime とバッテリーの容量くらいかなぁと思い立つ。どちらもまぁ面白さ重視という感じ。

plugin を入れる

公式の plugin は github にあるのだけれど、これの brew tap はないので自分で適当に go build してファイルを配置して agent の設定に書く。バイナリの配置先は迷ったけど今回は雑に /usr/local/var/mackerel-agent/bin に置いた。
github.com

バッテリー容量を収集する plugin を書いた

バッテリーの容量とかの情報は pmset -g battとかで取れるらしい、というのを軽く見たので、これを適当にパースしたらメトリクス組み立てられそうだなという感じで眺める。軽く調べたけどそういうプラグイン書いてる人を見つけられなかったので自分でつくる気持ちになった。

Get MacBook Battery Life Percent Time Remaining from Command Line in Mac OS X | OSXDaily

実際は -g batt じゃなくて -g rawbattした。なんかこういう値が取れる。Cap が現在の値、 FCC が最大充電時の容量。 Design は多分出荷時の最大容量とかじゃないかな。。。

$ pmset -g rawbatt
06/19/16 13:50:14
 AC; Not Charging; 99%; Cap=6550: FCC=6589; Design=6559; Time=0:00; 0mA; Cycles=36/1000; Location=0;
 Polled boot=05/26/16 03:04:46; Full=06/19/16 01:32:46; User visible=06/19/16 01:35:46

Golang はちょっとだけ触ったことあるのだけど完全に忘れていたので、サンプルなどを見ながらひーこら言いながら書いたところなんとか動く感じになった。
とりあえずはグラフを眺めて楽しむのがメインなので容量しか取ってないけど、真面目に監視するなら残量の % もパースした方がいいのかもしれない。まあいいか、という気持ち。

f:id:astj:20160619135218p:plain

雑に書いたコードはこれ。OS X 10.11 と 10.9 で動いてるので最近の感じならまあ動くんじゃないかなと思ってる。テストはない。

github.com

感想としては、 go-mackerel-plugin-helper 便利なんだけど、渡す型をミスると特にエラーも出ず値が握りつぶされてしまったりしてややハマったりした。go 書き慣れてる人なら特にハマらないのかもしれない。

github.com

まとめ

ということで監視し始めた。今のところ、自分の管理してるサイトのレイテンシが時々ハネることに外形監視で気付いたくらいなので肝心の MacBook の監視はあんまり出番がないけれど、出番がないのがよいことだという気持ちでやっていきたい。
今気付いたところ QNAP 用の代わりの HDD が届いていたようなので、セットアップが済み次第こっちも監視したい。こちらはホームサーバなので Mackerel の本来の監視目的という感じがする。こちらからは以上です