センサーの代わりにテストデータを自動生成して、MySQLに保存し、Grafanaで可視化する流れを作ってみました。
MySQLの準備
まずはMySQL側で、ランダムデータを入れるテーブルを作成しました。
<code>CREATE DATABASE sensor_data;
USE sensor_data;
CREATE TABLE random_numbers (
id INT AUTO_INCREMENT PRIMARY KEY,
timestamp DATETIME NOT NULL,
value FLOAT NOT NULL
);</code>
Code language: PHP (php)
Node-REDでランダムデータを自動生成

今回はセンサーを使わずに、Node-REDでランダムな数値を作る簡単なフローを作成しました。
- Injectノード → 一定間隔でデータ生成トリガー
- Functionノード → ランダム値を作成
- MySQLノード → データベースに書き込み ※ユーザー名とパスワードはSQLで設定したものを入れる
Functionノードのコードはこんな感じです。
let randomValue = (Math.random() * 50).toFixed(2);
msg.topic = <code>INSERT INTO sensor_data(sensor_name, value) VALUES ('RandomSensor', ${randomValue})<span style="background-color: initial;font-family: inherit;font-size: inherit;text-align: initial;color: initial">;</span></code>return msg;
Code language: JavaScript (javascript)
- Math.random() * 50 → 0~50までのランダム値を作成
- SQL文をmsg.topicに入れてMySQLノードに渡す
- injectノードで数秒おきに実行するよう設定
Grafanaのインストール
Grafanaは公式サイトからダウンロードしました。
(https://grafana.com/grafana/download)
自分の環境はWindowsなので、インストーラーを選択。
インストール後、自動でサービスが起動し、ブラウザからアクセスできるようになりました。
- URL:
http://localhost:3000
- 初期ユーザー:
admin
- 初期パスワード:
admin
(初回ログイン後にパスワード変更要求あり)
Grafanaの起動と初期設定
ログインした後、最初にデータソースを追加するadd new connectionに進み、
ここで「MySQL」を選択し、自分のmysqlの情報を入力しました。



ダッシュボード作成
次に「New Dashboard」から「Add Visualization」を選択。


データソースにMySQLを指定します。

その後、Nodataのqueryが表示されるため右下のcodeを選び以下のコマンドを作成しRUNを押すことでグラフが表示されると思います。
SELECT
UNIX_TIMESTAMP(created_at) as time_sec,
value
FROM sensor_data
WHERE $__timeFilter(created_at)
ORDER BY created_at

「Run Query」を押すとちゃんとデータが表示されました。最初グラフが見ずらいと思うのでrangeを変えてみてください。
感想
- MySQLからGrafanaまでは思ったよりスムーズ
- テーブル構造をきちんと作れば、グラフ化が一瞬でできる
- データの動きをリアルタイムで追えるのがかなり便利