2017-09-17 (日)
* PrometheusでIoT的なセンサの値を監視する
定期的にデータ集めて通知したりグラフ表示したりするプログラムをいくつも動かしているので,よくあるモニタリングツールにまとめられないか試してみる.
とりあえず,仕事で触ってみて便利だったPrometheus + Grafanaの組み合わせに.(このままPrometheusにするかは微妙なところ)
どちらもDockerイメージが用意されてるので入れるのは簡単.Prometheusは小さいのでとりあえず全サーバに入れちゃっても良さそう.Prometheusには認証機能などは無さそうなので,インターネット越しに使うならnginxとかでBASIC認証するなど良しなにするのが良さそう.とりあえず参照だけならアクセスされても問題なさそうなので放置.
まずは,VPS上でうごいている温度計とかのセンサ類のデータを集めてるプログラムにPrometheus用のレスポンスを返す機能を追加して様子を見ることにする.
Prometheusに対応するためには,/metricsにHTTPでアクセスされたときに,EXPOSITION FORMATSに書かれている通りのデータを返せば良いらしい.これ自体は簡単.テキストとprotobufがあるけど,テキストで返すようにする.JSON返すAPIがすでにあるのでjsonだともっと楽だったのだけど.
本当は,センサから直接Prometheusに入れたいけど,通常時はスリープしてて定期的にWiFiモジュール使ってネットワークに繋がるので,いままで動かしていたやつをそのまま使う.
一応,prometheus/pushgatewayを使えば良さそうだけど,いまさらデータの送信フォーマット変えるのも面倒.
メトリクスのフォーマットにはtimestampがあるのだけど,Prometeusはスクレイピングした時刻で管理しているのであまり意味がない.完全に無視するわけでもなくて,データが古すぎないかどうかだけ見ているっぽい.
https://github.com/prometheus/client_golang/issues/187 まさしくこれか.そして,データの登録が5分おきのものもあるので,デフォルト設定だとグラフが結構途切れたりする.
常に動いていることが期待されていて頻繁にメトリクスが更新されるノードのモニタリングに使ったほうが良いな.
Grafanaも入れる.最初,グラフの設定の仕方がよくわからなかったけど,慣れれば簡単そうだった.
(グラフ重ねてみて気づいたけど,湿度センサが1つなんかおかしいな...)
GrafanaにはAnnotaionsというイベントを扱う仕組みがあるので部屋のドアの開閉記録とかそういうのも上手く流し込みたい.