わたしは、後先なにも考えずに Grafana をインストールしたことで、一つ後悔をしていることがあります。
もし、軽い気持ちで Grafana を入れて試してみようと初期設定で済ませることを推奨しません。最低限、データベースだけはなににするか決めておいた方が良いです。なににするかと言っても選択肢は少ないです。MySQL
かPostgreSQL
かです。
Sqlite3 ではいけないの?
ダメとは言いません。ホントに軽い気持ちでちょっと使おうという一時的なケースだけにした方が良いです。
Grafana を本格運用し出すと、ダッシュボードを平気で 5s や 10s で更新するような大人になります。まちがいなく、なります。すると、残念なできごとが起きることでしょう。やたらめったらログアウトしやすくなります。それを回避するとなると、MySQL
かPostgreSQL
へ移行しなければなりません。移行は面倒で厄介です。
しかし、みなさま、安心してください。今回、Grafana 7.x で sqlite3
からMySQL
へ移行する手順を紹介します。
もし、sqlite3
で運用していて「やたらとログアウトするようになったなー」と感じた方、これから述べる方法でMySQL
へ移行してください。明るい未来が待っています。
Grafana 7.x における sqlite3 → MySQL への移行
一部、順番に気をつけないといけないとこありますが、データの欠損などは起こらない方法なので、安心して進めてください。次の 7手順になります。
- MySQL をインストールして設定する
- Grafana 用、database-migrator を準備する
- grafana.db から MySQL 用 sql を抽出する
- grafana.ini の設定を変更する
- MySQL の各種テーブルを作成する
- MySQL へデータを放り込む
1. MySQL をインストールして設定する
Ubuntu で MySQL をインストール紹介している方法で全然十分と考えます。たとえば、個人的にインストールの流れとしてわたしと似ているのは MySQL 8.0 : Install の手順です。
セキュリティレベルやパスワードなどは、運用する状況下においてイロイロと変わるでしょうから、各自の判断にお任せします。とはいえ sudo mysql_secure_installation
あたりは実行しておくことが嗜みです。
忘れてはならないのは、mysqld.conf
へ次の行が入っていることが必須です。最後の行に追加しておけば十分でしょう。
character-set-server = utf8mb4
あと、データベースの作成と権限付与を忘れずに。'<password>'
はお好みで。Grafana からアクセスする際の grafana ユーザのパスワードです。
$ sudo mysql
mysql> create database grafana;
Query OK, 1 row affected (0.00 sec)
mysql> CREATE USER 'grafana'@'localhost' IDENTIFIED BY '<password>';
Query OK, 0 row affected (0.00 sec)
mysql> grant all privileges on grafana.* to 'grafana'@'localhost';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
2. Grafana 用、database-migrator を準備する
Grafana 向け sqlite3
DBから MySQL
用のデータ移行スクリプト(SQL)をdumpするプログラムであるdatabase-migratorを準備します。git
で提供されていますから、git
も忘れずに。
適当なディレクトリで git clone
して、Grafana のあるサーバへコードをダウンロードします。
$ git clone https://github.com/grafana/database-migrator.git
実行権限がついてなければ、付与しておきます
$ chmod 755 database-migrator/sqlitedump.sh
3. grafana.db から MySQL 用 sql を抽出する
DBの静止点をとるために、Grafanaを停止しておきます。
$ sudo systemctl stop grafana-server.service
Grafana の sqlite3
DB から、先ほどの database-migrator
を使って、MySQL
データ移行用の SQL ダンプを出力します。
$ sudo database-migrator/sqlitedump.sh /var/lib/grafana/grafana.db > grafana.sql
なお、grafana.ini
で sqlite3
データベースのディレクトリやパスを変えている場合は、/var/lib/grafana/grafana.db
をそちらへ直してください。
4. grafana.ini の設定を変更する
grafana.ini
を変更して、MySQL
へアクセスするように設定を変更します。
先に MySQL
を設定したとおりに進めている場合には、name
もuser
もgrafana
です。<PASSWORD>
は、先に指定したパスワードを指定してください。
[database]
# You can configure the database connection by specifying type, host, name, user and password
# as separate properties or as on string using the url properties.
# Either "mysql", "postgres" or "sqlite3", it's your choice
type = mysql
host = 127.0.0.1:3306
name = grafana # データベース名
user = grafana # MySQL のユーザ名
# If the password contains # or ; you have to wrap it with triple quotes. Ex """#password;"""
password = <PASSWORD> # grafana ユーザで指定したパスワード
5. MySQL の各種テーブルを作成する
まだ、データベースにデータを入れていませんが、ここで一度Grafanaを起動します。
sudo systemctl start grafana-server.service
その後、こんな感じでtail -f
しながら、http.server
が起動するのを待ちます。
$ sudo tail -f /var/log/syslog
Feb 17 22:27:57 hostname grafana-server[231080]: t=2021-02-17T22:27:57+0900 lvl=info msg="Executing migration" logger=migrator id="add index user_auth_token.user_id"
Feb 17 22:27:57 hostname grafana-server[231080]: t=2021-02-17T22:27:57+0900 lvl=info msg="Executing migration" logger=migrator id="create cache_data table"
Feb 17 22:27:57 hostname grafana-server[231080]: t=2021-02-17T22:27:57+0900 lvl=info msg="Executing migration" logger=migrator id="add unique index cache_data.cache_key"
Feb 17 22:27:57 hostname grafana-server[231080]: t=2021-02-17T22:27:57+0900 lvl=info msg="Executing migration" logger=migrator id="create short_url table v1"
Feb 17 22:27:57 hostname grafana-server[231080]: t=2021-02-17T22:27:57+0900 lvl=info msg="Executing migration" logger=migrator id="add index short_url.org_id-uid"
Feb 17 22:27:58 hostname grafana-server[231080]: t=2021-02-17T22:27:58+0900 lvl=info msg="Created default admin" logger=sqlstore user=admin
Feb 17 22:27:58 hostname grafana-server[231080]: t=2021-02-17T22:27:58+0900 lvl=info msg="Created default organization" logger=sqlstore
Feb 17 22:27:58 hostname grafana-server[231080]: t=2021-02-17T22:27:58+0900 lvl=info msg="Starting plugin search" logger=plugins
Feb 17 22:27:58 hostname grafana-server[231080]: t=2021-02-17T22:27:58+0900 lvl=info msg="Registering plugin" logger=plugins id=input
Feb 17 22:27:58 hostname grafana-server[231080]: t=2021-02-17T22:27:58+0900 lvl=info msg="HTTP Server Listen" logger=http.server address=[::]:3000 protocol=http subUrl= socket=
そこまで達したら、またGrafanaを停止します。
$ sudo systemctl stop grafana-server.service
このように、Grafana の起動時にデータベース内になにも入っていないと、必要なテーブルや初期設定を行ってくれます。
6. MySQL へデータを放り込む
あとは、できあがったテーブル構造内に、先ほどのSQLをぶん投げておしまいです。もし、失敗して変なデータを入れてしまったら、mysql
で DROP DATABASE grafana;
してから CREATE DATABASE grafana;
してやり直しです。
その後は、MySQL
にデータを放り投げ入れます。<PASSWORD>
のとこは読み替えて直して入れてください。
mysql -u grafana -p<PASSWORD> -D grafana < ~/grafana.sql
特にエラーなく放り込めたら、Grafana を起動します。
sudo systemctl start grafana-server.service
これでマイグレーションはうまくいっているはずです、アクセスして試してみましょう!
そして更新間隔を 1s 5s などで頻繁に更新して楽しみましょう!!!11(そうじゃない)