CS

[PostgreSQL] log파일 스위칭 방법 pg_ctl logrotate

뭉치v 2024. 5. 31.

PostgreSQL 로그 파일 스위칭 방법 : logrotate

 PostgreSQL 운영 시 로그 파일에서 수행된 쿼리나 에러 이벤트를 얻을 수 있다. 개발 또는 운영에 log파일은 필수적인데, 시간이 지나거나 갑자기 많은 로그파일이 쓰이면 디스크 공간을 많이 차지하게 되고, filesystem full이 발생 할 수 있다. PostgreSQL 로그 파일을 스위치하고 삭제하는 방법에 대해 알아보자.

pg_ctl logrotate 사용방법

로그 파일 스위치: `$ pg_ctl logrotate`

PostgreSQL은 `$ pg_ctl logrotate` 명령어를 통해 로그 파일을 스위치하는 기능을 제공한다. 이 명령어를 실행하면 현재 사용 중인 로그 파일이 닫히고, 새로운 로그 파일이 생성된다. 로그 파일을 빠르게 교체하고 이전 로그파일을 삭제하거나 이동할 수 있다.

pg_ctl logrotate 명령어 사용 방법

아래는 pg_ctl logrotate 명령어 예시이다. (운영 중에 가능!)

$ pg_ctl logrotate -D /path/to/your/postgresql/data/directory

위 예시 처럼 postgreSQL 데이터 디렉토리를 지정하여 현재 쓰고있는 log file을 스위치한다. 데이터 디렉토리는 PostgreSQL 설정 파일(postgresql.conf)에 지정된 위치를 사용한다. ($PGDATA)

로그 파일 주기적으로 삭제하기🗑️

아래는 30일이 지난 로그 파일을 삭제하는 간단한 shell 예시다. 이 스크립트를 주기적으로 실행하거나 크론탭에 등록해두어 log file 관리를 할 수 있다.

#!/bin/bash

# 로그 파일이 저장된 디렉토리
LOG_DIR="/path/to/your/log/directory"

# 30일 이전의 로그 파일 삭제
find $LOG_DIR -type f -name "*.log" -mtime +30 -exec rm -f {} \;

echo "Old log files older than 30 days have been deleted."

참고로 cron으로 삭제 처리를 할 수 있지만, pg에서 제공하는 log_file_name, log_rotation_age, log_rotation_size, log_truncate_on_rotation 등 log 관련 파라미터들을 활용해 과거 로그파일을 덮어쓰게 할 수 있다.
ex. `log_file_name = postgresql-%a.log' 설정 시 postgresql-Mon.log, postgresql-Tue.log 등 요일별 파일명 반복
실무에서는 7일 이전 로그도 분석이 필요한 경우가 있기 때문에, 크론으로 한달정도 지난 로그를 삭제하고있다.

마침말

  • PostgreSQL의 log 파일 공간이 꽉 차지 않게 주의하자.
  • 용량이 꽉차서 급히 삭제 해야 되는 경우에는 `$ pg_ctl logrotate` 명령어로 rotate 후 삭제하자.
  • 크론 등으로 오래된 로그 파일을 주기적으로 삭제하여 file system full 을 방지하자.

반응형

댓글

💲 추천 글