Aurora PostgreSQL データベースログファイル - Amazon Aurora

Aurora PostgreSQL データベースログファイル

Aurora PostgreSQL は、データベースアクティビティをデフォルトの PostgreSQL ログファイルに記録します。オンプレミスの PostgreSQL DB インスタンスの場合、これらのメッセージは、log/postgresql.log にローカルに保存されますが、Aurora PostgreSQL DB クラスター、 の場合、ログファイルは Aurora クラスター で使用でき、その内容を表示またはダウンロードするには Amazon RDS コンソールを使用することが必要です。デフォルトのロギングレベルは、ログインの失敗、致命的なサーバーエラー、デッドロック、およびクエリエラーをキャプチャします。

ファイルベースのデータベースログの表示、ダウンロード、モニタリングの方法の詳細については、「Amazon Aurora ログファイルのモニタリング」を参照してください。PostgreSQL ログの詳細については、「Amazon RDS および Aurora PostgreSQL ログの操作: パート 1」および「Amazon RDS および Aurora PostgreSQL ログの操作: パート 2」を参照してください。

このトピックで説明した標準の PostgreSQL ログに加えて、Aurora PostgreSQL は PostgreSQL 監査エクステンション (pgAudit) もサポートしています。規制対象の業界や政府機関のほとんどは、法的要件に準拠するために、データに加えられた変更の監査ログまたは監査証跡を維持する必要があります。pgAudit のインストールおよび使用の詳細については、「pgAudit を使用してデータベースのアクティビティを記録する」を参照してください。

ロギング動作に影響するパラメータ

さまざまなパラメータを変更することで、Aurora PostgreSQL DB クラスター のロギング動作をカスタマイズできます。次のテーブルには、ログの保存期間、ログをローテーションするタイミング、ログを CSV (カンマ区切り値) 形式で出力するかどうか、STDERR に送信されるテキスト出力などに影響するパラメータがあります。変更可能なパラメータの設定を変更するには、Aurora PostgreSQL DB クラスターのカスタム DB クラスター パラメータグループを使用する必要があります。詳細については、「パラメータグループを使用する. 」を参照してください。テーブルに記載されているように、log_line_prefix は変更できません。

Parameter デフォルト 説明

log_destination

stderr

ログの出力形式を設定します。デフォルトは stderr ですが、設定に csvlog を追加してカンマ区切り値 (CSV) を指定することもできます。詳細については、「ログの送信先の設定 (stderr、csvlog)」を参照してください。

log_filename

postgresql.log.%Y-%m-%d-%H%M

ログファイル名のパターンを指定します。デフォルトに加えて、このパラメータはファイル名パターンの postgresql.log.%Y-%m-%dpostgresql.log.%Y-%m-%d-%H をサポートします。

log_line_prefix

%t:%r:%u@%d:[%p]:

時間 (%t)、リモート ホスト (%r)、ユーザー (%u)、データベース (%d)、およびプロセス ID (%p) を記録するために、stderr に書き込まれる各ログ行のプレフィックスを定義します。このパラメータは変更できません。

log_rotation_age

60

ログファイルが自動的にローテーションされるまでの分数。これは、1 分から 1440 分の間で変更できます。(詳しくは、「ログファイルのローテーションの設定」を参照してください。)

log_rotation_size

ログが自動的にローテーションされるサイズ (kB)。ログは log_rotation_age パラメータに基づいてローテーションされるため、デフォルトではこのパラメータは使用されません。詳細については、「ログファイルのローテーションの設定」を参照してください。

rds.log_retention_period

4320

指定した時間 (分) より古い PostgreSQL ログは削除されます。デフォルト値の 4,320 分では、3 日後にログファイルが削除されます。(詳しくは、「ログの保持期間の設定」を参照してください。)

アプリケーションの問題を特定するには、ログでクエリの失敗、ログインの失敗、デッドロック、および致命的なサーバーエラーを探すことができます。例えば、従来のアプリケーションを Oracle から Aurora PostgreSQL に変換したが、一部のクエリは正しく変換されなかったとします。これらの誤った形式のクエリは、ログにエラーメッセージを生成し、ログから問題を特定することができます。クエリログの詳細については、「Aurora PostgreSQL DB クラスターのクエリログ記録をオンにする」参照してください。

次のトピックでは、PostgreSQL ログの基本的な詳細を制御するさまざまなパラメータの設定方法について説明します。

ログの保持期間の設定

