今回はGrafana自体が利用するDBをデフォルトのSQLiteからPostgreSQLに変更する方法をご紹介します。
なお、【Grafana運用管理】シリーズと題して他にも記事を投稿していきますので、併せてご確認ください。
- Grafana利用DBをSQLiteからPostgreSQLに変更する【Grafana運用管理】 ★本記事
- Grafanaのバックアップ・リストアを行う【Grafana運用管理】
- Grafanaをクラスタ構成(HA構成)にする【Grafana運用管理】
目的
Grafana自体が利用するDBはデフォルトでGrafanaに付属しているSQLiteです。
検証目的や小規模な環境であればこれで問題ありませんが、大規模展開する際や、Grafanaのクラスタ構成を組む場合には、外部のDBを利用する必要があります。
そのような利用者のため、今回はGrafana自体が利用するDBをPostgreSQLに変更する方法をご紹介します。
なお、Grafana自体が利用するDBとして対応しているものとして、SQLite・PostgreSQLに加え、MySQLも対応しています。
・今回の変更前後の構成図
環境
今回の検証環境サーバーは以下の通りです。
用途 | ホスト名 | IPアドレス |
---|---|---|
Grafanaサーバー | vm-grafana1 | 172.24.1.5/24 |
DBサーバー | vm-grafanadb | 172.24.1.7/24 |
上記サーバーのOS/SWは以下の通りです。
OS/SW | バージョン |
---|---|
OS | Ubuntu 22.04 LTS |
Grafana | grafana-enterprise 9.5.13 |
PostgreSQL | 14.9 |
また、Grafanaが利用するDBの接続情報は下記の通りです。
既にvm-grafanadbにPostgreSQLが導入されている前提とします。
DB | ポート番号 | 接続ユーザー | Grafanaが利用するDB |
---|---|---|---|
PostgreSQL | 5432 | grafana_psuser | grafana_psdb |
Grafanaの構築
今回はaptコマンドでインストールしていきます。
下記コマンドをvm-grafana1で実行していきます。
※参考:Install Grafana
# 依存パッケージのインストール
sudo apt-get install apt-transport-https
# GPCキーのインポート、stableリリースをaptリポジトリに追加
wget -q -O - https://apt.grafana.com/gpg.key | gpg --dearmor | sudo tee /etc/apt/keyrings/grafana.gpg > /dev/null
echo "deb [signed-by=/etc/apt/keyrings/grafana.gpg] https://apt.grafana.com stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list
# aptパッケージの更新
sudo apt-get update
# Grafanaのインストール
sudo apt install grafana-enterprise=9.5.13
# GrafanaのSystemdサービス追加・起動
sudo systemctl enable grafana-server --now
PostgreSQLの事前準備
PostgreSQL側の事前準備として、Grafana専用の接続ユーザー・データベースの作成を行うため、下記作業をvm-grafanadbで実行していきます。
なお、あくまで検証目的のため簡易的な手順にしていますが、実際には各環境やセキュリティ要件に合わせてご対応ください。
接続ユーザーの作成
Grafanaが利用する接続ユーザーを作成します。
# postgresユーザーに切り替え
sudo su - postgres
# grafana_psuserをCREATEDB権限を付与して作成
psql
CREATE USER grafana_psuser WITH PASSWORD 'xxxxxxxxxx' CREATEDB;
# psqlから抜ける
\q
実行結果
azureuser@vm-grafanadb:~$ sudo su - postgres
postgres@vm-grafanadb:~$
postgres@vm-grafanadb:~$ psql
psql (14.9 (Ubuntu 14.9-0ubuntu0.22.04.1))
Type "help" for help.
postgres=#
postgres=# CREATE USER grafana_psuser WITH PASSWORD 'xxxxxxxxxx' CREATEDB;
CREATE ROLE
postgres=# \q
postgres@vm-grafanadb:~$
データベースの作成
Grafanaが利用するデータベースを作成します。
併せて、この時点ではテーブルが何もないことも確認します。
# grafana_psuserユーザーでpostgresデータベースに接続
psql -h localhost -U grafana_psuser -d postgres
# grafana_psdbデータベースの作成
CREATE DATABASE grafana_psdb;
# psqlから抜ける
\q
# grafana_psuserユーザーで作成したgrafana_psdbデータベースに接続
psql -h localhost -U grafana_psuser -d grafana_psdb
# テーブルが何もないことを確認
\dt
# psqlから抜ける
\q
実行結果
postgres@vm-grafanadb:~$ psql -h localhost -U grafana_psuser -d postgres
Password for user grafana_psuser:
psql (14.9 (Ubuntu 14.9-0ubuntu0.22.04.1))
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off)
Type "help" for help.
postgres=>
postgres=> CREATE DATABASE grafana_psdb;
CREATE DATABASE
postgres=>
postgres=> \q
postgres@vm-grafanadb:~$
postgres@vm-grafanadb:~$ psql -h localhost -U grafana_psuser -d grafana_psdb
Password for user grafana_psuser:
psql (14.9 (Ubuntu 14.9-0ubuntu0.22.04.1))
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off)
Type "help" for help.
grafana_psdb=>
grafana_psdb=> \dt
Did not find any relations.
grafana_psdb=> \q
postgres@vm-grafanadb:~$
Grafanaの利用DBの変更
Grafanaの利用DBをPostgreSQLに変更するため、下記作業をvm-grafana1で実行していきます。
grafana.iniの変更
/etc/grafana/grafana.ini
をPostgreSQLの接続情報に合わせて変更していきます。
変更内容
type = postgres
host = vm-grafanadb:5432
name = grafana_psdb
user = grafana_psuser
password = xxxxxxxxxx
Grafanaの再起動
/etc/grafana/grafana.ini
の変更を反映するため、Grafanaを再起動します。
# Grafanaのサービス再起動
sudo systemctl restart grafana-server
# Grafanaのサービス状態確認
sudo systemctl status grafana-server
実行結果
azureuser@vm-grafana1:~$ sudo systemctl restart grafana-server
azureuser@vm-grafana1:~$ sudo systemctl status grafana-server
● grafana-server.service - Grafana instance
Loaded: loaded (/lib/systemd/system/grafana-server.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2023-11-01 18:23:25 JST; 8s ago
Docs: http://docs.grafana.org
Main PID: 4007 (grafana)
Tasks: 5 (limit: 2263)
Memory: 24.9M
CPU: 612ms
CGroup: /system.slice/grafana-server.service
└─4007 /usr/share/grafana/bin/grafana server --config=/etc/grafana/grafana.ini --pidfile=/run/grafana/grafana-server.pid --packaging=deb cfg:default.paths.logs=/var/log/grafana cfg:default.paths.d>
Nov 01 18:23:34 vm-grafana1 grafana[4007]: logger=migrator t=2023-11-01T18:23:34.457168594+09:00 level=info msg="Executing migration" id="add index in alert_definition on org_id and uid columns"
Nov 01 18:23:34 vm-grafana1 grafana[4007]: logger=migrator t=2023-11-01T18:23:34.489562965+09:00 level=info msg="Executing migration" id="alter alert_definition table data column to mediumtext in mysql"
Nov 01 18:23:34 vm-grafana1 grafana[4007]: logger=migrator t=2023-11-01T18:23:34.503344916+09:00 level=info msg="Executing migration" id="drop index in alert_definition on org_id and title columns"
Nov 01 18:23:34 vm-grafana1 grafana[4007]: logger=migrator t=2023-11-01T18:23:34.519148521+09:00 level=info msg="Executing migration" id="drop index in alert_definition on org_id and uid columns"
Nov 01 18:23:34 vm-grafana1 grafana[4007]: logger=migrator t=2023-11-01T18:23:34.539347262+09:00 level=info msg="Executing migration" id="add unique index in alert_definition on org_id and title columns"
Nov 01 18:23:34 vm-grafana1 grafana[4007]: logger=migrator t=2023-11-01T18:23:34.56830377+09:00 level=info msg="Executing migration" id="add unique index in alert_definition on org_id and uid columns"
Nov 01 18:23:34 vm-grafana1 grafana[4007]: logger=migrator t=2023-11-01T18:23:34.595010907+09:00 level=info msg="Executing migration" id="Add column paused in alert_definition"
Nov 01 18:23:34 vm-grafana1 grafana[4007]: logger=migrator t=2023-11-01T18:23:34.614652105+09:00 level=info msg="Executing migration" id="drop alert_definition table"
Nov 01 18:23:34 vm-grafana1 grafana[4007]: logger=migrator t=2023-11-01T18:23:34.628776883+09:00 level=info msg="Executing migration" id="delete alert_definition_version table"
Nov 01 18:23:34 vm-grafana1 grafana[4007]: logger=migrator t=2023-11-01T18:23:34.642305914+09:00 level=info msg="Executing migration" id="recreate alert_definition_version table"
azureuser@vm-grafana1:~$
データベース切り替え後の確認
データベースが正常に切り替わったことを確認します。
Grafanaの画面からの確認
Grafanaの画面が正常に表示されログインできることと、「Administration > Settings」のdatabase
セクションに、変更したgrafana.ini
の内容が反映されていることを確認します。
PostgreSQLからの確認
Grafanaが利用するPostgreSQLのデータベースに、Grafana関連テーブルが作成されていることを確認します。
下記コマンドをvm-grafanadb上のpostgres
ユーザーで実行します。
# grafana_psdbのテーブル一覧を表示し、上位10行だけ画面表示する
psql -h vm-grafanadb -p 5432 -U grafana_psuser -d grafana_psdb -c "\dt" | head -n 10
実行結果
postgres@vm-grafanadb:~$ psql -h vm-grafanadb -p 5432 -U grafana_psuser -d grafana_psdb -c "\dt" | head -n 10
Password for user grafana_psuser:
List of relations
Schema | Name | Type | Owner
--------+-------------------------------+-------+----------------
public | alert | table | grafana_psuser
public | alert_configuration | table | grafana_psuser
public | alert_configuration_history | table | grafana_psuser
public | alert_image | table | grafana_psuser
public | alert_instance | table | grafana_psuser
public | alert_notification | table | grafana_psuser
public | alert_notification_state | table | grafana_psuser
postgres@vm-grafanadb:~$
終わりに
GrafanaはDockerコンテナも提供しているため、誰でも簡単に利用を開始することができます。
一方で、利用ユーザーが増えたり、クラスタ構成(HA構成)を組みたい場合は、Grafanaが利用するDBをSQLiteから外部のDB(PostgreSQL or MySQL)にする必要があります。
今回はその方法をご紹介しましたが、他にもバックアップ・リストアの方法や、上記のHA構成の方法をご紹介する予定ですので、ご興味ある方はチェックしてください!