通常の監査ログ機能では、loggerプロセスも専用ログファイルも1つだけであり、すべてのバックエンドプロセスを含めたインスタンス内のすべての監査ログの出力負荷が集中します。
スケーラブルな監査ログ機能では、下図のように専用ログファイルが複数に分散し、それらのファイルと1対1の関係で出力プロセス(loggerプロセス)も複数実行されます。いくつに分散させるかは、パラメータ設定によって変更することができます。
参考
専用ログファイルとloggerプロセスは1対1で紐づくため、loggerプロセスも専用ログファイルの数だけ動作します。以下のように、psあるいはProcess Explorerによって報告されるコマンドタイトル部分の末尾に番号が付与されています。プロセスの状態を監視するときに参考にしてください。
pgaudit logger 0 pgaudit logger 1 pgaudit logger 2
pgaudit設定ファイルのパラメータ
以下のパラメータを“outputセクション”に設定してください。
パラメータの詳細は“6.4 pgaudit設定ファイル”を参照してください。
“on”を設定します。デフォルトは“off”です。
pgaudit設定ファイルのloggerパラメータが“auditlog”(デフォルト)でなければ、“on”にしても無視されます。
loggerプロセスの数を設定します。“2”以上の数値を設定してください。
設定する値の見積りについては、“6.4 pgaudit設定ファイル”を参照してください。
本パラメータを設定することを強く推奨します。設定しなくてもスケーラブルな監査ログ機能は動作しますが、出力された監査ログを分析するときに、誤った分析を避けることが容易になります。“スケーラブルな監査ログ機能利用時の注意点”を参照してください。
[output] enable_parallel_logger = on parallel_loggers = 5 log_rotation_age = 1h
postgresql.confのパラメータ
max_worker_processesパラメータに設定されている値に、parallel_loggersに設定した値を加算します。これは、loggerプロセスがバックグラウンドワーカ―として動作するためです。
max_worker_processesに8が設定されていて、新たにparallel_loggersに3を設定するときは、以下のように設定します。
max_worker_processes = 11
専用ログファイルの格納先
専用ログファイルは以下のパスと名前で出力されます。
log_directoryパラメータとlog_filenameパラメータの詳細は、“6.4 pgaudit設定ファイル”を参照してください。
log_directoryパラメータの設定値/番号/番号-log_filenameパラメータの設定値
番号は0からparallel_loggersで指定した個数までの範囲の数値です。parallel_loggersが3ならば、0~2までの値になります。これらの複数のファイルの分析方法は、“6.9 SQLでの監査ログの分析”を参照してください。
parallel_loggers=3を設定した場合、以下のように専用ログファイルが生成されます。
pgaudit_log/0/0-pgaudit-2024-02-02_153000.log pgaudit_log/1/1-pgaudit-2024-02-02_153000.log pgaudit_log/2/2-pgaudit-2024-02-02_153000.log
複数のディスクを用いた運用が可能な場合は、以下のように専用ログファイルの格納先ディレクトリを別のディスクへのシンボリックリンクに設定することで、ディスクのI/O負荷を分散させることも可能です。
Windowsの場合にはシンボリックリンクではなくジャンクションを使用してください。
pgaudit_log/2を別のディスクに配置する場合
ln -s /other_disk/2 pgaudit_log/2
mklink /J pgaudit_log\2 E:\other_disk\2
状況に応じて、以下のようにシンボリックリンクを作成してください。スケーラブルな監査ログ機能のログ出力先に指定したディレクトリ(あるいはシンボリックリンク)が存在しなければ自動的にディレクトリが作成されます。ディレクトリが既に存在する場合はログ出力先として利用します。
初めてスケーラブルな監査ログ機能を使用する場合には、専用ログファイルの格納先ディレクトリが存在しません。そのときには、インスタンス停止後にシンボリックリンクを作成してください。
既にスケーラブルな監査ログ機能を使用している場合には、既に専用ログファイルの格納先ディレクトリが存在します。インスタンス停止後に、格納されている専用ログファイルを別の場所に移動させてから、格納先ディレクトリを削除してください。その後、削除したディレクトリと同名のシンボリックリンクを作成してください。