rds.log_retention_period パラメータは、Aurora PostgreSQL DB クラスター がログファイルを保持する期間を指定します。デフォルトの設定は 3 日 (4,320 分) ですが、1 日 (1,440 分) から 7 日 (10,080 分) までの任意の時間に設定できます。Aurora PostgreSQL DB クラスター に、一定期間ログファイルを保持するのに十分なストレージがあることを確認してください。

ログを定期的に Amazon CloudWatch Logs に公開することをお勧めします。これにより、ログが Aurora PostgreSQL DB クラスターから削除された後も、システムデータを表示して分析することができます。詳細については、「Amazon CloudWatch Logs への Aurora PostgreSQL ログの発行。CloudWatch での公開を設定した後、ログが CloudWatch Logs に公開されるまで、Aurora はログを削除しません。

Amazon Aurora は、DB インスタンスのストレージがしきい値に達すると、古い PostgreSQL ログを圧縮します。Aurora は、gzip 圧縮ユーティリティを使用してファイルを圧縮します。詳細については、gzip のウェブサイトを参照してください。

DB インスタンスのストレージが少なく、使用可能なすべてのログが圧縮されると、次のような警告が表示されます。

Warning: local storage for PostgreSQL log files is critically low for this Aurora PostgreSQL instance, and could lead to a database outage.

十分なストレージがない場合、Aurora は指定した保持期間が終了する前に圧縮済みの PostgreSQL ログを削除する可能性があります。その場合は、次のようなメッセージが表示されます。

The oldest PostgreSQL log files were deleted due to local storage constraints.

ログファイルのローテーションの設定

新しいログファイルは、デフォルトでは、Aurora によって 1 時間ごとに作成されます。このタイミングは、log_rotation_age パラメータによって制御されます。このパラメータのデフォルト値は 60 (分) ですが、1 分から 24 時間 (1,440 分) までの任意の時間に設定できます。ローテーションの時期になると、新しい個別のログファイルが作成されます。ファイルには、log_filename パラメータによって指定されたパターンに従って名前が付けられます。

ログファイルは、log_rotation_size パラメータで指定されたサイズに従ってローテーションすることもできます。このパラメータは、ログがサイズ (キロバイト単位) に達したときにローテーションされるように指定します。デフォルトの log_rotation_size は、Aurora PostgreSQL DB クラスターの場合は 100,000 KB (キロバイト) ですが、これを 50,000~1,000,000 キロバイトの任意の値に設定できます。

ログファイル名は、log_filename パラメータで指定されたファイル名のパターンに基づきます。このパラメータに使用できる設定は次のとおりです。

  • postgresql.log.%Y-%m-%d — ログファイル名のデフォルトフォーマット。年、月、日付をログファイルの名前に含めます。

  • postgresql.log.%Y-%m-%d-%H — ログファイル名形式に時間を含めます。

  • postgresql.log.%Y-%m-%d-%H%M — 時間:分をログファイル名形式に含めます。

log_rotation_age パラメータを 60 分未満に設定した場合は、log_filename パラメータを分形式に設定します。

詳細については、PostgreSQL ドキュメントの「log_rotation_age」と「log_rotation_size」を参照してください。

ログの送信先の設定 (stderrcsvlog)

デフォルトでは、Aurora PostgreSQL はスタンダードエラー (stderr) 形式でログを生成します。これは、log_destination パラメータのデフォルト設定です。各メッセージには、log_line_prefix パラメータで指定したパターンを使用してプレフィックスが付きます。(詳しくは、「log_line_prefix パラメータの概要」を参照してください。)

Aurora PostgreSQL は、csvlog フォーマットでログを生成することもできます。csvlog は、ログデータをカンマ区切り値 (CSV) データとして分析する場合に便利です。例えば、log_fdw 拡張機能を使用して外部テーブルとしてログを使用するとします。stderr ログファイルについて作成された外部テーブルには、ログイベントデータを含む 1 つの列が含まれます。log_destination パラメータに csvlog を追加すると、外部テーブルの複数の列の区切りを含む CSV 形式のログファイルが取得できます。これにより、ログをより簡単に分類して分析できます。

このパラメータに csvlog を指定する場合、stderr ファイル と csvlog ファイルの両方が生成されることに注意してください。ログのストレージと回転率に影響する rds.log_retention_period とその他の設定を考慮し、ログによって消費されるストレージに注意してください。stderrcsvlog を使用すると、ログで消費されるストレージが 2 倍以上になります。

log_destinationcsvlog を追加して、stderr だけに戻す場合は、パラメータをリセットする必要があります。そのためには、Amazon RDS コンソールを使用して、インスタンスのカスタム DB クラスター パラメータグループを開きます。log_destination パラメータを選択し、[Edit parameter] (パラメータの編集) を選択し、[Reset] (リセット) を選択します。

