Amazon Relational Database Service
사용 설명서 (API 버전 2014-10-31)

PostgreSQL 데이터베이스 로그 파일

RDS PostgreSQL에서는 쿼리 로그 및 오류 로그를 생성합니다. auto-vacuum information 및 rds_admin actions를 오류 로그에 기록합니다. PostgreSQL은 로그 연결, 연결 해제 및 체크포인트를 오류 로그에 기록합니다. 자세한 내용은 PostgreSQL 문서에서 Error Reporting and Logging을 참조하십시오.

DB 인스턴스와 연결된 DB 파라미터 그룹에 있는 rds.log_retention_period 파라미터를 사용하여 시스템 로그의 보존 기간을 설정할 수 있습니다. 이 파라미터의 단위는 분입니다. 예를 들어 1440으로 설정하면 로그가 하루 동안 보관됩니다. 기본값은 4320(3일)입니다. 최대값은 10080(7일)입니다. 인스턴스에는 보존되는 로그 파일을 포함하기에 충분하게 할당된 스토리지가 있어야 합니다.

DB 인스턴스와 연결된 DB 파라미터 그룹에서 log_statementlog_min_duration_statement의 두 파라미터를 설정하여 PostgreSQL DB 인스턴스에 대한 쿼리 로깅을 활성화할 수 있습니다. log_statement 파라미터는 어떤 SQL 문이 로그에 기록되는지 제어합니다. 이 파라미터를 all로 설정하여 DB 인스턴스에서 문제를 디버깅할 때 모든 문을 로그에 기록하는 것이 좋습니다. 기본값은 none입니다. 또는 이 값을 ddl로 설정하여 모든 데이터 정의 언어(DDL) 문(CREATE, ALTER, DROP 등)을 로깅하거나 mod로 설정하여 모든 DDL 및 데이터 수정 언어(DML) 문(INSERT, UPDATE, DELETE 등)을 로깅할 수 있습니다.

log_min_duration_statement 파라미터는 로그에 기록할 문의 한계를 밀리초 단위로 설정합니다. 이 파라미터 설정보다 오래 실행되는 모든 SQL 문이 로그에 기록됩니다. 이 파라미터는 기본적으로 비활성화되어 있고 -1로 설정됩니다. 이 파라미터를 활성화하면 최적화되지 않은 쿼리를 찾는 데 도움이 될 수 있습니다.

처음으로 DB 파라미터 그룹에서 파라미터를 설정하고 그 파라미터 그룹을 DB 인스턴스와 연결해보는 사용자라면, DB 파라미터 그룹 작업을(를) 참조하십시오.

