Grafana利用DBをSQLiteからPostgreSQLに変更する【Grafana運用管理】

今回はGrafana自体が利用するDBをデフォルトのSQLiteからPostgreSQLに変更する方法をご紹介します。

なお、【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構成の方法をご紹介する予定ですので、ご興味ある方はチェックしてください!

ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

0人がこの投稿は役に立ったと言っています。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です