このページでは、Red Hat Enterprise Linux 環境において Zabbix Server から PostgreSQL へ接続するための設定を整理する。
前のページまでで、PostgreSQL の導入と Zabbix 用データベースの作成は完了している前提で進める。ここでは PostgreSQL 側の接続設定を見直し、ローカル接続に加えて、内部ネットワークからの接続も可能な状態にする。
本環境では、Zabbix Server 自身がローカル接続で PostgreSQL を利用する構成としている。ただし、運用時のメンテナンスや接続確認、性能確認、障害調査などを考えると、内部ネットワークから管理用に接続できるようにしておくと扱いやすい。
そのため、このページではローカル接続だけでなく、内部ネットワークからの接続も許可する設定を行う。ただし、許可対象は内部利用に限定し、外部ネットワークからの接続は許可しない。
なお、本ページは外部公開向けのページであるため、実際のサーバー名や内部 IP アドレスは記載せず、仮称を用いて説明する。
作業対象サーバー
監視サーバー(仮称)(ZBX-WEB)
OS
Red Hat Enterprise Linux 10
構築対象
PostgreSQL 18
Zabbix 用データベース接続設定
内部ネットワーク向け接続許可
本ページで登場するサーバーは以下のとおりである。
監視サーバー(仮称)(ZBX-WEB)
Zabbix Server、PostgreSQL、Web フロントエンドを構成するサーバー
証明書管理サーバー(仮称)(CERT-WEB)
後続手順で HTTPS 化を行う際に証明書管理で使用するサーバー
監視対象 Web サーバー(仮称)(MON-WEB01)
Zabbix Agent2 を導入して監視対象とする Web サーバー
監視対象 DB サーバー(仮称)(MON-DB01)
Zabbix Agent2 を導入して監視対象とする DB サーバー
管理端末(仮称)(ADMIN-PC)
内部ネットワークから PostgreSQL へ接続確認やメンテナンスを行う端末
本ページは外部公開向けページである。
ただし、Zabbix の管理画面や監視基盤そのものは外部公開しておらず、内部利用を前提としている。
そのため、本ページでは実際のサーバー名や内部 IP アドレスは記載せず、仮称を用いて構成を説明する。
まず、PostgreSQL が正常に起動していることを確認する。
systemctl status postgresql-18
解説
この確認では、設定変更前に PostgreSQL サービスが正常に動作しているかを見る。
先に起動状態を確認しておくと、設定変更後の切り分けがしやすい。
設定ファイルの場所を確認する。
ls /var/lib/pgsql/18/data/
ls -l /var/lib/pgsql/18/data/
解説
PostgreSQL 18 の設定ファイルは
このデータディレクトリ配下にある。
ここで postgresql.conf と pg_hba.conf の存在を確認しておく。
postgresql.conf が存在する
pg_hba.conf が存在する
PostgreSQL が起動している
解説
ここまで確認できれば、設定変更へ進める。
現在の listen_addresses 設定を確認する。
grep listen_addresses /var/lib/pgsql/18/data/postgresql.conf
解説
初期状態では localhost のみ、またはコメントアウト状態になっている場合がある。
このままだと内部ネットワークからの接続を受けられない。
設定変更前にバックアップを取得する。
cp -p /var/lib/pgsql/18/data/postgresql.conf /var/lib/pgsql/18/data/postgresql.conf_$(date +%Y%m%d)
解説
設定ファイルを変更する前にバックアップを残しておく。
構築手順では、変更前の状態を戻せるようにしておくのが基本である。
設定ファイルを編集する。
vi /var/lib/pgsql/18/data/postgresql.conf
解説
このファイルで PostgreSQL の待受設定やログ設定を変更する。
listen_addresses を変更する。
変更前
#listen_addresses = 'localhost'
変更後
listen_addresses = '*'
解説
listen_addresses = '*' とすることで、
PostgreSQL は全インターフェースで接続を受け付ける。
ただし、実際にどこから接続できるかは pg_hba.conf と firewalld で制御するため、ここだけで無制限に公開されるわけではない。
設定変更後の内容を確認する。
grep listen_addresses /var/lib/pgsql/18/data/postgresql.conf
解説
期待どおり listen_addresses = '*' になっていればよい。
現在のログ設定を確認する。
grep -E \
"log_filename|log_rotation_size|log_connections|log_disconnections|log_min_duration_statement" \
/var/lib/pgsql/18/data/postgresql.conf
解説
運用開始後は、接続状況や遅い SQL の確認が必要になることがある。
そのため、最低限のログ設定をここで入れておく。
設定ファイルを編集する。
vi /var/lib/pgsql/18/data/postgresql.conf
解説
必要なログ項目を追記または変更する。
以下の内容を設定する。
変更前
log_filename = 'postgresql-%a.log'
log_rotation_size = 0
#log_connections = ''
#log_disconnections = off
#log_min_duration_statement = -1
変更後
log_filename = 'postgresql-%Y-%m-%d.log'
log_rotation_size = 100MB
log_connections = on
log_disconnections = on
log_min_duration_statement = 5000
解説
log_filename は日付ベースのファイル名にする。
log_rotation_size はログファイル肥大化を避けるための上限である。
log_connections と log_disconnections は接続と切断を記録する。
log_min_duration_statement = 5000 は、5秒以上かかった SQL を記録する設定である。
これにより、メンテナンス時や性能確認時に確認しやすくなる。
変更内容を確認する。
grep -E \
"log_filename|log_rotation_size|log_connections|log_disconnections|log_min_duration_statement" \
/var/lib/pgsql/18/data/postgresql.conf
解説
期待した値が表示されれば、ログ設定は完了である。
現在のアクセス制御設定を確認する。
grep -v "^#" /var/lib/pgsql/18/data/pg_hba.conf
解説
pg_hba.conf は接続元、接続先 DB、ユーザー、認証方式を制御する。
ここではまず、現在の許可内容を把握する。
設定変更前にバックアップを取得する。
cp -p /var/lib/pgsql/18/data/pg_hba.conf \
/var/lib/pgsql/18/data/pg_hba.conf_$(date +%Y%m%d)
解説
変更前の状態を残しておくことで、設定ミス時に戻しやすくなる。
設定ファイルを編集する。
vi /var/lib/pgsql/18/data/pg_hba.conf
解説
ここで Zabbix 用接続と内部ネットワーク向け接続を許可する。
以下の内容を追加する。
host zabbix zabbix 127.0.0.1/32 scram-sha-256
host zabbix zabbix 192.168.1.0/24 scram-sha-256
解説
1行目は Zabbix Server からのローカル TCP 接続を許可する設定である。
2行目は内部ネットワークからの Zabbix DB 接続を許可する設定である。
この内部接続は、普段の常用というよりも、
メンテナンス、接続確認、パフォーマンス調査、障害対応時の確認用途を想定している。
外部からの接続は許可しない。
あくまで内部ネットワークに限定している点が重要である。
追加した設定を確認する。
grep zabbix /var/lib/pgsql/18/data/pg_hba.conf
解説
追加した 2 行が表示されれば設定は反映できている。
サービス名を確認する。
systemctl list-units --type=service | grep postgres
解説
RHEL 10 + PostgreSQL 18 環境では
postgresql-18.service として動作していることを確認する。
PostgreSQL を再起動して設定変更を反映する。
systemctl restart postgresql-18
解説
postgresql.conf と pg_hba.conf の変更内容を反映するため、サービス再起動を行う。
再起動後の状態を確認する。
systemctl status postgresql-18
解説
active (running) が確認できれば、
設定変更後も正常起動している。
firewalld の状態を確認する。
systemctl status firewalld
firewall-cmd --list-all
解説
内部ネットワークから PostgreSQL に接続するには、OS 側のファイアウォールでも許可が必要になる。
まず現在の状態を確認する。
PostgreSQL サービスを許可する。
firewall-cmd --add-service=postgresql --permanent
firewall-cmd --reload
解説
この設定により、内部ネットワークから TCP 5432 への接続を許可する。
接続制御は firewalld だけでなく pg_hba.conf 側でも行っているため、二重で制御する形になる。
設定が反映されたことを確認する。
firewall-cmd --list-all
解説
services に postgresql が含まれていれば反映完了である。
PostgreSQL が TCP 5432 で待受していることを確認する。
ss -lntp | grep 5432
解説
listen_addresses を '*' に変更していれば、
0.0.0.0:5432 や [::]:5432 で待受していることが確認できる。
ここで待受していなければ、設定や再起動結果を見直す。
0.0.0.0:5432
[::]:5432
解説
IPv4 / IPv6 の両方で待受していれば問題ない。
ローカルから Zabbix ユーザーで接続できることを確認する。
psql -h 127.0.0.1 -U zabbix -d zabbix -W
解説
Zabbix Server 自身は通常この形で PostgreSQL に接続する。
そのため、まずはローカル接続が通ることを確認する。
接続確認後、psql を終了する。
\q
解説
psql プロンプトが表示されればローカル接続は成功である。
内部ネットワーク上の管理端末や別サーバーから接続できることを確認する。
psql -h 監視サーバーのIP -U zabbix -d zabbix -W
解説
この確認は、内部向け接続許可が正しく動いているかを見るために行う。
主な目的は、メンテナンス、手動接続確認、調査、チューニング時の利用である。
普段の運用で常時リモート接続するためではなく、必要なときに内部から扱える状態を作るための設定である。
Windows 端末から確認する場合の例
PS C:\> psql -h 監視サーバーのIP -U zabbix -d zabbix -W
解説
クライアント PC や管理端末からも接続確認しておくと、障害調査時の切り分けがしやすくなる。
psql のプロンプトが表示される
解説
接続できれば、内部ネットワーク向け設定も正常に反映されている。
この手順が完了すると、以下を満たしている状態になる。
listen_addresses が設定されている
pg_hba.conf にローカル接続と内部接続の許可が入っている
PostgreSQL が正常に再起動している
firewalld で PostgreSQL が許可されている
TCP 5432 で待受している
ローカル接続できる
内部ネットワークから接続できる
確認コマンド
grep listen_addresses /var/lib/pgsql/18/data/postgresql.conf
grep zabbix /var/lib/pgsql/18/data/pg_hba.conf
systemctl status postgresql-18
firewall-cmd --list-all
ss -lntp | grep 5432
psql -h 127.0.0.1 -U zabbix -d zabbix -W
次の手順では、
Zabbix Server が PostgreSQL を利用するための設定を行う。