Amazon Relational Database Service
ユーザーガイド (API バージョン 2014-10-31)

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

RDS PostgreSQL では、クエリおよびエラーログが生成されます。auto-vacuum 情報と rds_admin アクションがエラーログに書き込まれます。PostgreSQL では、接続、切断、およびチェックポイントもエラーログに記録されます。詳細については、PostgreSQL のドキュメントの「エラー報告とログ記録」を参照してください。

DB インスタンスに関連付けられている DB パラメータグループの rds.log_retention_period パラメーターを使用して、システムログの保持期間を設定できます。このパラメータは分単位です。たとえば、1440 を設定すると、ログが 1 日間保持されます。デフォルト値は 4320 (3 日間) です。最大値は 10080 (7 日間) です。インスタンスには、保持するログファイルを格納するだけの十分な割り当てストレージが必要です。

DB インスタンスに関連付けられている DB パラメータグループの 2 つパラメーター log_statementlog_min_duration_statement を設定することで、PostgreSQL DB インスタンスのクエリログ記録を有効にすることができます。log_statement パラメーターでは、どの SQL ステートメントをログに記録するかを制御します。DB インスタンスで問題をデバッグするときに、このパラメーターを all に設定して、すべてのステートメントを記録することをお勧めします。デフォルト値は none です。または、この値を ddl に設定して、すべてのデータ定義言語 (DDL) ステートメント (CREATE、ALTER、DROP など) がログに記録されるようにすることもできます。さらに、mod に設定して、すべての DDL とデータ変更言語 (DML) ステートメント (INSERT、UPDATE、DELETE など) がログに記録されるようにすることもできます。

log_min_duration_statement パラメーターでは、ログに記録するステートメントの制限をミリ秒単位で設定します。このパラメーターで設定した時間より長く実行されたすべての SQL ステートメントがログに記録されます。このパラメーターはデフォルトでは無効になっており、マイナス 1 (-1) に設定されています。このパラメーターを有効にすると、最適化されていないクエリを見つけるために役立ちます。

初めて DB パラメータグループのパラメーターを設定し、そのパラメータグループを DB インスタンスに関連付ける場合は、「DB パラメータグループを使用する」を参照してください。

クエリログ記録の設定手順は以下のとおりです。

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

    2013-11-05 16:48:56 UTC::@:[2952]:LOG: received SIGHUP, reloading configuration files 2013-11-05 16:48:56 UTC::@:[2952]:LOG: parameter "log_min_duration_statement" changed to "1"

    クエリを実行すると、追加の情報が postgres.log ファイルに書き込まれます。以下の例に示しているのは、クエリの実行後にファイルに書き込まれた情報です。

    2013-11-05 16:41:07 UTC::@:[2955]:LOG: checkpoint starting: time 2013-11-05 16:41:07 UTC::@:[2955]:LOG: checkpoint complete: wrote 1 buffers (0.3%); 0 transaction log file(s) added, 0 removed, 1 recycled; write=0.000 s, sync=0.003 s, total=0.012 s; sync files=1, longest=0.003 s, average=0.003 s 2013-11-05 16:45:14 UTC:[local]:master@postgres:[8839]:LOG: statement: SELECT d.datname as "Name", pg_catalog.pg_get_userbyid(d.datdba) as "Owner", pg_catalog.pg_encoding_to_char(d.encoding) as "Encoding", d.datcollate as "Collate", d.datctype as "Ctype", pg_catalog.array_to_string(d.datacl, E'\n') AS "Access privileges" FROM pg_catalog.pg_database d ORDER BY 1; 2013-11-05 16:45:
  2. log_min_duration_statement パラメーターを設定します。以下の例に示しているのは、パラメーターを 1 に設定したときに postgres.log ファイルに書き込まれた情報です。

    2013-11-05 16:48:56 UTC::@:[2952]:LOG: received SIGHUP, reloading configuration files 2013-11-05 16:48:56 UTC::@:[2952]:LOG: parameter "log_min_duration_statement" changed to "1"

    クエリを実行して、その実行時間がこのパラメーターの値を超えていると、追加の情報が postgres.log ファイルに書き込まれます。以下の例に示しているのは、クエリの実行後にファイルに書き込まれた情報です。

    2013-11-05 16:51:10 UTC:[local]:master@postgres:[9193]:LOG: statement: SELECT c2.relname, i.indisprimary, i.indisunique, i.indisclustered, i.indisvalid, pg_catalog.pg_get_indexdef(i.indexrelid, 0, true), pg_catalog.pg_get_constraintdef(con.oid, true), contype, condeferrable, condeferred, c2.reltablespace FROM pg_catalog.pg_class c, pg_catalog.pg_class c2, pg_catalog.pg_index i LEFT JOIN pg_catalog.pg_constraint con ON (conrelid = i.indrelid AND conindid = i.indexrelid AND contype IN ('p','u','x')) WHERE c.oid = '1255' AND c.oid = i.indrelid AND i.indexrelid = c2.oid ORDER BY i.indisprimary DESC, i.indisunique DESC, c2.relname; 2013-11-05 16:51:10 UTC:[local]:master@postgres:[9193]:LOG: duration: 3.367 ms 2013-11-05 16:51:10 UTC:[local]:master@postgres:[9193]:LOG: statement: SELECT c.oid::pg_catalog.regclass FROM pg_catalog.pg_class c, pg_catalog.pg_inherits i WHERE c.oid=i.inhparent AND i.inhrelid = '1255' ORDER BY inhseqno; 2013-11-05 16:51:10 UTC:[local]:master@postgres:[9193]:LOG: duration: 1.002 ms 2013-11-05 16:51:10 UTC:[local]:master@postgres:[9193]:LOG: statement: SELECT c.oid::pg_catalog.regclass FROM pg_catalog.pg_class c, pg_catalog.pg_inherits i WHERE c.oid=i.inhrelid AND i.inhparent = '1255' ORDER BY c.oid::pg_catalog.regclass::pg_catalog.text; 2013-11-05 16:51:18 UTC:[local]:master@postgres:[9193]:LOG: statement: select proname from pg_proc; 2013-11-05 16:51:18 UTC:[local]:master@postgres:[9193]:LOG: duration: 3.469 ms

