RDS for PostgreSQL のクエリログ設定の確認

RDS for PostgreSQL のクエリログの範囲と時間基準を定め、実際の適用状態を確認してください。

説明

RDS for PostgreSQL の log_statement と log_min_duration_statement が運用要件に合っていないと、実行されたクエリや遅いクエリの調査が難しくなる場合があります。ただし、クエリログを増やさなくてもログイン失敗やエラーなどの基本的なログは記録されるため、すべてのロギングが無効という意味ではありません。

log_statement は記録する文の種類を指定します。log_min_duration_statement の単位はミリ秒です。-1 はこの時間基準のロギングを無効にし、0 はすべての文の実行時間を記録します。正の値は、その時間以上かかった文を記録します。

想定される影響

  • 遅いクエリや不審なクエリを特定しにくくなる場合があります。
  • 性能問題の分析に時間がかかる場合があります。
  • セキュリティ調査に必要な実行クエリの履歴が不足する場合があります。

対処方法

  • 調査・監査要件と負荷を考慮して、log_statement の範囲と log_min_duration_statement の時間基準を定めてください。すべての環境で all と 1 が必要なわけではありません。
  • 正しいエンジンファミリーのパラメーターグループをインスタンスに関連付け、適用状態と実際のログを確認してください。CloudWatch Logs への配信が必要な場合は、ログのエクスポートも別途設定してください。
  • クエリログにはパスワードや機密データが含まれる可能性があります。アクセス権限と保存期間を制限し、収集量と費用を確認してください。

例

パラメーターグループ設定の抜粋で、インスタンスへの関連付けは省略しています。変更前の not_all と not_1 は有効な PostgreSQL の値ではなく、適用可能な設定として使用できません。変更後の 1 は 1 秒ではなく 1 ミリ秒であり、大量のログが発生する可能性があります。

変更前

hcl
resource "aws_db_parameter_group" "postgres_logging" {
  name   = "postgres-logging"
  family = "postgres14"

  parameter {
    name  = "log_statement"
    value = "not_all"
  }

  parameter {
    name  = "log_min_duration_statement"
    value = "not_1"
  }
}

変更後

hcl
resource "aws_db_parameter_group" "postgres_logging" {
  name   = "postgres-logging"
  family = "postgres14"

  parameter {
    name  = "log_statement"
    value = "all"
  }

  parameter {
    name  = "log_min_duration_statement"
    value = "1"
  }
}

補足:

  • 変更前: 両方のパラメーターに無効な値を指定しています。
  • 変更後: すべての文を記録し、1 ミリ秒以上かかった文の実行時間も記録する詳細な設定です。実際の要件と性能への影響を確認してから適用してください。

参考資料