Amazon RDS for PostgreSQL을 사용하여 쿼리 로깅을 활성화하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2020년 6월 24일

Amazon RDS(Amazon Relational Database Service) for PostgreSQL DB 인스턴스에 대한 쿼리 로깅을 활성화하려면 어떻게 해야 합니까? 

간략한 설명

PostgreSQL에서 쿼리 로깅을 활성화하려면 DB 인스턴스에 연결된 사용자 지정된 파라미터 그룹을 수정하여 다음 파라미터 값을 변경합니다.

로그 파라미터를 수정하는 경우 DB 인스턴스의 볼륨에 더 많은 공간이 필요할 수도 있습니다. 볼륨의 스토리지가 가득 찬 경우 DB 인스턴스를 사용할 수 없습니다. 모범 사례는 rds.log_retention_period 파라미터를 수정하여 오래된 로그를 정리하는 것입니다. Amazon CloudWatch 지표 FreeStorageSpace를 사용하여 스토리지 사용량을 지속적으로 모니터링하고 필요할 경우 스토리지를 늘리는 것도 모범 사례입니다.

해결 방법

로깅하려는 쿼리에 따라 og_statement 또는 log_min_duration_statement를 활성화할 수 있습니다. 로깅을 활성화하기 위해 두 파라미터를 모두 변경할 필요는 없습니다.

임계값(밀리초 단위)을 설정하려면 log_min_duration_statement를 수정합니다. 그러면 설정된 파라미터 값보다 더 오래 걸리는 모든 쿼리를 로깅할 수 있습니다. 예를 들어, log_min_duration_statement 값을 500으로 설정하면, Amazon RDS는 쿼리 유형에 상관없이 완료 시간이 0.5초보다 긴 모든 쿼리를 로깅합니다. 마찬가지로 이 파라미터를 2000으로 설정하면, Amazon RDS는 완료 시간이 2초보다 긴 모든 쿼리를 로깅합니다. 파라미터 값을 -1로 설정하면 파라미터가 비활성화되고 Amazon RDS는 완료 시간을 기준으로 쿼리를 로깅하지 않습니다. 파라미터 값을 0으로 설정하면 Amazon RDS가 모든 쿼리를 로깅합니다.
참고: log_min_duration_statement 파라미터는 log_statement 파라미터에 종속되거나 이를 간섭하지 않습니다.

로깅되는 SQL 문을 제어하려면 log_statement 수정합니다. 기본값은 none이며, 이 파라미터의 값은 다음과 같이 수정할 수 있습니다.

  • ddl은 모든 DDL(데이터 정의 언어) 문(예: CREATE, ALTER 및 DROP)을 로깅합니다.
  • mod는 모든 DDL 및 DML(데이터 수정 언어) 문(예: INSERT, UPDATE 및 DELETE)을 로깅합니다.
  • all은 실행 시간에 상관없이 모든 쿼리를 로깅합니다.

참고: log_statementlog_min_duration_statement에서 설정한 값에 상관없이 쿼리는 로그에 두 번 기록되지 않습니다.

PostreSQL에서 쿼리 로깅 활성화

PostgreSQL에서 쿼리 로깅을 활성화하려면 다음 단계를 수행합니다.

참고: 다음 파라미터 수정 예제에서는 쿼리 유형에 상관없이 1초 넘게 걸리는 모든 쿼리와 완료 시간에 상관없이 모든 스키마 변경(DDL 명령문)을 로깅합니다.

  1. Amazon RDS 콘솔을 열고 탐색 창에서 [데이터베이스]를 선택합니다.
  2. 쿼리를 로깅하려는 DB 인스턴스를 선택합니다.
  3. DB 인스턴스의 세부 정보와 DB 인스턴스에 연결된 파라미터 그룹을 보려면 [구성] 보기를 선택합니다.
    참고: DB 인스턴스를 생성할 때 DB 인스턴스는 기본 DB 파라미터 그룹에 연결됩니다. 이 그룹은 수정할 수 없으므로 파라미터 그룹을 수정하려면 사용자 지정 파라미터 그룹을 생성합니다. DB 인스턴스 파라미터 그룹을 기본 그룹에서 사용자 지정 그룹으로 변경하는 경우 DB 인스턴스를 재부팅해야 합니다.
  4. [인스턴스 구성] 창에서 [파라미터 그룹]을 선택하고, 수정하려는 파라미터 그룹을 선택합니다.
  5. [파라미터 편집]을 선택합니다.
  6. [파라미터 필터링] 필드에서 변경하려는 파라미터를 선택합니다. 예:
    log_statement를 입력하고 값을 ddl로 변경합니다.
    log_min_duration_statement를 입력하고 값을 1000으로 변경합니다. (이 값은 밀리초 단위이므로, 1000은 1초와 같습니다.)
  7. [Save changes]를 선택합니다.
    참고: 이러한 파라미터는 동적입니다. DB 인스턴스에 이미 사용자 지정 파라미터 그룹이 있는 경우 이 파라미터를 적용하기 위해 DB 인스턴스를 재부팅하지 않아도 됩니다.

로깅 활성화 확인

DB 인스턴스에 연결된 파라미터 그룹을 저장하면 상태는 applying이 됩니다. DB 인스턴스에서 파라미터 그룹을 설정한 후에 상태가 in-sync입니다. 로깅이 활성화되었는지 확인하려면(이 예에서는 1초 넘게 걸리는 모든 쿼리와 모든 DDL 명령문) DB 인스턴스에 연결합니다. 그리고, 다음과 비슷한 명령을 실행합니다.

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. Amazon RDS 콘솔을 열고 탐색 창에서 [데이터베이스]를 선택합니다.
  2. DB 인스턴스를 선택한 다음 [로그] 보기를 선택합니다.
  3. [로그 및 이벤트] 탭에서 가장 최근의 로그를 선택하고 [로그 보기]를 선택하여 로그 콘텐츠를 봅니다. 예:
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;

참고: 위 파라미터를 광범위한 로깅을 생성하는 값으로 설정하지 마십시오. 예를 들어 log_statementall로 설정하거나 log_min_duration_statement0 또는 매우 작은 수로 설정하면 막대한 양의 로깅 정보가 생성될 수 있습니다. 이는 스토리지 사용량에 영향을 미칩니다. 파라미터를 이러한 값으로 설정해야 하는 경우 문제 해결을 위해 단기간 동안만 설정하고 스토리지 공간을 상시 모니터링해야 합니다.


이 문서가 도움이 되었습니까?

AWS에서 개선해야 할 부분이 있습니까?


도움이 필요하십니까?