スキップしてコンテンツを表示

Amazon RDS for PostgreSQL DB インスタンスでクエリログを有効にする方法を教えてください。

所要時間2分
0

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

簡単な説明

ログに記録するクエリに応じて、log_statement または log_min_duration_statement を有効にします。詳細については、PostgreSQL のウェブサイトで「log_min_duration_statement」および「log_statement」を参照してください。Amazon RDS for PostgreSQL でログ記録を有効にするために、両方のパラメータを変更する必要はありません。

完了までに特定の時間を要しているクエリのログを確認するには、log_min_duration_statement パラメータをミリ秒単位のしきい値で変更します。たとえば、パラメータ値を 500 に設定した場合、Amazon RDS は完了までに 0.5 秒より長い時間を要するすべてのクエリを記録します。パラメータ値を -1 に設定すると、パラメータは無効になります。この場合、Amazon RDS は、完了までの時間に基づいたクエリの記録を行いません。パラメータ値を 0 に設定すると、Amazon RDS はすべてのクエリを記録します。

log_statement パラメータで次の値を設定すると、記録する SQL ステートメントを制御できます。

  • ddl: すべてのデータ定義言語 (DDL) ステートメント (例: CREATEALTERDROP) を記録します。
  • mod: すべての DDL および、データ変更言語 (DML) ステートメント (例: INSERTUPDATEDELETE) を記録します。
  • all: 実行時間に関係なく、すべてのクエリを記録します。

注: log_statement パラメータのデフォルト値は none です。

Amazon RDS は、log_min_duration_statement または log_statement に設定した値に関係なく、クエリを 1 回ログに書き込みます。ただし、ログパラメータを変更すると、DB インスタンスのボリュームは追加の容量を必要とする場合があります。ストレージの使用量を最小化するには、パラメータには大規模なログ記録を引き起こす値 (例: log_statementalllog_min_duration_statement0) を設定しないでください。

ボリュームストレージに空きがない場合、DB インスタンスを使用できなくなるため、rds.log_retention_period パラメータを変更し、不要なログを削除することをおすすめします。Amazon CloudWatch メトリクス FreeStorageSpace を参照し、ストレージ使用量を継続的に監視することも推奨されます。ストレージスペースの空きが枯渇してきた場合、ストレージ容量を増やし、DB インスタンスを常時使用できるようにすることも可能です。

解決策

カスタムパラメータグループを変更してログ記録を有効にする

次の手順を実行します。

  1. Amazon RDS コンソールを開きます。
  2. カスタムパラメータグループを作成し、DB インスタンスに関連付けます。
    注: [すぐに適用] を選択した場合、DB インスタンスは一時的に使用できなくなります。
  3. ナビゲーションペインで [パラメータグループ] を選択します。
  4. カスタムパラメータグループを選択します。
  5. [パラメータの編集] を選択します。
  6. [パラメーターをフィルター] フィールドに log_statement または log_min_duration_statement を入力します。
  7. 表示されたパラメータを選択し、変更します (例: log_statementddl に変更、log_min_duration_statement1000 (1 秒) に変更)。
  8. [変更を保存] を選択します。
    注: パラメータは動的であるため、パラメータの変更を反映するために DB インスタンスを再起動する必要はありません。

パラメータグループのステータスは Applying に変わります。パラメータグループの変更が完了すると、ステータスは In-Sync に変わります。

ログ記録が有効であることを確認する

次の手順を実行します。

  1. DB インスタンスに接続します
  2. 次のコマンドを実行します。
    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 秒よりも長いすべての DDL ステートメントとクエリが表示されます。

クエリログを確認する

次の手順を実行します。

  1. Amazon RDS コンソールを開きます。
  2. ナビゲーションペインで [データベース] を選択します。
  3. 該当する DB インスタンスを選択します。
  4. [ログとイベント] タブを選択します。
  5. [ログ] セクションで最新のログを選択し、[表示] を選択します。
    ログの例:
    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;

関連情報

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

コメントはありません

関連するコンテンツ