本文へ移動

PostgreSQLのログ設定

pgBadger用にクエリーログ、log_line_prefix、ロケール、関連する統計を設定します

pgBadgerでレポートできるのは、PostgreSQLがログに書き出した情報だけです。まず解析可能なプレフィックスと、目的に応じたステートメントのログ出力方針を設定し、次に分析したい運用イベントを追加してください。

クエリーログの最小構成

クエリー本文と実行時間を記録するには、実行時間に基づくステートメントのログ出力を有効にします。

log_min_duration_statement = 0

0を指定すると、完了したすべてのステートメントが記録されます。負荷の高いサーバーでは、ログ量を抑えるためにミリ秒単位のしきい値を高く設定してください。本番環境で低いしきい値を有効にする前に、処理負荷とストレージ使用量の増加を測定してください。

クエリー本文が不要で、実行時間とクエリー数だけが必要な場合は、次を使用します。

log_min_duration_statement = -1
log_duration = on

最も遅いクエリーやクエリーの合計実行時間のレポートが必要な場合は、log_min_duration_statementを使用してください。

必須のプレフィックスフィールド

独自のlog_line_prefixには、次の両方を含める必要があります。

  • 時刻フィールド:%t、%m、または%n。
  • プロセスまたはセッションのフィールド:%pまたは%c。

最小限のstderr用プレフィックスは次のとおりです。

log_line_prefix = '%t [%p]: '

ユーザー、データベース、アプリケーション、クライアントも記録すると、より有用なプレフィックスになります。

log_line_prefix = '%t [%p]: user=%u,db=%d,app=%a,client=%h '

出力先がsyslogの場合、同等のプレフィックスでは、syslog自身が付与するタイムスタンプとプロセスのフィールドを省略します。

log_line_prefix = 'user=%u,db=%d,app=%a,client=%h '

次のキーの順序もサポートされています。

log_line_prefix = '%t [%p]: db=%d,user=%u,app=%a,client=%h '

プレフィックスがpgBadgerで認識される形式に該当しない場合は、正確な値を--prefixで渡してください。簡略化したり、postgresql.confと異なる値を入力し直したりしないでください。

レポートに含めたいイベントの種類を有効にします。

log_checkpoints = on
log_connections = on
log_disconnections = on
log_lock_waits = on
log_temp_files = 0
log_autovacuum_min_duration = 0
log_error_verbosity = default

これらの設定により、大量のログが出力される場合があります。特にlog_temp_files = 0とlog_autovacuum_min_duration = 0では、該当するすべてのイベントを記録します。ワークロードと保持容量に合わせて調整してください。

サーバーメッセージを英語にする

パーサーは英語のPostgreSQLサーバーメッセージを認識します。次のいずれかを使用してください。

lc_messages = 'en_US.UTF-8'

または:

lc_messages = 'C'

fr_FR.UTF-8などのロケールは、アップストリームのパーサーではサポートされていません。

ステートメント設定の競合を避ける

log_min_duration_statement、log_duration、log_statement = 'all'を同時に有効にしないでください。同じ実行が複数回記録されると、pgBadgerのカウンターが過大になり、ログ量も大幅に増加します。

目的推奨設定
クエリー本文と実行時間log_min_duration_statement = 0または目的に応じたしきい値
実行時間と件数のみlog_min_duration_statement = -1、log_duration = on
幅広いステートメント監査log_statementを独立したログ方針として扱い、pgBadgerの統計のために3つの設定をすべて組み合わせないでください

PostgreSQLの設定を再読み込みした後、大規模な解析を実行する前に実際のログを数件確認してください。タイムスタンプ、プロセス・セッション識別子、ユーザー、データベース、アプリケーション、クライアントの各フィールドが選択した形式と一致することを確認します。