다음 단계에서는 쿼리 로깅을 설정하는 방법을 보여줍니다.

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

    2013-11-05 16:48:56 UTC::@:[2952]:LOG: received SIGHUP, reloading configuration files 2013-11-05 16:48:56 UTC::@:[2952]:LOG: parameter "log_min_duration_statement" changed to "1"

    쿼리를 실행할 때 postgres.log 파일에 추가 정보가 기록됩니다. 다음 예제에서는 쿼리 후 파일에 기록되는 정보의 유형을 보여줍니다.

    2013-11-05 16:41:07 UTC::@:[2955]:LOG: checkpoint starting: time 2013-11-05 16:41:07 UTC::@:[2955]:LOG: checkpoint complete: wrote 1 buffers (0.3%); 0 transaction log file(s) added, 0 removed, 1 recycled; write=0.000 s, sync=0.003 s, total=0.012 s; sync files=1, longest=0.003 s, average=0.003 s 2013-11-05 16:45:14 UTC:[local]:master@postgres:[8839]:LOG: statement: SELECT d.datname as "Name", pg_catalog.pg_get_userbyid(d.datdba) as "Owner", pg_catalog.pg_encoding_to_char(d.encoding) as "Encoding", d.datcollate as "Collate", d.datctype as "Ctype", pg_catalog.array_to_string(d.datacl, E'\n') AS "Access privileges" FROM pg_catalog.pg_database d ORDER BY 1; 2013-11-05 16:45:
  2. log_min_duration_statement 파라미터를 설정합니다. 다음 예제에서는 이 파라미터가 1로 설정되어 있을 때 postgres.log 파일에 기록되는 정보를 보여줍니다.

    2013-11-05 16:48:56 UTC::@:[2952]:LOG: received SIGHUP, reloading configuration files 2013-11-05 16:48:56 UTC::@:[2952]:LOG: parameter "log_min_duration_statement" changed to "1"

    지속 시간 파라미터 설정을 초과하는 쿼리를 실행할 때 postgres.log 파일에 추가 정보가 기록됩니다. 다음 예제에서는 쿼리 후 파일에 기록되는 정보의 유형을 보여줍니다.

    2013-11-05 16:51:10 UTC:[local]:master@postgres:[9193]:LOG: statement: SELECT c2.relname, i.indisprimary, i.indisunique, i.indisclustered, i.indisvalid, pg_catalog.pg_get_indexdef(i.indexrelid, 0, true), pg_catalog.pg_get_constraintdef(con.oid, true), contype, condeferrable, condeferred, c2.reltablespace FROM pg_catalog.pg_class c, pg_catalog.pg_class c2, pg_catalog.pg_index i LEFT JOIN pg_catalog.pg_constraint con ON (conrelid = i.indrelid AND conindid = i.indexrelid AND contype IN ('p','u','x')) WHERE c.oid = '1255' AND c.oid = i.indrelid AND i.indexrelid = c2.oid ORDER BY i.indisprimary DESC, i.indisunique DESC, c2.relname; 2013-11-05 16:51:10 UTC:[local]:master@postgres:[9193]:LOG: duration: 3.367 ms 2013-11-05 16:51:10 UTC:[local]:master@postgres:[9193]:LOG: statement: SELECT c.oid::pg_catalog.regclass FROM pg_catalog.pg_class c, pg_catalog.pg_inherits i WHERE c.oid=i.inhparent AND i.inhrelid = '1255' ORDER BY inhseqno; 2013-11-05 16:51:10 UTC:[local]:master@postgres:[9193]:LOG: duration: 1.002 ms 2013-11-05 16:51:10 UTC:[local]:master@postgres:[9193]:LOG: statement: SELECT c.oid::pg_catalog.regclass FROM pg_catalog.pg_class c, pg_catalog.pg_inherits i WHERE c.oid=i.inhrelid AND i.inhparent = '1255' ORDER BY c.oid::pg_catalog.regclass::pg_catalog.text; 2013-11-05 16:51:18 UTC:[local]:master@postgres:[9193]:LOG: statement: select proname from pg_proc; 2013-11-05 16:51:18 UTC:[local]:master@postgres:[9193]:LOG: duration: 3.469 ms

CloudWatch Logs에 PostgreSQL 로그 게시

Amazon CloudWatch Logs의 로그 그룹에 로그 데이터를 게시하도록 PostgreSQL용 Amazon RDS DB 인스턴스를 구성할 수 있습니다. CloudWatch Logs를 통해 로그 데이터에 대한 실시간 분석을 수행할 수 있고, CloudWatch를 사용하여 경보를 만들고 지표를 볼 수 있습니다. CloudWatch Logs를 사용하여 내구성이 뛰어난 스토리지에 로그 레코드를 저장할 수 있습니다.

참고

로그 파일을 CloudWatch Logs에 게시하는 기능은 PostgreSQL 버전 9.6.6 이상과 10.4 이상에만 지원됩니다.

PostgreSQL용 Amazon RDS의 CloudWatch Logs에 개시할 수 있는 로그 유형은 다음과 같습니다.

  • Postgresql 로그

  • 업그레이드 로그

구성을 완료하고 나면 Amazon RDS에서 CloudWatch 로그 그룹 내 로그 스트림에 로그 이벤트를 게시합니다. 예를 들면 PostgreSQL 로그 데이터가 로그 그룹 /aws/rds/instance/my_instance/postgresql 안에 저장됩니다. Amazon CloudWatch Logs를 보려면 https://console.aws.amazon.com/cloudwatch/를 엽니다.

AWS Management 콘솔

