RDS for PostgreSQL データベースログファイル
RDS for PostgreSQL では、データベースアクティビティをデフォルトの PostgreSQL ログファイルに記録します。オンプレミスの PostgreSQL DB インスタンスの場合、これらのメッセージは log/postgresql.log
にローカルに保存されます。、RDS for PostgreSQL DB インスタンスの場合、ログファイルは Amazon RDS インスタンスにあります。また、Amazon RDS コンソールを使用して、コンテンツを表示またはダウンロードする必要があります。デフォルトのロギングレベルは、ログインの失敗、致命的なサーバーエラー、デッドロック、およびクエリエラーをキャプチャします。
ファイルベースのデータベースログの表示、ダウンロード、モニタリングの方法の詳細については、「Amazon RDS ログファイルのモニタリング」を参照してください。PostgreSQL ログの詳細については、「Amazon RDS および Aurora PostgreSQL ログの操作: パート 1
このトピックで説明した標準の PostgreSQL ログに加えて、 RDS for PostgreSQL は PostgreSQL 監査エクステンション (pgAudit
) もサポートしています。規制対象の業界や政府機関のほとんどは、法的要件に準拠するために、データに加えられた変更の監査ログまたは監査証跡を維持する必要があります。pgAudit のインストールおよび使用の詳細については、「pgAudit を使用してデータベースのアクティビティを記録する」を参照してください。
トピック
ロギング動作に影響するパラメータ
さまざまなパラメータを変更することで、 RDS for PostgreSQL DB インスタンスのロギング動作をカスタマイズできます。次のテーブルには、ログの保存期間、ログをローテーションするタイミング、ログを CSV (カンマ区切り値) 形式で出力するかどうかなどに影響するパラメータがあります。他の設定の中でも、STDERR に送信されたテキスト出力を確認できます。変更可能なパラメータの設定を変更するには、のカスタム DB パラメータグループを使用します。RDS for PostgreSQL インスタンス。詳細については、「DB インスタンスでの DB パラメータグループの使用」を参照してください。テーブルに記載されているように、log_line_prefix
は変更できません。
パラメータ | デフォルト | [Description] (説明) |
---|---|---|
log_destination | stderr | ログの出力形式を設定します。デフォルトは |
log_filename |
postgresql.log.%Y-%m-%d-%H |
ログファイル名のパターンを指定します。デフォルトに加えて、このパラメータはファイル名パターンの |
log_line_prefix | %t:%r:%u@%d:[%p]: | 時間 (%t)、リモート ホスト (%r)、ユーザー (%u)、データベース (%d)、およびプロセス ID (%p) を記録するために、 |
log_rotation_age | 60 | ログファイルが自動的にローテーションされるまでの分数。この値は、1~1,440 分の間で変更できます。詳細については、「ログファイルのローテーションの設定」を参照してください。 |
log_rotation_size | – | ログが自動的にローテーションされるサイズ (kB)。ログは |
rds.log_retention_period | 4320 | 指定した時間 (分) より古い PostgreSQL ログは削除されます。デフォルト値の 4,320 分では、3 日後にログファイルが削除されます。詳細については、「ログの保持期間の設定」を参照してください。 |
アプリケーションの問題を特定するには、ログでクエリの失敗、ログインの失敗、デッドロック、および致命的なサーバーエラーを探すことができます。例えば、従来のアプリケーションを Oracle から Amazon RDS PostgreSQL に変換したが、一部のクエリは正しく変換されなかったとします。これらの誤った形式のクエリは、ログにエラーメッセージを生成し、ログから問題を特定することができます。クエリログの詳細については、「RDS for PostgreSQL DB インスタンスのクエリログ記録をオンにする」参照してください。
次のトピックでは、PostgreSQL ログの基本的な詳細を制御するさまざまなパラメータの設定方法について説明します。
ログの保持期間の設定
rds.log_retention_period
パラメータは、 RDS for PostgreSQL DB インスタンスがログファイルを保持する期間を指定します。デフォルトの設定は 3 日 (4,320 分) ですが、この値を 1 日 (1,440 分) から 7 日 (10,080 分) までの任意の時間に設定できます。 RDS for PostgreSQL DB インスタンスに、一定期間ログファイルを保持するのに十分なストレージがあることを確認してください。
ログを定期的に Amazon CloudWatch Logs に公開することをお勧めします。これにより、ログが から削除された後も、システムデータを表示して分析できます。RDS for PostgreSQL DB インスタンス。詳細については、「Amazon CloudWatch Logs への PostgreSQL ログの発行」を参照してください。
ログファイルのローテーションの設定
Amazon RDS は、デフォルトで 1 時間ごとに新しいログファイルを作成します。このタイミングは、log_rotation_age
パラメータによって制御されます。このパラメータのデフォルト値は 60 (分) ですが、1 分から 24 時間 (1,440 分) までの任意の時間に設定できます。ローテーションの時期になると、新しい個別のログファイルが作成されます。ファイルには、log_filename
パラメータによって指定されたパターンに従って名前が付けられます。
ログファイルは、log_rotation_size
パラメータで指定されたサイズに従ってローテーションすることもできます。このパラメータは、ログが指定されたサイズ (キロバイト単位) に達したときにローテーションされるように指定します。RDS for PostgreSQL DB インスタンスの場合、log_rotation_size
は未設定です。つまり、値が指定されていません。ただし、このパラメータは 0~2,097,151 KB (キロバイト) の範囲で設定できます。
ログファイル名は、log_filename
パラメータで指定されたファイル名のパターンに基づきます。このパラメータに使用できる設定は次のとおりです。
postgresql.log.%Y-%m-%d
— ログファイル名のデフォルトフォーマット。年、月、日をログファイルの名前に含めます。postgresql.log.%Y-%m-%d-%H
— ログファイル名形式に時間を含めます。
詳細については、PostgreSQL ドキュメントの「log_rotation_age
log_rotation_size
ログの送信先の設定 (stderr
、csvlog
)
デフォルトでは、 Amazon RDS PostgreSQL はスタンダードエラー (stderr) 形式でログを生成します。この形式は、log_destination
パラメータのデフォルト設定です。各メッセージには、log_line_prefix
パラメータで指定したパターンを使用してプレフィックスが付きます。詳細については、「log_line_prefix パラメータの概要」を参照してください。
RDS for PostgreSQL は、csvlog
フォーマットでログを生成することもできます。csvlog
は、ログデータをカンマ区切り値 (CSV) データとして分析する場合に便利です。例えば、log_fdw
拡張機能を使用して外部テーブルとしてログを使用するとします。stderr
ログファイルについて作成された外部テーブルには、ログイベントデータを含む 1 つの列が含まれます。log_destination
パラメータに csvlog
を追加すると、外部テーブルの複数の列の区切りを含む CSV 形式のログファイルが取得できます。ログをより簡単に分類して分析できるようになりました。log_fdw
を csvlog
を指定して使用する方法については、「SQL を使用した DB ログのアクセスのための log_fdw 拡張機能の使用」を参照してください。
このパラメータに csvlog
を指定する場合、stderr
ファイル と csvlog
ファイルの両方が生成されることに注意してください。ログのストレージと回転率に影響する rds.log_retention_period
とその他の設定を考慮し、ログによって消費されるストレージに注意してください。stderr
と csvlog
を使用すると、ログで消費されるストレージが 2 倍以上になります。
log_destination
に csvlog
を追加して、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 (使用可能な場合)。
RDS for PostgreSQL DB インスタンスのクエリログ記録をオンにする
次のテーブルに示すパラメータの一部を設定することで、クエリ、ロック待ちのクエリ、チェックポイント、その他多くの詳細を含む、データベースアクティビティに関するより詳細な情報を収集できます。このトピックでは、クエリのログ記録に焦点を当てます。
パラメータ | デフォルト | [Description] (説明) |
---|---|---|
log_connections | – | 成功した各接続をログに記録します。 |
log_disconnections | – | 各セッションの終了とその期間を記録します。 |
log_checkpoints | 1 | 各チェックポイントをログに記録します。 |
log_lock_waits | – | 長期間にわたるロックの待機をログに記録します。デフォルトでは、このパラメータは設定されていません。 |
log_min_duration_sample | – | (ms) ステートメントのサンプリングに関する最小実行時間を設定します。この値を超えるとステートメントがサンプリングされてログに記録されます。サンプルサイズは、log_statement_sample_rate パラメータを使用して設定されます。 |
log_min_duration_statement | – | 少なくとも指定された時間以上実行された SQL ステートメントはすべてログに記録されます。デフォルトでは、このパラメータは設定されていません。このパラメータを有効にすると、最適化されていないクエリを見つけるために役立ちます。 |
log_statement | – | ログに記録するステートメントのタイプを設定します。デフォルトでは、このパラメータは設定されていませんが、 |
log_statement_sample_rate | – |
|
log_statement_stats | – | 累積処理のパフォーマンスの統計情報をサーバーログに書き込みます。 |
ログ記録を使用してパフォーマンスの低いクエリを見つける
SQL ステートメントとクエリをログに記録すると、パフォーマンスの悪いクエリを見つけるのに役立ちます。この機能を有効にするには、このセクションで説明されているとおり、log_statement
および log_min_duration
パラメータの設定を変更します。 RDS for PostgreSQL DB インスタンス、のクエリログ記録を有効にする前に、ログにパスワードが漏洩する可能性と、そのリスクを軽減する方法について知っておく必要があります。詳細については、「クエリのログ記録を使用する際のパスワード漏洩リスクの軽減」を参照してください。
log_statement
および log_min_duration
のパラメータに関する参照情報は、以下を参照してください。
log_statement
このパラメータは、ログに送信する SQL ステートメントのタイプを指定します。デフォルト値は none
です。このパラメータを all
、ddl
、または mod
に変更する場合は、ログにパスワードが漏洩するリスクを軽減するために、必ず推奨アクションを適用してください。詳細については、「クエリのログ記録を使用する際のパスワード漏洩リスクの軽減」を参照してください。
- すべて
-
すべてのステートメントを記録します。この設定はデバッグ目的での使用を推奨します。
- ddl
-
CREATE、ALTER、DROP などのすべてのデータ定義言語 (DDL) ステートメントをログに記録します。
- mod
-
データを変更する DDL ステートメントと、INSERT、UPDATE、DELETE などのデータ操作言語 (DML) ステートメントをすべてログに記録します。
- なし
-
SQL ステートメントはログに記録されません。ログにパスワードが漏れてしまうリスクを避けるため、この設定をお勧めします。
log_min_duration_statement
少なくとも指定された時間以上実行された SQL ステートメントはすべてログに記録されます。デフォルトでは、このパラメータは設定されていません。このパラメータを有効にすると、最適化されていないクエリを見つけるために役立ちます。
- –1–2147483647
-
ステートメントがログに記録される実行時間のミリ秒 (ms) 数。
クエリのログ記録を設定するには
これらのステップは、RDS for PostgreSQL DB インスタンスはカスタム DB パラメータグループを使用します。
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 ----------------------
log_min_duration_statement
パラメータを設定します。以下の例に示しているのは、パラメータをpostgresql.log
に設定したときに1
ファイルに書き込まれる情報です。log_min_duration_statement
パラメータで指定された期間を超えるクエリはログに記録されます。例を以下に示します。 RDS for 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_statement
を none
に設定したままにしておくことをお勧めします。log_statement
を all
、ddl
、または mod
に設定した場合は、次の手順を 1 つ以上実行することをお勧めします。
-
クライアントの場合は、機密情報を暗号化します。詳細については、PostgreSQL ドキュメントの「暗号化オプション
」を参照してください。 CREATE
およびALTER
ステートメントのENCRYPTED
(およびUNENCRYPTED
) オプションを使用してください。詳細については、PostgreSQL のドキュメントの「CREATE USER」を参照してください。 RDS for PostgreSQL DB インスタンスでは 、PostgreSQL 監査 (pgAudit) 拡張機能をセットアップして使用します。この拡張機能は、ログに送信された CREATE および ALTER ステートメントの機密情報を編集します。詳細については、「pgAudit を使用してデータベースのアクティビティを記録する」を参照してください。
-
CloudWatch ログへのアクセスを制限します。
-
IAM など、より強力な認証メカニズムを使用してください。
Amazon CloudWatch Logs への PostgreSQL ログの発行
PostgreSQL ログレコードを高い耐久性の高いのストレージに保存するには、Amazon CloudWatch Logs を使用できます。CloudWatch Logs では、ログデータのリアルタイム分析を実行したり、CloudWatch を使用してメトリクスを表示したり、アラームを作成したりすることもできます。例えば、log_statement
を ddl
に設定した場合、DDL ステートメントが実行されるたびに警告するアラームを設定できます。RDS for PostgreSQL DB インスタンスの作成プロセス中に PostgreSQL が CloudWatch Logs のログをアップロードするように選択できます。その時点でログをアップロードしないことを選択した場合は、後でインスタンスを変更してその時点からログのアップロードを開始できます。つまり、既存のログはアップロードされません。変更した RDS for PostgreSQL DB インスタンスで作成された新しいログのみがアップロードされます。
現在の PostgreSQL バージョンで利用可能なすべての RDS は、CloudWatch Logs へのログファイルの発行をサポートしています。詳細については、「Amazon RDS for PostgreSQL リリースノート」の「Amazon RDS for PostgreSQL の更新」を参照してください。
CloudWatch Logs を操作するには、ログデータをロググループに発行するように PostgreSQL DB インスタンス用 RDS を設定します。
RDS for PostgreSQL では、次のログの種類を CloudWatch Logs に発行できます。
-
Postgresql ログ
-
アップグレードログ
設定が完了すると、Amazon RDS はログイベントを CloudWatch ロググループのログストリーミングに発行します。例えば、PostgreSQL ログデータは /aws/rds/instance/
ロググループに保存されます。ログを表示するには、https://console.aws.amazon.com/cloudwatch/my_instance
/postgresql
コンソールを使用して CloudWatch Logs に PostgreSQL ログを発行するには
Amazon RDS コンソール (https://console.aws.amazon.com/rds/
) を開きます。 -
ナビゲーションペインで、[データベース] を選択します。
-
変更する DB インスタンスを選択してから、[変更] を選択します。
-
[ログのエクスポート] セクションで、CloudWatch Logs に公開するログを選択します。
[ログのエクスポート] セクションは、CloudWatch Logs への発行をサポートしている PostgreSQL バージョンでのみ使用できます。
-
[続行] を選択し、概要ページで [Modify DB Instance] (DB インスタンスの変更) を選択します。
PostgreSQL ログは、AWS CLI を使用して発行することができます。以下のパラメータを使用して、modify-db-instance
コマンドを呼び出せます。
-
--db-instance-identifier
-
--cloudwatch-logs-export-configuration
注記
--cloudwatch-logs-export-configuration
オプションへの変更は常に DB インスタンスに即時適用されます。それで、--apply-immediately
と --no-apply-immediately
オプションは効果がありません。
以下の CLI コマンドを呼び出すことで PostgreSQL ログを発行することもできます。
以下のオプションを使用して、これらの CLI コマンドの 1 つを実行します。
-
--db-instance-identifier
-
--enable-cloudwatch-logs-exports
-
--db-instance-class
-
--engine
実行する CLI コマンドに応じて、他のオプションが必要となる場合があります。
例 CloudWatch Logs にログを発行するようにインスタンスを変更する
次の例では、ログファイルが CloudWatch Logs に発行されるよう既存の PostgreSQL DB インスタンスを変更します。--cloudwatch-logs-export-configuration
値は JSON オブジェクトです。このオブジェクトのキーは EnableLogTypes
であり、値は postgresql
と upgrade
を任意に組み合わせた文字列の配列です。
Linux、macOS、Unix の場合:
aws rds modify-db-instance \ --db-instance-identifier
mydbinstance
\ --cloudwatch-logs-export-configuration '{"EnableLogTypes":["postgresql", "upgrade"]}'
Windows の場合:
aws rds modify-db-instance ^ --db-instance-identifier
mydbinstance
^ --cloudwatch-logs-export-configuration '{"EnableLogTypes":["postgresql","upgrade"]}'
例 CloudWatch Logs にログを発行するようにインスタンスを作成する
次の例では、PostgreSQL DB インスタンスを作成してログファイルを CloudWatch Logs に発行します。--enable-cloudwatch-logs-exports
値は、JSON 形式の文字列の配列です。この文字列は postgresql
と upgrade
の任意の組み合わせです。
Linux、macOS、Unix の場合:
aws rds create-db-instance \ --db-instance-identifier
mydbinstance
\ --enable-cloudwatch-logs-exports '["postgresql","upgrade"]' \ --db-instance-classdb.m4.large
\ --enginepostgres
Windows の場合:
aws rds create-db-instance ^ --db-instance-identifier
mydbinstance
^ --enable-cloudwatch-logs-exports '["postgresql","upgrade"]' ^ --db-instance-classdb.m4.large
^ --enginepostgres
PostgreSQL ログは、RDS API を使用して発行することができます。以下のパラメータを使用して、ModifyDBInstance
アクションを呼び出せます。
-
DBInstanceIdentifier
-
CloudwatchLogsExportConfiguration
注記
CloudwatchLogsExportConfiguration
パラメータへの変更は常に DB インスタンスに即時適用されます。それで、ApplyImmediately
パラメータは効果がありません。
以下の RDS API オペレーションを呼び出すことで PostgreSQL ログを発行することもできます。
以下のパラメータでこの RDS API オペレーションの 1 つを実行します。
-
DBInstanceIdentifier
-
EnableCloudwatchLogsExports
-
Engine
-
DBInstanceClass
実行するオペレーションに応じて、他のパラメータが必要となる場合があります。