ログの設定の詳細については、「Amazon RDS および Aurora PostgreSQL ログの操作:パート 1」を参照してください。

log_line_prefix パラメータの概要

stderr ログ形式では、log_line_prefix パラメータで指定された詳細が、以下のように各ログメッセージにプレフィックスとして付加されます。

%t:%r:%u@%d:[%p]:t

この設定は変更できません。したがって、stderr に送信される各ログエントリには次の情報が含まれます。

  • %t — ログエントリの時刻。

  • %r - リモートホストのアドレス。

  • %u@%d — ユーザー名 @ データベース名。

  • [%p] — プロセス ID (使用可能な場合)。

Aurora PostgreSQL DB クラスターのクエリログ記録をオンにする

次のテーブルに示すパラメータの一部を設定することで、クエリ、ロック待ちのクエリ、チェックポイント、その他多くの詳細を含む、データベースアクティビティに関するより詳細な情報を収集できます。このトピックでは、クエリのログ記録に焦点を当てます。

Parameter デフォルト 説明

log_connections

成功した各接続をログに記録します。このパラメータを log_disconnections で使用して接続チャーンを検出する方法については、「管理する Aurora PostgreSQL 接続チャーンとプーリング 」を参照してください。

log_disconnections

各セッションの終了とその期間を記録します。このパラメータを log_connections で使用して接続チャーンを検出する方法については、「管理する Aurora PostgreSQL 接続チャーンとプーリング 」を参照してください。

log_checkpoints

1

各チェックポイントをログに記録します。

log_lock_waits

長期間にわたるロックの待機をログに記録します。デフォルトでは、これは設定されていません。

log_min_duration_sample

(ms) ステートメントのサンプリングに関する最小実行時間を設定します。この値を超えるとステートメントがサンプリングされてログに記録されます。サンプルサイズは、log_statement_sample_rate パラメータを使用して設定されます。

log_min_duration_statement

すべて

ログに記録するステートメントのタイプを設定します。

log_statement

ログに記録するステートメントのタイプを設定します。デフォルトでは、このパラメータは設定されていませんが、allddlmod に変更して、ログに記録する SQL ステートメントのタイプを指定できます。このパラメータの none 以外を指定する場合は、ログファイル内のパスワードが漏洩しないように、追加の手順も実行する必要があります。(詳しくは、「クエリのログ記録を使用する際のパスワード漏洩リスクの軽減」を参照してください。)

log_statement_sample_rate

log_min_duration_sample で指定された時間を超えるステートメントがログに記録される割合で、0.0 から 1.0 の間の浮動小数点値で表されます。

log_statement_stats

累積処理のパフォーマンスの統計情報をサーバーログに書き込みます。

ログ記録を使用してパフォーマンスの低いクエリを見つける

SQL ステートメントとクエリをログに記録すると、SQL ステートメントとクエリのログ記録に焦点を当てたトピックを見つけるのに役立ちます。この機能を有効にするには、このセクションで説明されているとおり、log_statement および log_min_duration パラメータの設定を変更します。Aurora PostgreSQL DB クラスター、 のクエリログ記録を有効にする前に、ログにパスワードが漏洩する可能性と、そのリスクを軽減する方法について知っておく必要があります。(詳しくは、「クエリのログ記録を使用する際のパスワード漏洩リスクの軽減」を参照してください。)

log_statement および log_min_duration のパラメータに関する参照情報は、以下を参照してください。

log_statement

このパラメータは、ログに送信する SQL ステートメントのタイプを指定します。デフォルト値は none です。このパラメータを allddl、または mod に変更する場合は、ログにパスワードが漏洩するリスクを軽減するために、必ずいくつかの推奨アクションを実行してください。(詳しくは、「クエリのログ記録を使用する際のパスワード漏洩リスクの軽減」を参照してください。)

すべて

すべてのステートメントを記録します。この設定はデバッグ目的での使用を推奨します。

ddl

CREATE、ALTER、DROP などのすべてのデータ定義言語 (DDL) ステートメントをログに記録します。

mod

データを変更する DDL ステートメントと、INSERT、UPDATE、DELETE などのデータ操作言語 (DML) ステートメントをすべてログに記録します。

none

SQL ステートメントはログに記録されません。ログにパスワードが漏れてしまうリスクを避けるため、この設定をお勧めします。

log_min_duration_statement

