はじめに
今回はさくらVPSというサーバーをレンタルし、そのサーバー上でNode-REDを立ち上げた
また、ホストマシーンで起動しているNode-REDでデータを取得し、サーバー上のMQTTBrokerでデータを送信、サーバー上のNode-REDで受信、サーバ上のInfluxDBにデータを格納後、Grafanaで可視化させる。
さくらVPSとは

さくらVPS(Virtual Private Server)は、さくらインターネット株式会社が提供する仮想専用サーバーサービスである。このサービスは、高いパフォーマンスと自由度を兼ね備えた仮想サーバーをリーズナブルな価格で利用できることから、個人から企業まで幅広いユーザーから支持されている。
さくらサーバーのインストール・起動手順
①下記のリンクを開き、「さくらのVPS お申込みはこちら」を押す
さくらのVPS「お試し期間」仕様変更のお知らせ – さくらのVPSニュース (sakura.ad.jp)
➁Linuxから選ぶ → OS選択(今回はRockyLinuxを選択)

➂サーバーの詳細設定(今回は以下の環境で設定)

・プラン:メモリ1Gプラン
・リージョン:石狩第1
・パスワード:任意のパスワードを設定
・SSHキー設定/サーバーの名前は任意で設定
・スタートアップスクリプト:ここで以前はNodeREDを選択できたと思われる…
➃お支払方法等の設定を行う
➄さくらインターネットの会員登録とログインを行う
ログイン画面:https://secure.sakura.ad.jp/auth/login

➅契約中のサービス一覧→サーバーのコントロールパネルを開く

⑦「電源操作」→「起動する」を選択する

サーバー上でNode-REDを立ち上げる
・接続ポートの設定
→「サーバー」→「パケットフィルター設定」→「パケットフィルターを設定」

・パケットフィルターを追加し以下の設定を行う
フィルターの種類:「カスタム」
ポート番号:「1880」

・「CMD」等で以下のコードを入力する
・サーバーログイン
・今回はrockyLinuxを使用しているため、管理者名は「rocky」となっている
・”your_host_name”はサーバーの基本情報から確認可能
→パスワードを要求されるのでサーバーの設定で指定したパスワードを入力
ssh rocky@"your_host_name"

・サーバー更新
sudo dnf update
サーバー上の環境設定
1. Node-REDのインストール
・Node.js 18.xのインストール (Node-REDで使用するため)
curl -sL https://rpm.nodesource.com/setup_18.x | sudo bash -
sudo dnf install -y nodejs
・以下のコマンドでバージョン確認
node -v
npm -v
・Node-REDのインストール
sudo npm install -g --unsafe-perm node-red
・Node-RED起動
node-red
2. Mosquittoのインストール
依存関係のインストール
最初に、Mosquittoのインストールに必要な依存関係をインストールする
sudo dnf install epel-release
Mosquittoのインストール
EPELリポジトリからMosquittoをインストールする
→「y/N」と聞かれるので「y」を入力して「Enter」
sudo dnf install mosquitto mosquitto-clients
Mosquittoサービスの起動
Mosquittoサービスを起動する
sudo systemctl start mosquitto
Mosquitto設定ファイルの編集
Mosquittoの設定ファイルを vi
で開く
sudo vi /etc/mosquitto/mosquitto.conf
・「i」を押してノーマルモードから編集モードに切り替える
・設定ファイル内の「Listeners」セクションを探す
・以下の画像の通りに中身を書き加える
→この設定でMosquittoはどのIPアドレスからの接続も受け付けるようになる
・「Escキー」を押した後に「:wq」を入力して設定ファイルを保存して終了
listener 1883.0.0.0.0 # This line allows listening on all interfaces on port 1883
# Allow anonymous connections.
allow_anonymous true # This line allows anonymous clients to connect

・最後にMosquittoの再起動を行う
sudo systemctl restart mosquitto
・以下の画像で1883ポートの接続が可能となったことが分かる

