RDS for PostgreSQL DB 인스턴스에 쿼리 로깅을 활성화합니다. - Amazon Relational Database Service

RDS for PostgreSQL DB 인스턴스에 쿼리 로깅을 활성화합니다.

다음 테이블에 나열된 파라미터 중 일부를 설정하여 쿼리, 잠금을 기다리는 쿼리, 체크포인트 및 기타 여러 세부 정보를 포함하여 데이터베이스 활동에 대한 보다 자세한 정보를 수집할 수 있습니다. 이 주제에서는 쿼리 로깅에 중점을 둡니다.

파라미터 기본값 설명

log_connections

성공한 연결을 모두 기록합니다.

log_disconnections

각 세션의 끝과 기간을 로깅합니다.

log_checkpoints

1

각 체크포인트를 기록합니다.

log_lock_waits

오랜 잠금 대기 시간을 기록합니다. 이 파라미터는 기본적으로 설정되어 있지 않습니다.

log_min_duration_sample

(밀리초) 문 샘플이 로그되는 최소 실행 시간을 설정합니다. 샘플 크기는 log_statement_sample_rate 파라미터를 사용하여 설정합니다.

log_min_duration_statement

지정된 시간 이상 실행되는 모든 SQL 문은 로깅됩니다. 이 파라미터는 기본적으로 설정되어 있지 않습니다. 이 파라미터를 활성화하면 최적화되지 않은 쿼리를 찾는 데 도움이 될 수 있습니다.

log_statement

기록할 문 유형을 설정합니다. 기본적으로 이 파라미터는 설정되어 있지 않지만 all, ddl 또는 mod로 변경하여 로깅하려는 SQL 문 유형을 지정할 수 있습니다. 이 파라미터에 none 이외의 다른 것을 지정하면 추가 단계를 수행하여 로그 파일에 암호가 노출되지 않도록 해야 합니다. 자세한 내용은 쿼리 로깅 사용 시 암호 노출 위험 완화 단원을 참조하십시오.

log_statement_sample_rate

로깅되도록 log_min_duration_sample에 지정된 시간을 초과하는 문의 비율로, 0.0에서 1.0 사이의 부동 소수점 값으로 표시됩니다.

log_statement_stats

누적 성능 통계를 서버 로그에 기록합니다.

로깅을 사용하여 성능이 느린 쿼리 찾기

SQL 문 및 쿼리를 로깅하여 성능이 느린 쿼리를 찾을 수 있습니다. 이 섹션에 설명된 대로 log_statementlog_min_duration 파라미터 설정을 수정하여 이 기능을 활성화합니다. RDS for PostgreSQL DB 인스턴스S에 대한 쿼리 로깅을 활성화하기 전에 로그에서 암호가 노출될 수 있는 사항과 위험을 완화하는 방법을 알고 있어야 합니다. 자세한 내용은 쿼리 로깅 사용 시 암호 노출 위험 완화 단원을 참조하십시오.

다음에서 log_statementlog_min_duration 파라미터에 대한 참조 정보를 확인할 수 있습니다.

log_statement

이 파라미터는 로그에 전송해야 하는 SQL 문의 유형을 지정합니다. 기본값은 none입니다. 이 파라미터를 all, ddl 또는 mod로 변경할 경우 로그에 암호가 노출될 위험을 줄이려면 권장 조치를 취해야 합니다. 자세한 내용은 쿼리 로깅 사용 시 암호 노출 위험 완화 단원을 참조하십시오.

모두

모든 문을 로깅합니다. 이 설정은 디버깅 용도로 사용하는 것이 좋습니다.

ddl

모든 데이터 정의 언어(DDL) 문(CREATE, ALTER, DROP 등)을 로깅합니다.

mod

NSERT, UPDATE, DELETE 등 데이터를 수정하는 모든 DDL 문과 데이터 조작 언어(DML) 문을 로깅합니다.

없음

SQL 문이 로깅되지 않습니다. 로그에서 암호가 노출될 위험을 피하려면 이 설정을 사용하는 것이 좋습니다.

log_min_duration_statement

지정된 시간 이상 실행되는 모든 SQL 문은 로깅됩니다. 이 파라미터는 기본적으로 설정되어 있지 않습니다. 이 파라미터를 활성화하면 최적화되지 않은 쿼리를 찾는 데 도움이 될 수 있습니다.

–1–2147483647

문이 로깅되는 런타임의 밀리초(ms) 수입니다.

쿼리 로깅 설정

