AWS re:Postを使用することにより、以下に同意したことになります 利用規約

Amazon RDS for PostgreSQL を使用してクエリのログ記録を有効化するにはどうすればよいですか?

所要時間2分
0

Amazon Relational Database Service (Amazon RDS) for PostgreSQL DB のインスタンスのクエリのログ記録を有効化するにはどうすればよいですか?

簡単な説明

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

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

解決方法

ログに記録したいクエリに応じて、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 ステートメントがログに記録されるかを制御します。デフォルト値は [none] (なし) になっており、パラメータのこの値を以下のように変更できます。

  • [ddl] は、CREATE、ALTER、および DROP などのすべてのデータ定義言語 (DDL) ステートメントをログに記録します。
  • mod は、INSERT、UPDATE、および DELETE などのすべての DDL とデータ操作言語 (DML) ステートメントをログに記録します。
  • all は、実行時間に関わらず、すべてクエリをログに記録します。

注意: log_statement および log_min_duration_statement に設定した値に関わらず、クエリがログに 2 回書き込まれることはありません。

PostreSQL でクエリロギングを有効化する

PostgreSQL でクエリロギングを有効化するには、以下の手順を実行してください。

注: 以下のパラメータ変更例は、時間が 1 秒を超えるすべてのクエリ (クエリタイプは問わない) と、すべてのスキーマ変更 (完了時間を問わず、DDL ステートメント) をログに記録します。

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

ロギングが有効化されていることを確認する

DB インスタンスに関連付けられているパラメータグループを保存したら、ステータスが適用中になります。DB インスタンスにパラメータグループが設定されると、ステータスは in-sync になります。DB インスタンスに接続し、ログ記録が有効になっていることを確認します (この例では、1 秒以上かかるすべての DDL ステートメントとすべてのクエリを参照) 。その後、以下のようなコマンドを実行します。

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 コンソールを開き、ナビゲーションペインから [Databases] (データベース) を選択します。
  2. DB インスタンスを選択してから、[Logs] (ログ) ビューを選択します。
  3. [ログとイベント] タブで最新のログを選択し、[ログを表示] を選択してログの内容を確認します。以下はその例です。
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 データベースのログファイル

コメントはありません