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밀리초 이상인 문장의 시간도 기록하는 상세한 설정입니다. 실제 요구와 성능 영향을 검토한 뒤 적용하세요.

참조