mattintosh note

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

2024-06-05: 現在ホビー関連の記事を hobby.mattintosh-note.jp に移行しています。現在掲載されている画像と今後掲載される画像は一部の環境から閲覧できなくなります。

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 はデータを視覚的に繋げられて、モニタリングやデバッグがもできるので面白い。