Amazon RDS を使用して PostgreSQL のクエリロギングを有効にする方法を教えてください。

所要時間2分
0

PostgreSQL DB インスタンス用の Amazon Relational Database Service (Amazon RDS) のクエリロギングを有効にしたいと考えています。

簡単な説明

PostgreSQL でクエリロギングを有効にするには、カスタマイズされたパラメータグループの DB インスタンスに関連付けられている以下のパラメータを変更します。

ログパラメータを変更すると、DB インスタンスのボリュームにより多くのスペースが必要になる場合があります。ボリュームのストレージがいっぱいの場合、DB インスタンスは使用できません。rds.log_retention_period パラメータを変更して不要なログをクリーンアップするのがベストプラクティスです。また、Amazon CloudWatch メトリクス FreeStorageSpace を使用してストレージ消費量を継続的にモニタリングするのもベストプラクティスです。ストレージスペースがほぼいっぱいになったら、DB インスタンスをいつでも使用できるようにストレージスペースを増やすことができます。

解決策

ログに記録するクエリに応じて、log_statement または log_min_duration_statement をオンにします。ロギングを有効にするために両方のパラメータを変更する必要はありません。

log_min_duration_statement を変更して、しきい値をミリ秒単位で設定します。これにより、設定したパラメータ値よりも時間がかかるすべてのクエリをログに記録できます。たとえば、log_min_duration_statement の値を 500 に設定したとします。これが発生すると、Amazon RDS は完了までに 0.5 秒以上かかるすべてのクエリをログに記録します。このパラメータの値を 2000 に設定すると、Amazon RDS は完了までに 2 秒以上かかるすべてのクエリをログに記録します。パラメータ値を -1 に設定すると、パラメータはオフになります。Amazon RDS は、完了までの時間に基づいてクエリをログに記録しません。パラメータ値を 0 に設定すると、Amazon RDS はすべてのクエリをログに記録します。

注: log_min_duration_statement パラメータは、log_statement パラメータに依存したり、干渉したりしません。

log_statement を変更して、ログに記録される SQL ステートメントを制御します。デフォルト値は [なし] です。このパラメータの次の値を変更できます。

  • ddl は、CREATE、ALTER、DROP などのすべてのデータ定義言語 (DDL) ステートメントをログに記録します。
  • mod は、すべての DDL と、INSERT、UPDATE、DELETE などのデータ変更言語 (DML) ステートメントをログに記録します。
  • all は (実行時間に関係なく) すべてのクエリをログに記録します。

注: log_statementlog_min_duration_statement に設定した値に関係なく、クエリはログに 1 回書き込まれます。

PostgreSQL でクエリロギングを有効にする

PostgreSQL でクエリロギングを有効にするには、次の手順を実行します。

注: 次のパラメータ変更例では、1 秒以上かかるすべてのクエリがログに記録され、スキーマの変更もすべてログに記録されます。

  1. Amazon RDS コンソールを開き、ナビゲーションペインから [データベース] を選択します。
  2. クエリをログに記録する DB インスタンスを選択します。
  3. [設定] ビューを選択すると、DB インスタンスの詳細と DB インスタンスに関連するパラメータグループが表示されます。
    注: DB インスタンスを作成すると、DB インスタンスはデフォルトの DB パラメータグループに関連付けられます。このグループを変更することはできないため、カスタムパラメータグループを作成してパラメータグループを変更します。DB インスタンスのパラメータグループを (デフォルトからカスタムグループに) 変更する場合、DB インスタンスを再起動する必要があります。
  4. [インスタンス設定] ペインから [パラメータグループ] を選択し、変更するパラメータグループを選択します。
  5. [パラメータを編集] を選択します。
  6. [フィルターパラメータ] フィールドで、変更するパラメータを選択します。例:
    log_statement を入力し、値を ddl に変更します。
    log_min_duration_statement を入力し、値を 1000 に変更します。(この値はミリ秒単位で、1 秒に相当します)。
  7. [変更の保存] を選択します。
    **注:**これらのパラメータは動的です。DB インスタンスにカスタムパラメータグループがある場合、これらのパラメータを有効にするために DB インスタンスを再起動する必要はありません。

ロギングがオンになっていることを確認する

DB インスタンスに関連付けられたパラメータグループを保存すると、ステータスが「applying」に設定されます。DB インスタンスでパラメータグループを設定すると、ステータスは「**in-sync **」に設定されます。ロギングがオンになっていることを確認するには、DB インスタンスに接続します。この例では、ログにすべての DDL ステートメントと 1 秒以上かかるすべてのクエリが含まれていることを確認します。次に、次のようなコマンドを実行します。

CREATE TABLE article(article_code bigint, created_at timestamp with time zone, summary text, content text) ;
SELECT pg_sleep(2);
SELECT generate_series(1,10000000) as test;

クエリログを表示する

ログを表示するには、次の手順を実行します。

  1. Amazon RDS コンソールを開きます。

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

  3. DB インスタンスを選択し、[ログ] ビューを選択します。

  4. [ログとイベント] タブで最新のログを選択し、[ログを表示] を選択してログの内容を表示します。例:

2018-12-19 11:05:32 UTC:172.31.xx.yyy(35708):user@awspostgres:[27174]:LOG: statement: CREATE TABLE article(article_code bigint, created_at timestamp with time zone, summary text, content text) ;

2018-12-19 11:10:36 UTC:172.31.xx.yyy(35708):user@awspostgres:[27174]:LOG: duration: 2010.247 ms statement: select pg_sleep(2);

2018-12-19 11:11:25 UTC:172.31.xx.yyy(35708):user@awspostgres:[27174]:LOG: duration: 2159.838 ms statement: SELECT generate_series(1,10000000) as test;

: 以前のパラメータを、大量のログを生成する値に設定しないようにしてください。たとえば、log_statementall に設定したり、log_min_duration_statement0 に設定したりすると、大量のログ情報が生成されます。これはストレージの消費量に影響します。パラメータをこれらの値に設定する場合は、トラブルシューティングのために短時間だけ設定してください。トラブルシューティングを行うときは、ストレージ容量を常に注意深く監視してください。

関連情報

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

コメントはありません

関連するコンテンツ