13
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

GrafanaでMySQLのデータを可視化する in Docker (in WSL2)

Last updated at Posted at 2022-10-02

About

  • Grafana は、様々なデータを可視化してくれるダッシュボードツールです
  • 本記事では、ローカル環境上ででサクッと試してみます
    • GrafanaとMySQLのコンテナをDocker上で用意する
    • MySQLで適当なデータベースを作る
    • Grafanaでそのデータを表示する
    • (Grafanaへのユーザ登録やログインは不要です)

環境

  • Windows 11 Home
  • WSL2 (Ubuntu-20.04)
  • Docker

MySQLでデータベースを作る

MySQLコンテナを作る

下記コマンドによってMySQLコンテナを作ります。簡易的にデータ永続化をするために、ここではローカルに db というディレクトリを作ってそれをマウントしています。これによって、コンテナを作り直してもデータベースが保持されます。また、アクセス権限を設定しないとrootで書き込まれてしまうため、userを指定しています。

WSL2上で試す場合、--net host が必要でした。なお、Windows Firewallは特に無効にしなくても大丈夫でした。

MySQLコンテナの作成
mkdir ./db

docker run --name some-mysql \
  --user `id -u` \
  -v `pwd`/db:/var/lib/mysql \
  -e MYSQL_ROOT_PASSWORD=pw-for-root \
  --net host \
  -p 3306:3306 \
  -d --rm mysql:8.0.30

MySQLの設定をする

下記コマンドで作成したコンテナに入ります。パスワードは pw-for-root です。

MySQLに入る
docker exec -it  some-mysql mysql -u root -p

その後、下記SQL文によって後で使うGrafana用のユーザを作っておきます。GrafanaにはSELECTのみ許可します。ワイルドカードを使わないでちゃんとデータベース名とテーブル名を指定した方が安全です。

Grafana用ユーザ追加
CREATE USER 'grafanaReader' IDENTIFIED BY 'pw-for-grafana';
GRANT SELECT ON *.* TO 'grafanaReader';

サンプルデータベースを作る

引き続き、下記SQL文によって適当なデータベースを作ります。ここでは通常のtableと、時系列のtableを作ります。
終わったら、Ctrl+dで終了してOKです。

サンプルデータベースを作る
CREATE DATABASE IF NOT EXISTS test_db;
CONNECT test_db;

CREATE TABLE user_table (
    id int(10) AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(20)
);

INSERT INTO user_table(name) VALUES ('Alice');
INSERT INTO user_table(name) VALUES ('Bob');
INSERT INTO user_table(name) VALUES ('Charlie');


CREATE TABLE time_table (
    id int(10) AUTO_INCREMENT PRIMARY KEY,
    data_time DATETIME,
    value int
);

INSERT INTO time_table(data_time, value) VALUES ('2022-01-02 16:00:00', 10);
INSERT INTO time_table(data_time, value) VALUES ('2022-02-02 16:00:00', 20);
INSERT INTO time_table(data_time, value) VALUES ('2022-03-02 16:00:00', 30);
INSERT INTO time_table(data_time, value) VALUES ('2022-04-02 16:00:00', 40);
INSERT INTO time_table(data_time, value) VALUES ('2022-05-02 16:00:00', 30);
INSERT INTO time_table(data_time, value) VALUES ('2022-06-02 16:00:00', 20);

SELECT * FROM user_table;
SELECT * FROM time_table;

Grafana

Grafanaコンテナを作る

下記コマンドによってGrafanaコンテナを作ります。簡易的にデータ永続化をするために、ここではローカルに grafana というディレクトリを作ってそれをマウントしています。ここには各種設定が保存されます。

Grafanaコンテナの作成
mkdir ./grafana

docker run --name grafana \
  --user `id -u` \
  -v `pwd`/grafana:/var/lib/grafana \
  --net host \
  -p 3000:3000 \
  -d --rm grafana/grafana

Grafanaへアクセスする

コンテナを起動したのと同じPC上で以下にアクセスします。

01.jpg

Data sourcesの設定

  • Configuration -> Data sources -> Add data sourceをクリック

02.jpg

  • MySQLを選択

03.jpg

  • 下記設定を行う
    • Host: localhost:3306
    • Database: test_db
    • User: grafanaReader
    • Password: pw-for-grafana
  • ページ下部の Save & Test をクリックして、 Database Connection OK が表示されることを確認する

04.jpg
05.jpg

Dashboardの設定

  • Dashboards -> Browse -> New -> New Dashboard をクリック
  • Add a new pane をクリック

06.jpg

通常のテーブルを追加する

  • Format Asを Table に設定

  • Edit SQLをクリックして、以下を入力

    SELECT * FROM user_table;
    
  • 右上からTableを選ぶ。または、他の描画方法を選ぶ

  • 設定が完了したら Apply をクリック

07.jpg

時系列データを追加する

  • Dashboard上に、先ほどのテーブルが追加されているので、引き続き、Add Panel -> Add a new panelをクリック

  • Format Asを Time series に設定 (default)

  • Edit SQLをクリックして、以下を入力

    SELECT
      data_time AS "time",
      value
    FROM time_table
    
  • 時間レンジを過去1年間にする (これは今回作成したデータがそういうもののため)

  • 設定が完了したら Apply をクリック

08.jpg

Dashboardを保存する

  • Dashboard上でパネルをさらに追加したり、位置を調整する
  • 最後にSaveしたら完成

09.jpg

その他

  • コンテナを再起動しても設定は保持されている
  • MySQL側でデータを追加したら、Dashboardも更新される
  • 時系列データを扱う場合にはMySQLよりもInfluxDB の方がいいらしい
13
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?