・Mosquittoサービスが正常に動作しているか確認
sudo systemctl status mosquitto
3. InfluxDBのインストールと設定
InfluxDBのリポジトリを作成
InfluxDataの公式リポジトリをシステムに追加する
→ 常に最新バージョンを取得することができる
sudo tee /etc/yum.repos.d/influxdb.repo <<EOF
[influxdb]
name = InfluxDB Repository - Stable
baseurl = https://repos.influxdata.com/rhel/8/\$basearch/stable
enabled = 1
gpgcheck = 1
gpgkey = https://repos.influxdata.com/influxdata-archive_compat.key
EOF
InfluxDBのダウンロードとインストール
公式リポジトリから最新のInfluxDB 2.xをインストールする
sudo dnf install influxdb2
InfluxDBの起動
InfluxDBを起動する
sudo systemctl start influxdb
・InfluxDBが正常に動作しているか確認
sudo systemctl status influxdb
4. Grafanaのインストールと設定
Grafanaのリポジトリを作成
Grafanaの公式リポジトリをシステムに追加する
→ 常に最新バージョンを取得することができる
sudo tee /etc/yum.repos.d/grafana.repo <<EOF
[grafana]
name=Grafana
baseurl=https://packages.grafana.com/oss/rpm
repo_gpgcheck=1
enabled=1
gpgcheck=1
gpgkey=https://packages.grafana.com/gpg.key
EOF
Grafanaのダウンロードとインストール
公式リポジトリから最新のGrafana11.1.0をインストールする
sudo dnf install grafana
Grafanaの起動
次に、Grafanaを起動する
sudo systemctl start grafana-server
・Grafanaが正常に動作しているか確認
sudo systemctl status grafana-server
Node-REDのフロー作成
1. 準備
Node-RED(サーバー側)にアクセス
・”your_server_IP”はサーバーの基本情報から確認可能
http://"your_server_IP":1880

・右上のメニューを押して、「パレットの管理」を開く
「ノードを追加」タブで「node-red-contrib-influxdb」を追加する

InfluxDBにアクセス
・”your_server_IP”はサーバーの基本情報から確認可能
http://"your_server_IP":8086
・初回起動時はセットアップが必要
・ユーザー名、パスワード、組織名、バケット名を入力する

・InfluxDB内で「バケット」と「APIトークン」を作成する

2. サーバー側のフロー作成
・全体像

MQTT Inノードの編集
・サーバ:「mqtt://localhost」
・トピック:任意の名前で設定

Influxdb Outノードの編集
・Organization(組織名):Influxdbセットアップで設定したもの
・Bucket:新規で作成したバケット
・Measurement:任意の物を指定
・URL:「http://localhost:8086」
・Token:コピーしたAPIトークンを入力

3. ホストマシーン側のフロー作成
・全体像

・「MQTT Outノード」以外の設定に変更はないため、詳細は過去の記事を参照

MQTT Outノードの編集
・サーバー側で設定したものと同じ「トピック」を設定する
・「サーバ」の項目に以下の内容を入力する
mqtt://"your_server_IP"

・デバッグノードでデータが取得できていることを確認

・「MQTT out」ノードが「接続済み」になっていることを確認

InfluxDBで確認
・「Data Explorer」を開き、作成したバケット・Measurmentを選択、
適当なFieldを選び、AGGREGATE FUNCTIONのmeanをオフに設定する

・画像のように正常にデータが取得できていれば成功

Grafanaで可視化
Grafanaにアクセス
・”your_server_IP”はサーバーの基本情報から確認可能
http://"your_server_IP":3000
GrafanaとInfluxdbを接続
・「Connections」→「Data Sources」→「Influxdb」で接続設定を行う
・Query Language:Fluxを使用
・URL:「http://”your_server_IP”:8086」
・Organization:設定した組織名
・Token:作成したAPIトークン
・Bucket:作成・設定したバケット
Dashboardsで可視化
・「Dashboards」→「Create dashboard」→「Add visualization」
→「Influxdb」を選択
・クエリに以下のコードを入力
→「my-bucket」「my-measurement」は自身で設定したものを入力する
→ 最後に「Apply」を押してグラフが表示されれば成功
from(bucket: "my-bucket")
|> range(start: -1h)
|> filter(fn: (r) => r._measurement == "my-measurement")
