PostgreSQL 로그 파일 스위칭 방법 : logrotate
PostgreSQL 운영 시 로그 파일에서 수행된 쿼리나 에러 이벤트를 얻을 수 있다. 개발 또는 운영에 log파일은 필수적인데, 시간이 지나거나 갑자기 많은 로그파일이 쓰이면 디스크 공간을 많이 차지하게 되고, filesystem full이 발생 할 수 있다. PostgreSQL 로그 파일을 스위치하고 삭제하는 방법에 대해 알아보자.
로그 파일 스위치: `$ 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 을 방지하자.
'CS' 카테고리의 다른 글
[리눅스] tar 명령어 알아보기, tar 압축하기, 압축해제 (0) | 2024.07.05 |
---|---|
PostgreSQL oracle_fdw 설치 (오라클 테이블 읽어오기) (0) | 2024.07.04 |
[LINUX] 서버 간 방화벽 포트 열려있는지 확인하기 - telnet, curl, nc (0) | 2024.05.31 |
[PostgreSQL] Tibero to PostgreSQL 개별 테이블 이관하기 (pandas 사용) (0) | 2024.05.18 |
PostgreSQL Temp file 관련 정리 (Temp tablespace) (0) | 2024.05.17 |
댓글