Grafana 接続¶
関連: PostgreSQL / パネル SQL / 何を見るか
Grafana で支出を可視化する¶
関連: PostgreSQL / 支出の保存 / アーキテクチャ
構成(今回の前提)¶
ブラウザ
→ Grafana VM 192.168.40.220
→(LAN)PostgreSQL 192.168.40.212:5432
DB: finance_manager
ユーザー: finance_readonly(SELECT のみ)
| 役割 | IP(想定) | やること |
|---|---|---|
| finance-manager | 192.168.40.212 |
PG を LAN から読めるようにする、読み取りユーザー |
| Grafana | 192.168.40.220 |
データソース追加、パネル作成 |
アプリ用の finance_app は書込権限を持つ。
Grafana には渡さない。
全体の流れ¶
- PG 上に 読み取り専用ユーザー を作る
- PG が LAN からの接続を受け付ける ようにする(
listen_addresses/pg_hba.conf) - finance-manager 上から Grafana VM(220)相当の接続を試験する(任意)
- Grafana UI で PostgreSQL データソース を追加する
- パネルを SQL で作る(今日、今週、大分類)
手順 1: 読み取り専用ユーザー¶
ユーザー分離¶
| ユーザー | 用途 |
|---|---|
finance_app |
Bot が INSERT/UPDATE/DELETE |
finance_readonly |
Grafana が SELECT だけ |
可視化用に書込権限を渡すと、パネルや誤操作でデータを壊す余地が残る。
作業場所¶
finance-manager VM(192.168.40.212)に SSH する。
強いパスワードを自分で決めてメモする(Git に書かない)。
psql 内で(パスワードは自分のものに置換):
-- ユーザー作成(既にあればスキップか ALTER でパスワード更新)
CREATE USER finance_readonly WITH PASSWORD 'ここに強いパスワード';
-- この DB に接続できる
GRANT CONNECT ON DATABASE finance_manager TO finance_readonly;
-- public スキーマを使える
GRANT USAGE ON SCHEMA public TO finance_readonly;
-- 既存テーブルを読める
GRANT SELECT ON ALL TABLES IN SCHEMA public TO finance_readonly;
-- 今後作られるテーブルもデフォルトで SELECT 可能に(任意だが便利)
ALTER DEFAULT PRIVILEGES IN SCHEMA public
GRANT SELECT ON TABLES TO finance_readonly;
確認:
SELECT が通ればよい。
INSERT が拒否されることも確認しておく。
リポジトリにも同じ内容の参考 SQL がある: sql/grafana_readonly_grants.sql(パスワードは自分で入れる)。
手順 2: PostgreSQL を LAN から届くようにする¶
いま Bot は同じマシンの 127.0.0.1 だけで足りている。
Grafana(220)から読むには、PG が外部(LAN)の接続を listen し、かつ許可する必要がある。
用語¶
| ファイル | 役割 |
|---|---|
postgresql.conf |
どこで待つか(listen_addresses) |
pg_hba.conf |
誰をどういう認証で入れるか(ホストベースアクセス) |
Debian だとだいたい:
2-1. listen_addresses¶
listen_addresses を探す。
| 値 | 意味 |
|---|---|
localhost(デフォルトに近い) |
同じマシンからだけ |
* または 0.0.0.0 |
全インターフェース |
192.168.40.212 |
その IP だけ |
自宅 LAN なら、まずは次にする。
(インターネットに 5432 を晒す話ではない。ルータでポート開放しないこと。)
2-2. pg_hba.conf¶
末尾あたりに、Grafana VM だけを許可する行を足す(推奨):
# Grafana (192.168.40.220) → finance_manager 読み取り
host finance_manager finance_readonly 192.168.40.220/32 scram-sha-256
| 列 | 意味 |
|---|---|
host |
TCP 接続 |
finance_manager |
DB 名 |
finance_readonly |
ユーザー |
192.168.40.220/32 |
Grafana の IP だけ |
scram-sha-256 |
パスワード認証 |
192.168.40.0/24 全体を開けても動く。
意図をはっきりさせるなら 220 だけにする。
既存の local / 127.0.0.1 の行は消さない(Bot が壊れる)。
2-3. 反映¶
listen_addresses 変更は restart が必要なことがある。
reload で足りなければ restart する。
Bot は systemd なので、PG 再起動後に一瞬エラー→Restart=always で復帰しがちである。
念のため:
2-4. ファイアウォール¶
Debian で ufw 等が有効なら、220 から 5432 を許可する必要がある場合がある。
無効(inactive)なら、この段はスキップでよいことが多い。
手順 3: 接続テスト(finance-manager 上)¶
「設定したつもり」と「届く」を分ける。
# 同じ VM から、わざと LAN IP 経由で readonly 接続
psql "postgresql://finance_readonly:PASSWORD@192.168.40.212:5432/finance_manager" \
-c 'SELECT COUNT(*) FROM expenses;'
成功すれば、listen / hba / ユーザーはだいたい正しい。 (本当の「220 から」は Grafana VM に入って同じコマンドを叩くとより確実。)
Grafana VM に SSH できるなら:
psql が無ければ sudo apt-get install -y postgresql-client。
手順 4: Grafana にデータソースを追加¶
ブラウザで Grafana(220)を開く。
- Connections → Data sources → Add data source
- PostgreSQL を選択
- だいたい次を入れる:
| 項目 | 値 |
|---|---|
| Host | 192.168.40.212:5432 |
| Database | finance_manager |
| User | finance_readonly |
| Password | (手順1で決めたもの) |
| TLS / SSL | 自宅 LAN なら disable で始めることが多い |
| Version | 自分の PG に近いもの |
- Save & test → 成功メッセージが出れば OK
失敗したら:
- Host が
127.0.0.1になっていないか(それは Grafana 自身を指す) pg_hbaの IP が本当に 220 か- パスワード、DB 名
詳細なパネル SQL は Grafana パネル SQL へ。