MySQLに格納されているデータを気軽に見える化できれば嬉しいと思った事は無いでしょうか。
色々なグラフで表示できれば、眠っているデータも活用できるかもしれませんね。
今回、Grafanaを使用して、様々なグラフで表示するという検証を行いました。
環境情報
説明 | 値 |
---|---|
仮想化ソフト | KVM |
VCPU | 2 core |
MEMORY | 2G |
OS | CentOS7 |
GrafanaはデフォルトでPort 3000番でListenしますので、ブラウザでアクセスできるように設定を行います。
また同じVM上にMariaDBもインストールします。
参考ドキュメント
Grafana公式ドキュメント
http://docs.grafana.org/
MariaDB公式ドキュメント
https://mariadb.com/kb/ja/mariadb/
GrafanaのデータソースにMySQLを登録
http://docs.grafana.org/features/datasources/mysql/#using-mysql-in-grafana
MariaDBのインストール
ようにMariaDBをインストールし、起動します。
1 2 3 4 5 6 7 8 9 10 |
$ vi /etc/yum.repos.d/mariadb.repo ---- [mariadb] name = MariaDB baseurl = http://yum.mariadb.org/10.2/centos7-amd64 gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB gpgcheck=1 $ yum -y install MariaDB-server MariaDB-client $ systemctl start mariadb.service |
今回、簡単なベンチマーク結果をグラフ化したいと思いますので、sysbenchもインストールしておきます。
1 2 |
$ yum -y install epel-release $ yum -y install sysbench |
ベンチマーク格納用のテーブルも作成しておきます。
時系列データをGrafanaで表示するためには、クエリで以下の列が取得できる必要があります。
カラム名 | 説明 |
---|---|
time_sec | Unixエポック時を格納する列でなければなりません。 |
value | 値を格納する列でなければなりません。 |
metric | グラフ表示名を格納する列でなければなりません。 |
Grafanaからクエリを実行する際に上記の列名で値を取得する必要がありますが、
SELECT文のAS句を使用すればよいため、実際のカラム名が上記である必要はありません。
以下のように作成しました。
1 2 3 4 5 6 |
MariaDB> create database grafana; MariaDB> create table grafana.sysbench( time_sec int primary key, metric varchar(256), value int ); |
Grafanaからアクセスするためのユーザーを作成します。
1 2 |
MariaDB> CREATE USER grafanaReader@<code>localhost</code> IDENTIFIED BY 'password'; MariaDB> GRANT SELECT ON grafana.sysbench TO 'grafanaReader'; |
データ作成
sysbenchのベンチマーク結果をCSVにしてmysqlに流し込みます。
1 2 3 |
$ sysbench $(cat bench_innodb.cnf ) oltp_read_write prepare $ sysbench $(cat bench_innodb.cnf ) oltp_read_write run | \ perl -nlE '/^.+qps: (\d+?)\..*$/ && printf "%d,%s,%d\n", "".time,"qps",$1;' >> /tmp/data.csv |
bench_innodb.cnfは以下の内容です。
1 2 3 4 5 6 7 8 9 10 11 12 |
--db-driver=mysql --mysql-user=bench --mysql-password= --mysql-port=3306 --mysql-host=localhost --mysql_storage_engine=innodb --table_size=10000 --tables=10 --mysql-db=test --time=300 --report-interval=1 --threads=5 |
採取が完了したら、LOADします。
1 |
MariaDB> load data infile '/tmp/data.csv' into table grafana.sysbench fields terminated by ','; |
※LOAD DATA INFILEを使用するためにはsecure_file_privシステム変数で/tmpを指定する必要があります。
以上でデータの準備は完了です。
Grafanaのインストール
公式の手順に従い、Yumリポジトリを登録しインストールを行います。
http://docs.grafana.org/installation/rpm/
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
$ vi /etc/yum.repos.d/grafana.repo --- [grafana] name=grafana baseurl=https://packagecloud.io/grafana/stable/el/6/\$basearch repo_gpgcheck=1 enabled=1 gpgcheck=1 gpgkey=https://packagecloud.io/gpg.key https://grafanarel.s3.amazonaws.com/RPM-GPG-KEY-grafana sslverify=1 sslcacert=/etc/pki/tls/certs/ca-bundle.crt EOF $ yum -y install grafana $ grafana-server -v Version 4.6.3 (commit: 7a06a47) |
次にgrafanaを起動します。
自動起動も有効化しておきます。
1 2 |
$ systemctl start grafana-server.service $ systemctl enable grafana-server.service |
Grafanaの初期画面が表示されるか確認してみましょう。
初期ログインユーザー/パスワードはadmin/adminです。
次にデータソースを登録します。
ここではlocalhostのMariaDBを登録します。
そして、ダッシュボードを作成しましょう。
ダッシュボードにグラフを追加します。
以下の通りSQLを書き換えます。
最後にグラフのタイトルを変更しましょう。
表示されましたが、時間幅が広すぎますので、表示間隔を変更しましょう。
最終的にこのようなグラフが出来上がりました。
これで、sysbenchを実行した結果どのようにQPSが推移していたか一目瞭然ですね。
使い慣れたMySQLにデータを入れ、簡単なSQLで多種多様なグラフを作成できる仕組みは
色々と役立つのではないかと思います。
Let’s Enjoy Grafana & MariaDB !