始める始めると言いつつまだ始めてない FlashAir Lua。Zabbix は Zabbix Sender が無くてもソケット通信ができればデータを送れるのは前に試したときにわかったけど、FlashAir の Lua からソケット通信が出来るかどうかがわからない。とりあえず HTTP で何かするのは出来そうなので Node-RED の勉強がてらインターフェイスを準備しておく。
今回は Docker の node-red-docker を使用。
$ sudo docker run -it -p 1880:1880 --name node-red-alpha nodered/node-red-docker
http://localhost:1880
を開いて Node-RED へ。
まずは入力になるノードを作成していく。HTTP GET と HTTP POST は両方作る必要はなく、用途に合わせて作成。
入力で HTTP GET ノードを作成。
入力に HTTP POST ノードを作成。
中間に JSON ノードを作成。
その次に TCP リクエストノードを作成。ポートは Zabbix の待受ポートを指定する。
一通り出来上がるとこんな感じ。あとはデプロイしておしまい。
テストで GET、POST 両方試してみる。Zabbix に送る JSON はこんな感じ。ホストは raspberrypi-zero
、キーは test
を作成してある。
{ "request": "sender data" , "data": [ { "host": "raspberrypi-zero" , "key": "test" , "value": "0" } ] }
まずは GET。data は配列で送る必要がある。$RANDOM
はシェルの変数で適当な数値が入る。
curl -g -X GET "http://localhost:1880/get?request=sender+data&data[0][host]=raspberrypi-zero&data[0][key]=test&data[0][value]=${RANDOM}"
次に POST。Content-Type: application/json
を忘れずに。
curl -X POST -H 'Content-Type: application/json' --data \ '{ "request": "sender data" , "data": [ { "host": "raspberrypi-zero" , "key": "test" , "value": "'${RANDOM}'" } ] }' http://localhost:1880/post
いずれも成功すれば Zabbix からメッセージが返ってくる。このメッセージが返ってこなければ TCP リクエストに失敗している可能性がある。また、 processed ではなく failed になってしまう場合は host や key が間違っていたり、JSON の内容が間違っている可能性がある。
ZBXDZ{"response":"success","info":"processed: 1; failed: 0; total: 1; seconds spent: 0.000064"}
Zabbix のダッシュボードでデータを確認してみる。
Node-RED はデータを視覚的に繋げられて、モニタリングやデバッグがもできるので面白い。