본문 바로가기
DBMS

[PostgreSQL 설치와 운영] #5. PostgreSQL 로그 설정하기

by 이미존재 2022. 10. 20.
반응형

■ PostgreSQL의 로그(postgresql.conf) 설정하기(Ubuntu 22.04 LTS에서 apt로 설치된 환경)

 ▶ 로그 관련한 설정은 postgresql.conf 파일에서 설정 가능합니다.

 ▶ 설정을 변경하지 않았다면 기본적으로 /var/log/postgresql 밑에 로그가 쌓이게 됩니다.

 ▶ PostgreSQL 홈페이지의 문서를 참고 하시면 더욱 많은 정보를 얻을 수 있습니다.
  - 출처 및 참고 : https://www.postgresql.org/docs/

1. 로그 디렉토리 생성

   - Postgresql의 메인 디렉토리 하위에 생성하고 소유자를 변경합니다.

root@berasix:~# mkdir /var/lib/postgresql/14/main/pg_log
root@berasix:~# chown postgres:postgres /var/lib/postgresql/14/main/pg_log



2. 로그 생성 설정

 1) postgresql.conf 파일의 '# - Where to Log -' 부분에서 설정 합니다.

log_destination = 'stderr'             # Valid values are combinations of ....
                                            # log 생성 방식입니다. 주석을 제거합니다.
                                            # 기본은 stderr 입니다. 일반 텍스트 형태로 기록됩니다.
                                            # 그외 csvlog, syslog, eventlog 형태 등으로 설정가능합니다.

logging_collector = on           # Enable capturing of stderr and csvlog ....
                                            # log 파일로 수집 하겠다는 내용으로 
                                            # 주석을 제거하고 on으로 바꿔줍니다. 
                                            # collector = on 안되면 로그파일이 생성되지 않습니다.

log_directory = 'pg_log'     # directory where log files are written .....
                                            # 로그파일 생성 경로설정입니다.
                                            # 상대경로로 표기하며 1번에서 생성한 디렉토리입니다.

log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'      # log file name pattern .....
                                            # 로그 파일명 포멧입니다. 
                                            # 기본 예제 파일명은 'postgresql-년도-월-일_시분초.log'로 생성됩니다.
                                            # 데이터베이스 재기동시 로그파일은 재시작된 시간명으로 새로 생성됩니다.

log_file_mode = 0600                 # creation mode for log files ....
                                            # 로그파일 권한입니다. 
                                            # 기본 퍼미션은 '0600'으로 소유자만 읽기,쓰기가 가능합니다.
                                            # 보안상 '600'이하 설정을 권장합니다.

log_rotation_age = 1d             # Automatic rotation of logfiles will ....
                                            # 로그파일의 로테이션 주기입니다. 
                                            # 기본 1일로 설정하며 매일 새로운 로그 파일이 생성됩니다.

#log_rotation_size = 10MB # Automatic rotation of logfiles will ....
                                            # 로그파일 로테이션을 파일 크기로 설정 할 수도 있습니다.
                                            # 크키로 로테이션 하지 않으려면 주석 또는 0으로 설정합니다.

[pg_log 디렉토리에 생성된 로그 파일]

3. 로그 레벨 설정

 1) postgresql.conf 파일의 '# - When to Log -' & '# - What to Log -' 부분에서 설정 합니다.

log_min_messages = warning # values in order of decreasing detail: ......
                                            # 로그에 기록되는 메시지의 수준을 결정합니다.
                                            # debug5 -> panic 일수록 중요 메시지만 기록하여 메시지 양이 줄어듭니다.

log_min_error_statement = error    # values in order of decreasing detail:  ......
                                            # 로그에 SQL문에 대한 로그를 남길 수 있습니다.
                                            # 에러를 발생시키는 SQL문을 서버 로그에 기록합니다.
                                            # debug5 -> panic 일수록 중요 메시지만 기록하여 메시지 양이 줄어듭니다.

#log_min_duration_statement = -1        # -1 is disabled, 0 logs all statements  ......
                                            # 명령문의 실행 지속 시간이 지정된 millisecond 이상 되면 지속 시간을 기록
                                            # '0' : 모든 명령문의 지속 시간을 기록
                                            # '-1' : 로깅 문장의 기간을 비활성화
                                            # 'int' : 100ms로 설정하면 100ms 이상 실행되는 모든 SQL문이 기록됩니다.

log_line_prefix = '%m [%p] %q%u@%d '            # special values: .........
                                            # log_destination을 'stderr'로 설정했을 때, 발생하는 Log들의 접두어를 설정
                                            # 옵션이 매우 많아 공식문서를 참조 하시기를 권장합니다.
                                            # log_line_prefix를 Default 값인 '<%m>'은 밀리세컨드로 시간을 표기합니다.
                                            # [%p] %q%u@%d 는 '[프로세스ID] 중지세션 사용자명 @데이터베이스명' 형태

log_statement = 'none'                 # none, ddl, mod, all
                                            # 로그파일에 Query 로그를 어느 수준으로 남길지 설정합니다.
                                            # none, ddl, mod, all 값이 들어갈 수 있고 Default는 'none'입니다.
                                            # none은 Query를 남기지 않는 것입니다.
                                            # ddl은 모든 DDL(데이터 정의 언어) 문(예: CREATE, ALTER 및 DROP)을 로깅
                                            # mod는 모든 DDL 및 DML(데이터 수정 언어) 문
                                            # (예: INSERT, UPDATE 및 DELETE)을 로깅합니다.
                                            # all은 실행 시간에 상관없이 모든 쿼리를 로깅합니다.
                                            # log_statement와 log_min_duration_statement를 모두 설정시에도
                                            # 쿼리는 한번만 기록됩니다.

log_timezone = 'Asia/Seoul'
                                            # 로그의 TIME-ZONE(표준 시간대)를 설정합니다.

[로그 파일 내용]
[로그파일에 기록된 Query 내용]

728x90

댓글