はじめに
自宅の湿温度を測ってくれているNature RemoのセンサーデータをWeb APIから取得してZabbixでグラフ化するテンプレートです。
Zabbix 4.0で導入されたHTTP Agentによって今までHTTP API取得をスクリプト経由でしかできなかったことがZabbixテンプレート上で行えるようになったのでやりかたメモ
このやり方を応用すれば、他のIoT機器でも値を取得してすべてZabbixで管理できる!はず、、、
Zabbix HTTP Agentを利用するため、Zabbix4.0以上が必要です
作成したテンプレートは、下記Githubにおいています。
https://github.com/miyuk/zabbix-template-natureremo
Nature RemoやAPI情報などは参考URLを参照
設定の流れ
①アクセストークンの取得
こちら参考にしていただき、Nature Remoのアクセストークンを取得する。
②取得したいデバイスIDを取得
上記のアクセストークンを使って下記curlを実行。
レスポンスから取得したNature RemoのデバイスIDをメモっておく
curl -X GET "https://api.nature.global/1/devices" -H "Accept: application/json" -H "Authorization: Bearer <①で取得したアクセストークン>"
[
{
"name":"Remo A",
"id":"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx←ここで表示されるIDをメモ",
...
"newest_events":{
"hu":{
"val":42,
"created_at":"2020-02-10T16:00:55Z"
},
"il":{
"val":137.39,
"created_at":"2020-02-10T15:18:13Z"
},
"mo":{
"val":1,
"created_at":"2020-02-10T16:14:20Z"
},
"te":{
"val":21.6,
"created_at":"2020-02-10T15:55:48Z"
}
}
},
...
]
③Zabbixにテンプレートをインポートしてホストを登録
https://github.com/miyuk/zabbix-template-natureremo
からzabbix-template-natureremo.xml
を持ってきてZabixにテンプレートインポート
その後、テンプレートを適用した適当なホストを登録
マクロは下記の通り指定。
Key | Value |
---|---|
{$ACCESS_TOKEN} | <①より取得したアクセストークン> |
{$TARGET_DEVICE} | <取得したいデバイスID(取得したAPIの各機器idを記載)> |
結果
5分毎にAPIからセンサーデータを取得してメトリックだけ保存してくれる。
仕組みとしては、HTTP APIアイテムを5分ごとに取得して依存アイテムとして取得したJSONデータをごにょごにょして気温や湿度を取っている
5分ごとじゃなく1分ごとにすることもできるが、私の環境ではNature Remo E含めてアカウントに3台分紐付けているためか5分ごとのAPI制限にかかってしまうため余裕をもたせている。
今後、Nature Remo Eの情報もZabbixで取得したいがそもそも現状Nature Remo EのAPIは提供されていない。
あと、Nature Remo APIでは1APIでアカウントに紐づくすべてのデバイス情報を取得できるので、ディスカバリルール
を使って今後デバイスが増えていっても対応できるようしないといけない。
最後に
Zabbixで取得したはいいが、保存したデータが他のvCenter情報やルータSNMPデータの中と比較してやや浮いてしまっている。
今後、センサー情報をDynamoDBなどに持っていけたらIoTハブとして可能性が広がりそう
ZabbixからPub/Sub使えるようにしてみたい