mattintosh note

どこかのエンジニアモドキの備忘録

Node-RED から Zabbix にデータを連携する

始める始めると言いつつまだ始めてない 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 へ。

https://screenshots.firefoxusercontent.com/images/1da8feef-b58b-4d7e-b84f-e8f8be064180.png

まずは入力になるノードを作成していく。HTTP GET と HTTP POST は両方作る必要はなく、用途に合わせて作成。

入力で HTTP GET ノードを作成。

https://screenshots.firefoxusercontent.com/images/d88d3bbb-9142-4499-a74a-4d180708163f.png

入力に HTTP POST ノードを作成。

https://screenshots.firefoxusercontent.com/images/452224bf-bb5f-457b-a28a-de6d8cd0fa0a.png

中間に JSON ノードを作成。

https://screenshots.firefoxusercontent.com/images/eb706692-1ef6-40f2-bf62-c22f3f5034bd.png

その次に TCP リクエストノードを作成。ポートは Zabbix の待受ポートを指定する。

https://screenshots.firefoxusercontent.com/images/8900e8c9-f675-4371-8590-b58ade174df6.png

一通り出来上がるとこんな感じ。あとはデプロイしておしまい。

https://screenshots.firefoxusercontent.com/images/5274ced3-d902-4246-ab11-fcf49c5321c3.png

テストで 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 のダッシュボードでデータを確認してみる。

https://screenshots.firefoxusercontent.com/images/e3b3106f-0d5f-4bc1-a6b4-24f0eb74c1a1.png

Node-RED はデータを視覚的に繋げられて、モニタリングやデバッグがもできるので面白い。