Amazon Relational Database Service(Amazon RDS) for PostgreSQL DB 인스턴스에 대한 쿼리 로깅을 활성화하고 싶습니다.
간략한 설명
기록하려는 쿼리에 따라 log_statement 또는 log_min_duration_statement를 활성화합니다. 자세한 내용은 PostgreSQL 웹 사이트의 log_min_duration_statement 및 log_statement를 참조하십시오. Amazon RDS for PostgreSQL에서 로깅을 활성화하기 위해 두 파라미터를 모두 수정할 필요는 없습니다.
완료하는 데 일정 시간이 걸리는 쿼리 로그를 보려면 log_min_duration_statement 파라미터를 밀리초 단위의 임계값으로 수정하십시오. 예를 들어 파라미터 값을 500으로 설정하면 Amazon RDS는 완료하는 데 0.5초 이상 걸리는 모든 쿼리를 기록합니다. 파라미터 값을 -1로 설정하면 파라미터가 비활성화됩니다. Amazon RDS는 완료 시간을 기준으로 쿼리를 기록하지 않습니다. 파라미터 값을 0으로 설정하면 Amazon RDS가 모든 쿼리를 기록합니다.
기록하려는 SQL 문을 제어하려면 log_statement 파라미터의 다음 값을 수정하면 됩니다.
- ddl은 CREATE, ALTER, DROP과 같은 모든 데이터 정의 언어(DDL) 문을 기록합니다.
- mod는 INSERT, UPDATE, DELETE와 같은 모든 DDL 및 데이터 수정 언어(DML) 문을 기록합니다.
- all은 런타임에 관계없이 모든 쿼리를 기록합니다.
참고: log_statement 파라미터의 기본값은 none입니다.
log_min_duration_statement 또는 log_statement에 설정한 값에 관계없이 Amazon RDS는 쿼리를 로그에 한 번 기록합니다. 그러나 파라미터를 수정할 때 DB 인스턴스의 볼륨에 더 많은 공간이 필요할 수 있습니다. 스토리지 사용량을 최소화하려면 log_statement를 all로 설정하거나 log_min_duration_statement를 0으로 설정하는 등 광범위한 로깅을 생성하는 값으로 파라미터를 설정하지 마십시오.
볼륨 스토리지가 가득 차면 DB 인스턴스를 사용할 수 없으므로 rds.log_retention_period 파라미터를 수정하여 불필요한 로그를 제거하는 것이 좋습니다. FreeStorageSpace Amazon CloudWatch 지표를 사용하여 스토리지 사용량을 지속적으로 모니터링하는 것도 모범 사례입니다. 스토리지 공간이 거의 다 차면, DB 인스턴스를 항상 사용할 수 있도록 스토리지 공간을 늘릴 수 있습니다.
해결 방법
사용자 지정 파라미터 그룹을 수정하여 로깅 활성화
다음 단계를 완료하십시오.
- Amazon Aurora 및 RDS 콘솔을 엽니다.
- 사용자 지정 파라미터 그룹을 생성한 다음, DB 인스턴스와 연결합니다.
참고: 즉시 적용을 선택하면 DB 인스턴스를 일시적으로 사용할 수 없게 됩니다.
- 탐색 창에서 파라미터 그룹을 선택합니다.
- 사용자 지정 파라미터 그룹을 선택합니다.
- 파라미터 편집을 선택합니다.
- 필터 파라미터 필드에 log_statement 또는 log_min_duration_statement를 입력합니다.
- 파라미터를 선택한 다음, 수정합니다. 예를 들어, log_statement를 ddl로 변경하거나 log_min_duration_statement를 1000(1초)으로 변경할 수 있습니다.
- 변경 사항 저장을 선택합니다.
참고: 파라미터는 동적이므로 파라미터 변경 사항을 적용하기 위해 DB 인스턴스를 재부팅할 필요가 없습니다.
파라미터 그룹 상태가 적용 중으로 변경됩니다. 파라미터 그룹 수정이 완료되면 상태가 동기화 중으로 변경됩니다.
로깅을 활성화했는지 확인
다음 단계를 완료하십시오.
- 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초 이상 걸리는 모든 DDL 문 및 쿼리를 보여줍니다.
쿼리 로그 보기
다음 단계를 완료하십시오.
- Aurora 및 RDS 콘솔을 엽니다.
- 탐색 창에서 데이터베이스를 선택합니다.
- DB 인스턴스를 선택합니다.
- 로그 및 이벤트 탭을 선택합니다.
- 로그 섹션에서 최신 로그를 선택한 다음, 보기를 선택합니다.
예제 로그:
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;
관련 정보
RDS for PostgreSQL 데이터베이스 로그 파일