1.そもそもrsyslogとは
Unix系OSのシステムのログを記録するシステムのこと
2.rsyslogの具体的な設定方法
さっそくrsyslogのログの具体的な設定方法をご紹介します。
PostgreSQLのログを/var/log/pg_log/postgresql.logに出力させるために、rsyslogを使う方法を紹介します。
OS:Redhat8.10
PostgreSQL:Postgresql-16
----PostgreSQLの設定変更----
postgresql.confファイルでPostgreSQLのログをsyslogに出力するように設定します。
・postgresql.confを開きます
sudo vi /var/lib/pgsql/16/data/postgresql.conf
・以下の設定を確認または追加します
logging_collector = off # ログコレクタを無効にする
log_destination = 'syslog' # syslogへの出力を有効にする
syslog_facility = 'LOCAL0' # syslogのファシリティを指定
syslog_ident = 'postgresql' # syslogの識別子を設定
これにより、PostgreSQLはsyslogを通してログを出力します。
----rsyslogの設定----
次に、rsyslogでLOCAL0のログを特定のファイルに出力する設定を行います。
・rsyslogの設定ファイルを編集します
sudo vi /etc/rsyslog.d/postgresql.conf
・以下の内容を追加します
if $programname == 'postgresql' then /var/log/pg_log/postgresql.log
& stop
これにより、PostgreSQLのログは/var/log/pg_log/postgresql.logに出力されます。
----ログディレクトリの作成と権限設定---
・ログの出力先ディレクトリが存在しない場合は作成します
sudo mkdir -p /var/log/pg_log
・適切な権限を設定します
sudo chown postgres:postgres /var/log/pg_log
sudo chmod 755 /var/log/pg_log
----rsyslogの再起動----
設定を有効にするためにrsyslogを再起動します
sudo systemctl restart rsyslog
----PostgreSQLのリロードまたは再起動----
postgresql.confの変更を反映させるために、PostgreSQLをリロードまたは再起動します
・リロード
sudo systemctl reload postgresql-16.service
・再起動(必要に応じて)
sudo systemctl restart postgresql-16.service
これで、PostgreSQLのログが/var/log/pg_log/postgresql.logに出力されるようになります。
3.PostgreSQLのログが正しく出力されているかの確認
上記設定を行ったログ配下に、PostgreSQLのログが正しく出力されているかを確認します。
----PostgreSQLのログを生成するアクションを実行----
ログファイルが生成されるか確認するためには、PostgreSQLで何らかのアクションを実行してログエントリを生成する必要があります。例えば、無効なクエリを実行してエラーを発生させることでログを確認できます。
PostgreSQLに接続して、無効なクエリを実行します。この操作により、エラーログが生成されるはずです。
psql -U postgres
接続後、次のような無効なクエリを実行します
SELECT * FROM non_existing_table;
このクエリが失敗すると、エラーログが生成されます。
----ログファイルの存在確認----
指定したディレクトリにログファイルが作成されているかを確認します。例えば、/var/log/pg_log/postgresql.logにログが出力される場合、次のコマンドを使用して確認できます。
ls -l /var/log/pg_log/
このコマンドで、postgresql.logファイルが存在するかをチェックします。
----ログファイルの内容確認----
ログファイルが存在する場合、その内容を確認します。新しいエントリが追加されているかをリアルタイムで確認するためには、tailコマンドを使用します。
tail -f /var/log/pg_log/postgresql.log
このコマンドは、ログファイルに新しいエントリが追加されるたびに表示します。これにより、PostgreSQLのログが正しく出力されているかを確認できます。
----ログファイルの内容を静的に確認----
tail -fコマンドを使用せずに、ログファイルの内容を静的に確認することもできます。例えば、ログファイルの最初の部分を確認するには、次のコマンドを使用します。
head -n 20 /var/log/pg_log/postgresql.log
ファイル全体を確認するには次のコマンドを使用します
cat /var/log/pg_log/postgresql.log
----rsyslogのログ確認----
rsyslogがログを正しく処理しているかを確認するために、rsyslogのログも確認できます。rsyslogのログファイルは通常/var/log/syslogや/var/log/messagesにあります。
tail -f /var/log/syslog