CloudWatch Logs への PostgreSQL ログの発行

Amazon RDS PostgreSQL DB インスタンスを設定して、ログデータを Amazon CloudWatch Logs のロググループに発行することができます。CloudWatch Logs を使用すると、ログデータのリアルタイム分析や、CloudWatch を使用したアラームの作成、メトリクスの表示を行うことができます。CloudWatch Logs を使用して、耐久性が高いストレージにログレコードを格納できます。

注記

CloudWatch Logs へのログファイルの発行は、PostgreSQL バージョン 9.6.6 以降および 10.4 以降でのみサポートされます。

以下は、CloudWatch Logs for Amazon RDS for PostgreSQL に発行できるログタイプです。

  • Postgresql ログ

  • アップグレードログ

設定が完了すると、Amazon RDS はログイベントを CloudWatch ロググループのログストリームに発行します。たとえば、PostgreSQL ログデータは /aws/rds/instance/my_instance/postgresql ロググループに保存されます。Amazon CloudWatch Logs を表示するには、https://console.aws.amazon.com/cloudwatch/ を開きます。

AWS マネジメントコンソール

コンソールを使用して CloudWatch Logs に PostgreSQL ログを発行するには

  1. https://console.aws.amazon.com/rds/ にある Amazon RDS コンソールを開きます。

  2. ナビゲーションペインで、[データベース] を選択します。

  3. 変更する DB インスタンスを選択してから、[変更] を選択します。

  4. [ログのエクスポート] セクションで、CloudWatch Logs に公開するログを選択します。

  5. [続行] を選択し、概要ページで [Modify DB Instance] (DB インスタンスの変更) を選択します。

AWS CLI

PostgreSQL ログは、AWS CLI を使用して発行することができます。以下のパラメータを使用して、modify-db-instance コマンドを呼び出せます。

  • --db-instance-identifier

  • --cloudwatch-logs-export-configuration

注記

--cloudwatch-logs-export-configuration オプションへの変更は常に DB インスタンスに即時適用されます。それで、--apply-immediately--no-apply-immediately オプションは効果がありません。

以下の AWS CLI コマンドを呼び出すことで PostgreSQL ログを発行することもできます。

以下のオプションでこの AWS CLI コマンドの 1 つを実行します。

  • --db-instance-identifier

  • --enable-cloudwatch-logs-exports

  • --db-instance-class

  • --engine

実行する AWS CLI コマンドに応じて、他のオプションが必要となる場合があります。

CloudWatch Logs にログを発行するようにインスタンスを変更する

次の例では、ログファイルが CloudWatch Logs に発行されるよう既存の PostgreSQL DB インスタンスを変更します。--cloudwatch-logs-export-configuration 値は JSON オブジェクトです。このオブジェクトのキーは EnableLogTypes であり、値は postgresqlupgrade を任意に組み合わせた文字列の配列です。

Linux、OS X、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 形式の文字列の配列です。この文字列は postgresqlupgrade の任意の組み合わせです。

Linux、OS X、Unix の場合:

aws rds create-db-instance \ --db-instance-identifier mydbinstance \ --enable-cloudwatch-logs-exports '["postgresql","upgrade"]' \ --db-instance-class db.m4.large \ --engine postgres

Windows の場合:

aws rds create-db-instance ^ --db-instance-identifier mydbinstance ^ --enable-cloudwatch-logs-exports '["postgresql","upgrade"]' ^ --db-instance-class db.m4.large ^ --engine postgres
RDS API

PostgreSQL ログは、RDS API を使用して発行することができます。以下のパラメータを使用して、ModifyDBInstance アクションを呼び出せます。

  • DBInstanceIdentifier

  • CloudwatchLogsExportConfiguration

注記

CloudwatchLogsExportConfiguration パラメータへの変更は常に DB インスタンスに即時適用されます。それで、ApplyImmediately パラメータは効果がありません。

以下の RDS API アクションを呼び出すことで PostgreSQL ログを発行することもできます。

以下のパラメータでこの RDS API アクションの 1 つを実行します。

  • DBInstanceIdentifier

  • EnableCloudwatchLogsExports

  • Engine

  • DBInstanceClass

実行するアクションに応じて、他のパラメータが必要となる場合があります。