はじめに
ESP8266などのデータを手軽に可視化、蓄積するにはAmbientが手軽でとても便利です。
Ambientにデータを送信するための各種サンプルコード等もWeb上にたくさん情報があり便利に使用させていただいています。
ただ、我が家は各種データをZabbixで管理しているため、AmbientとZabbixの二重管理になってしまいます。
今回、AmbientのデータをAPIにてZabbixより取得してZabbixに一元化することができたので、その手法を記事にします。
環境
・ZabbixServer 6.0.25
・Debian 11.8
Zabbixでの設定
データ取得の流れ
ZabbixからAPIを叩いてデータ取得をし、ZabbixDBまでに格納するまでの流れは以下の通りです。
1.アイテムのタイプ:URLエージェント を使用して、Ambientの最新データをJSON形式で取得する。
2.アイテムのタイプ:依存アイテム を使用して、1.で取得したアイテムから目的の項目(d1~d8)のデータを取得する
3.取得したい項目の数だけ2.と同様のアイテムを作成する。
Ambientは、データの送信回数については明記されていますが、APIの実行回数の制限については確認できませんでした。(誰かご存知の方がいらっしゃったら教えてください)
一応毎分データ取得(1,440回/日)をしていますが問題なくデータを取得し続けられています。
事前準備
・チャンネルIDとリードキーの確認
データを取得したいAmbientのチャンネル管理画面にアクセスし、以下の図の箇所のチャンネルIDとリードキーをメモしておきます。
Zabbixの設定
・Zabbixホストの作成
私の別の記事のように、テンプレートを作成しても良いのですが、今回は取り急ぎ1つのデータだけなので、ホストに直接アイテムを作成します。
ホスト-マクロ
マクロ:{$CHANNEL_ID}
値 :管理画面で確認したチャンネルID
マクロ:{$READ_KEY}
値 :管理画面で確認したリードキー
ホスト-アイテム
名前 :Ambientからのデータ取得 ※任意で構いません
タイプ :HTTPエージェント
キー :Ambient.api.get ※任意で構いません
データ型:テキスト
URL :https://ambidata.io/api/v2/channels/{$CHANNEL_ID}/data?&readKey={$READ_KEY}&n=1
ヘッダー:
名前:Content-Type
値 :application/json
監視間隔:1m
このアイテムはあくまでも事前のデータ取得用なので、ヒストリの保存期間はデバッグが終わったら「ヒストリを保存しない」としても良いかもしれません。
ホスト-アイテム-保存前処理
ホスト-アイテムその2-アイテム
名前 :温度 ※取得する値の種類にあわせる
タイプ :依存アイテム
キー :.d1 ※任意で構いません
データ型:数値(不動小数) ※取得する値の種類にあわせる
マスターアイテム:先程作成したアイテム
単位 :℃ ※取得する値の種類にあわせる
ホスト-アイテムその2-保存前処理
名前 :JSONPath
パラメータ:$.d1 ※取得したいデータにあわせる
このように、一旦メインのアイテムですべての値を一括取得し、そこから依存アイテムで必要な値を抜き出す形を取ります。
取得したいデータ(d1~d8)数だけ同じようにアイテムを作成します。
最後に
これで当該ホストの最新データを確認し、データが取得できていれば成功です。
無事AmbientのデータをZabbixで取得することができました。
あとはグラフ化するなり、ダッシュボードするなり通常のZabbixアイテムのデータと同じように扱えるようになりました。
Zabbixはcurlで取ってこれるデータであれば特に個別にスクリプト等作成する必要無くアイテムを作成できるので便利ですね。