이 단계에서는 RDS for PostgreSQL DB 인스턴스가 사용자 지정 DB 파라미터 그룹을 사용한다고 가정합니다.

  1. log_statement 파라미터를 all로 설정합니다. 다음 예에서는 이 파라미터가 설정에서 postgresql.log에 기록되는 정보를 보여줍니다.

    2022-10-05 22:05:52 UTC:52.95.4.1(11335):postgres@labdb:[3639]:LOG: statement: SELECT feedback, s.sentiment,s.confidence FROM support,aws_comprehend.detect_sentiment(feedback, 'en') s ORDER BY s.confidence DESC; 2022-10-05 22:05:52 UTC:52.95.4.1(11335):postgres@labdb:[3639]:LOG: QUERY STATISTICS 2022-10-05 22:05:52 UTC:52.95.4.1(11335):postgres@labdb:[3639]:DETAIL: ! system usage stats: ! 0.017355 s user, 0.000000 s system, 0.168593 s elapsed ! [0.025146 s user, 0.000000 s system total] ! 36644 kB max resident size ! 0/8 [0/8] filesystem blocks in/out ! 0/733 [0/1364] page faults/reclaims, 0 [0] swaps ! 0 [0] signals rcvd, 0/0 [0/0] messages rcvd/sent ! 19/0 [27/0] voluntary/involuntary context switches 2022-10-05 22:05:52 UTC:52.95.4.1(11335):postgres@labdb:[3639]:STATEMENT: SELECT feedback, s.sentiment,s.confidence FROM support,aws_comprehend.detect_sentiment(feedback, 'en') s ORDER BY s.confidence DESC; 2022-10-05 22:05:56 UTC:52.95.4.1(11335):postgres@labdb:[3639]:ERROR: syntax error at or near "ORDER" at character 1 2022-10-05 22:05:56 UTC:52.95.4.1(11335):postgres@labdb:[3639]:STATEMENT: ORDER BY s.confidence DESC; ----------------------- END OF LOG ----------------------
  2. log_min_duration_statement 파라미터를 설정합니다. 다음 예제에서는 이 파라미터가 postgresql.log로 설정되어 있을 때 1 파일에 기록되는 정보를 보여줍니다.

    log_min_duration_statement 파라미터에 지정된 기간을 초과하는 쿼리가 로깅됩니다. 다음은 그 한 예입니다. Amazon RDS 콘솔에서 RDS for PostgreSQL DB 인스턴스에 대한 로그 파일을 볼 수 있습니다.

    2022-10-05 19:05:19 UTC:52.95.4.1(6461):postgres@labdb:[6144]:LOG: statement: DROP table comments; 2022-10-05 19:05:19 UTC:52.95.4.1(6461):postgres@labdb:[6144]:LOG: duration: 167.754 ms 2022-10-05 19:08:07 UTC::@:[355]:LOG: checkpoint starting: time 2022-10-05 19:08:08 UTC::@:[355]:LOG: checkpoint complete: wrote 11 buffers (0.0%); 0 WAL file(s) added, 0 removed, 0 recycled; write=1.013 s, sync=0.006 s, total=1.033 s; sync files=8, longest=0.004 s, average=0.001 s; distance=131028 kB, estimate=131028 kB ----------------------- END OF LOG ----------------------

쿼리 로깅 사용 시 암호 노출 위험 완화

암호가 노출되지 않도록 log_statementnone으로 설정하는 것이 좋습니다. log_statementall, ddl, 또는 mod로 설정하는 경우 다음 단계 중 하나 이상을 수행하는 것이 좋습니다.

  • 클라이언트의 경우 민감한 정보를 암호화합니다. 자세한 내용은 PostgreSQL 설명서의 암호화 옵션에 관한 문서를 참조하세요. CREATEALTER 문의 ENCRYPTED(및 UNENCRYPTED) 옵션을 사용합니다. 자세한 내용은 PostgreSQL 설명서에서 CREATE USER를 참조하세요.

  • RDS for PostgreSQL DB 인스턴스의 경우 PostgreSQL Auditing(pgAudit) 확장을 설정하고 사용합니다. 이 확장은 로그로 전송된 CREATE 및 ALTER 문에서 민감한 정보를 삭제합니다. 자세한 내용은 pgAudit를 사용하여 데이터베이스 활동 로깅 단원을 참조하십시오.

  • CloudWatch 로그에 대한 액세스를 제한합니다.

  • IAM 등의 보다 강력한 인증 메커니즘을 사용합니다.