콘솔을 사용하여 PostgreSQL 로그를 CloudWatch Logs에 게시하려면

  1. https://console.aws.amazon.com/rds/에서 Amazon RDS 콘솔을 엽니다.

  2. 탐색 창에서 데이터베이스를 선택합니다.

  3. 수정할 DB 인스턴스를 선택한 후, 수정을 선택합니다.

  4. Log exports(로그 내보내기) 섹션에서 CloudWatch Logs에 게시하기 시작할 로그를 선택합니다.

  5. [Continue]를 선택한 후, 요약 페이지에서 [Modify DB Instance]를 선택합니다.

AWS CLI

AWS CLI를 사용하여 PostgreSQL 로그를 게시할 수 있습니다. 다음 파라미터로 modify-db-instance 명령을 호출할 수 있습니다.

  • --db-instance-identifier

  • --cloudwatch-logs-export-configuration

참고

--cloudwatch-logs-export-configuration 옵션에 대한 변경 사항은 항상 DB 인스턴스에 즉시 적용됩니다. 따라서 --apply-immediately--no-apply-immediately 옵션은 지정해도 아무런 효과가 없습니다.

또한 다음 AWS CLI 명령을 호출하여 PostgreSQL 로그를 게시할 수도 있습니다.

다음 옵션으로 AWS CLI 명령 중 하나를 실행합니다.

  • --db-instance-identifier

  • --enable-cloudwatch-logs-exports

  • --db-instance-class

  • --engine

실행하는 AWS CLI 명령에 따라 다른 옵션이 필요할 수 있습니다.

로그를 CloudWatch Logs에 게시하도록 인스턴스 수정

다음 예에서는 CloudWatch Logs에 로그 파일을 게시하도록 기존 PostgreSQL DB 인스턴스를 수정합니다. --cloudwatch-logs-export-configuration 값은 JSON 객체입니다. 이 객체에 대한 키는 EnableLogTypes이며, 해당 값은 postgresqlupgrade의 조합을 사용하는 문자열의 배열입니다.

Linux, OS X, Unix의 경우:

aws rds modify-db-instance \ --db-instance-identifier mydbinstance \ --cloudwatch-logs-export-configuration '{"EnableLogTypes":["postgresql", "upgrade"]}'

Windows의 경우:

aws rds modify-db-instance ^ --db-instance-identifier mydbinstance ^ --cloudwatch-logs-export-configuration '{"EnableLogTypes":["postgresql","upgrade"]}'

로그를 CloudWatch Logs에 게시할 인스턴스 생성

다음 예에서는 CloudWatch Logs에 로그 파일을 게시하도록 PostgreSQL DB 인스턴스를 생성합니다. --enable-cloudwatch-logs-exports 값은 문자열의 JSON 배열입니다. 문자열은 postgresqlupgrade의 조합일 수 있습니다.

Linux, OS X, Unix의 경우:

aws rds create-db-instance \ --db-instance-identifier mydbinstance \ --enable-cloudwatch-logs-exports '["postgresql","upgrade"]' \ --db-instance-class db.m4.large \ --engine postgres

Windows의 경우:

aws rds create-db-instance ^ --db-instance-identifier mydbinstance ^ --enable-cloudwatch-logs-exports '["postgresql","upgrade"]' ^ --db-instance-class db.m4.large ^ --engine postgres
RDS API

RDS API를 사용하여 PostgreSQL 로그를 게시할 수 있습니다. 다음 파라미터로 ModifyDBInstance 작업을 호출할 수 있습니다.

  • DBInstanceIdentifier

  • CloudwatchLogsExportConfiguration

참고

CloudwatchLogsExportConfiguration 파라미터에 대한 변경 사항은 항상 DB 인스턴스에 즉시 적용됩니다. 따라서 ApplyImmediately 파라미터는 지정해도 아무런 효과가 없습니다.

또한 다음 RDS API 작업을 호출해 PostgreSQL 로그를 게시할 수 있습니다.

다음 파라미터로 RDS API 작업 중 하나를 실행합니다.

  • DBInstanceIdentifier

  • EnableCloudwatchLogsExports

  • Engine

  • DBInstanceClass

실행하는 작업에 따라 다른 파라미터가 필요할 수 있습니다.