このパラメータ設定で指定されたミリ秒数より長く実行される SQL ステートメントはすべてログに記録されます。デフォルトでは、このパラメータは設定されていません。このパラメータを有効にすると、最適化されていないクエリを見つけるために役立ちます。

–1–2147483647

ステートメントがログに記録される実行時間のミリ秒 (ms) 数。

クエリのログ記録を設定するには

これらのステップは、Aurora PostgreSQL DB クラスターがカスタム DB クラスターパラメータグループを使用していることを前提としています。

  1. log_statement パラメータを all に設定します。以下の例に示しているのは、このパラメータ設定で postgresql.log ファイルに書き込まれる情報です。

    2022-10-05 22:05:52 UTC:52.95.4.1(11335):postgres@labdb:[3639]:LOG: statement: SELECT feedback, s.sentiment,s.confidence FROM support,aws_comprehend.detect_sentiment(feedback, 'en') s ORDER BY s.confidence DESC; 2022-10-05 22:05:52 UTC:52.95.4.1(11335):postgres@labdb:[3639]:LOG: QUERY STATISTICS 2022-10-05 22:05:52 UTC:52.95.4.1(11335):postgres@labdb:[3639]:DETAIL: ! system usage stats: ! 0.017355 s user, 0.000000 s system, 0.168593 s elapsed ! [0.025146 s user, 0.000000 s system total] ! 36644 kB max resident size ! 0/8 [0/8] filesystem blocks in/out ! 0/733 [0/1364] page faults/reclaims, 0 [0] swaps ! 0 [0] signals rcvd, 0/0 [0/0] messages rcvd/sent ! 19/0 [27/0] voluntary/involuntary context switches 2022-10-05 22:05:52 UTC:52.95.4.1(11335):postgres@labdb:[3639]:STATEMENT: SELECT feedback, s.sentiment,s.confidence FROM support,aws_comprehend.detect_sentiment(feedback, 'en') s ORDER BY s.confidence DESC; 2022-10-05 22:05:56 UTC:52.95.4.1(11335):postgres@labdb:[3639]:ERROR: syntax error at or near "ORDER" at character 1 2022-10-05 22:05:56 UTC:52.95.4.1(11335):postgres@labdb:[3639]:STATEMENT: ORDER BY s.confidence DESC; ----------------------- END OF LOG ----------------------
  2. log_min_duration_statement パラメータを設定します。以下の例に示しているのは、パラメータを postgresql.log に設定したときに 1 ファイルに書き込まれる情報です。

    log_min_duration_statement パラメータで指定された期間を超えるクエリはログに記録されます。例を以下に示します。Aurora PostgreSQL DB クラスター のログファイルは Amazon RDS コンソールで表示できます。

    2022-10-05 19:05:19 UTC:52.95.4.1(6461):postgres@labdb:[6144]:LOG: statement: DROP table comments; 2022-10-05 19:05:19 UTC:52.95.4.1(6461):postgres@labdb:[6144]:LOG: duration: 167.754 ms 2022-10-05 19:08:07 UTC::@:[355]:LOG: checkpoint starting: time 2022-10-05 19:08:08 UTC::@:[355]:LOG: checkpoint complete: wrote 11 buffers (0.0%); 0 WAL file(s) added, 0 removed, 0 recycled; write=1.013 s, sync=0.006 s, total=1.033 s; sync files=8, longest=0.004 s, average=0.001 s; distance=131028 kB, estimate=131028 kB ----------------------- END OF LOG ----------------------

クエリのログ記録を使用する際のパスワード漏洩リスクの軽減

パスワードが漏洩しないように、log_statementnone に設定したままにしておくことをお勧めします。log_statementallddl、または mod に設定した場合は、次の手順を 1 つ以上実行することをお勧めします。

  • クライアントの場合は、機密情報を暗号化します。詳細については、PostgreSQL ドキュメントの「暗号化オプション」を参照してください。CREATE および ALTER ステートメントの ENCRYPTED (およびUNENCRYPTED) オプションを使用してください。詳細については、PostgreSQL のドキュメントの「CREATE USER」を参照してください。

  • Aurora PostgreSQL DB クラスター では 、PostgreSQL 監査 (pgAudit) 拡張機能をセットアップして使用します。この拡張機能は、ログに送信された CREATE および ALTER ステートメントの機密情報を編集します。(詳しくは、「pgAudit を使用してデータベースのアクティビティを記録する」を参照してください。)

  • CloudWatch ログへのアクセスを制限します。

  • IAM など、より強力な認証メカニズムを使用してください。