Amazon RDS를 사용하여 PostgreSQL에 대한 쿼리 로깅을 활성화하려면 어떻게 해야 하나요?

4분 분량
0

PostgreSQL DB 인스턴스용 Amazon Relational Database Service(RDS)에 대한 쿼리 로깅을 활성화하고 싶습니다.

간략한 설명

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

로그 파라미터를 수정할 때 DB 인스턴스의 볼륨에 더 많은 공간이 필요할 수 있습니다. 볼륨의 스토리지가 가득 차면 DB 인스턴스를 사용할 수 없습니다. rds.log_retention_period 파라미터를 수정하여 불필요한 로그를 정리하는 것이 좋습니다. Amazon CloudWatch 지표인 FreeStorageSpace를 사용하여 사용자의 저장 공간 사용량을 지속적으로 모니터링하는 것도 좋은 방법입니다. 저장 공간이 거의 다 차면, DB 인스턴스를 항상 사용할 수 있도록 저장 공간을 늘릴 수 있습니다.

해결 방법

기록하려는 쿼리에 따라 log_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 파라미터에 의존하거나 간섭하지 않습니다.

log_statement를 수정하여 기록되는 SQL 문을 제어합니다. 기본값은 none입니다. 이 파라미터에 대해 다음 값을 수정할 수 있습니다.

  • ddl은 CREATE, ALTER, DROP과 같은 모든 데이터 정의 언어(DDL) 문을 기록합니다.
  • mod는 INSERT, UPDATE, DELETE와 같은 모든 DDL 및 데이터 수정 언어(DML) 문을 기록합니다.
  • all은 실행 시간과 관계없이 모든 쿼리를 기록합니다.

참고: log_statementlog_min\ _duration_statement에 설정한 값과 관계없이 쿼리는 로그에 한 번 기록됩니다.

PostgreSQL에서 쿼리 로깅 활성화

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

참고: 다음 예제 파라미터 수정은 1초 이상 걸리는 모든 쿼리와 모든 스키마 변경 사항을 기록합니다.

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

로깅이 활성화되어 있는지 확인

사용자의 DB 인스턴스와 연결된 파라미터 그룹을 저장한 후, 상태는 applying으로 설정됩니다. 사용자의 DB 인스턴스에서 파라미터 그룹이 설정되면, 상태가 in-sync로 설정됩니다. 로깅이 활성화되어 있는지 확인하려면, DB 인스턴스에 연결합니다. 이 예에서는 로그에 DDL 문과 1초 이상 걸리는 쿼리가 모두 포함되어 있는지 확인합니다. 그런 다음, 다음과 비슷한 명령을 실행합니다.

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.    탐색 창에서 데이터베이스를 선택합니다.

3.    DB 인스턴스를 선택한 다음 로그 보기를 선택합니다.

4.    로그 및 이벤트 탭에서 최신 로그를 선택한 다음 로그 보기를 선택하여 로그 콘텐츠를 확인합니다. 예를 들면 다음과 같습니다.

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으로 설정하면 많은 양의 로깅 정보가 생성됩니다. 이는 사용자의 스토리지 사용량에 영향을 미칩니다. 파라미터를 이러한 값으로 설정하려면, 문제 해결을 위해 잠시 동안만 그렇게 해야 합니다. 문제를 해결할 때, 저장 공간을 항상 모니터링합니다.

관련 정보

PostgreSQL 데이터베이스 로그 파일용 RDS