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_statement と log_min_duration_statement に設定した値に関係なく、クエリはログに 1 回書き込まれます。
PostgreSQL でクエリロギングを有効にする
PostgreSQL でクエリロギングを有効にするには、次の手順を実行します:
**注:**次のパラメータ変更例では、1 秒以上かかるすべてのクエリがログに記録され、スキーマの変更もすべてログに記録されます。
- Amazon RDS コンソールを開き、ナビゲーションペインで [データベース] を選択します。
- クエリをログに記録する DB インスタンスを選択します。
- [設定] ビューを選択すると、DB インスタンスの詳細と DB インスタンスに関連するパラメータグループが表示されます。
注: DB インスタンスを作成すると、DB インスタンスはデフォルトの DB パラメータグループに関連付けられます。このグループを変更することはできないため、カスタムパラメータグループを作成してパラメータグループを変更します。DB インスタンスのパラメータグループを (デフォルトからカスタムグループに) 変更する場合、DB インスタンスを再起動する必要があります。
- [インスタンスの設定] ペインから [パラメータグループ] を選択し、変更するパラメータグループを選択します。
- [パラメータの編集] を選択します。
- [パラメータをフィルタリング] フィールドで、変更するパラメータを選択します。例:
log_statement を入力し、値を ddl に変更します。
log_min_duration_statement を入力し、値を 1000 に変更します。(この値はミリ秒単位で、1 秒に相当します)。
- [変更を保存] を選択します。
**注:**これらのパラメータは動的です。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_statement を all に設定したり、log_min_duration_statement を 0 に設定したりすると、大量のロギング情報が生成されます。これはストレージの消費量に影響します。パラメータをこれらの値に設定する場合は、トラブルシューティングのために短時間だけ設定してください。トラブルシューティングを行うときは、ストレージ容量を常に注意深く監視してください。
関連情報
RDS for PostgreSQL データベースログファイル