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