로그 파일 너무 크고 많을 때 자동 정리 스크립트 만드는 방법

Views: 0

1. 로그 정리 자동화가 필요한 이유

운영 중인 서버는 서비스 로그, 에러 로그, 접근 로그 등 다양한 로그가 지속적으로 생성된다. 로그가 일정 수준 이상 쌓이면 디스크 공간을 빠르게 소모하며 시스템 장애의 원인이 될 수 있다. 이를 예방하기 위해 오래된 로그를 자동으로 압축하거나 삭제해주는 스크립트가 필요하다.

리눅스 로그파일

2. 로그 자동 정리 기본 전략

대상 로그 정의

정리 대상 로그 파일의 경로와 종류를 먼저 확인한다. 예를 들어 /var/log/nginx/*.log 또는 애플리케이션 전용 디렉터리처럼 명확히 지정해야 한다.

정리 기준 설정

  • 일정 기간이 지난 로그 삭제
  • 일정 크기 이상 로그 압축
  • 남길 로그 개수 제한
    이 기준은 시스템 특성과 로그 활용 목적에 따라 결정한다.

3. Bash 기반 로그 정리 스크립트 예제

아래는 오래된 로그 파일을 압축하고, 더 이상 필요 없는 파일을 삭제하는 기본 스크립트 예제다.

#!/bin/bash

LOG_DIR="/var/log/myapp"
DAYS=7
MAX_SIZE=100M

find $LOG_DIR -type f -name "*.log" -mtime +$DAYS -exec gzip {} \;
find $LOG_DIR -type f -name "*.gz" -mtime +30 -delete
find $LOG_DIR -type f -name "*.log" -size +$MAX_SIZE -exec gzip {} \;

스크립트 설명

  • 7일 이상 된 로그 파일을 압축
  • 30일 이상 된 압축 로그 파일 삭제
  • 100MB 이상 로그는 즉시 압축
    스크립트에 실행 권한을 부여하려면 chmod +x log_cleanup.sh를 입력한다.

4. 로그 로테이션(logrotate) 활용 방법

리눅스에서는 logrotate라는 도구를 사용해 더 체계적으로 로그 관리가 가능하다.

logrotate 설정 예시(/etc/logrotate.d/myapp)

/var/log/myapp/*.log {
    daily
    rotate 14
    compress
    missingok
    notifempty
    dateext
    create 0640 root root
}

주요 옵션 설명

  • daily: 하루 단위 로그 분리
  • rotate 14: 최대 14개 파일 보관
  • compress: 이전 로그는 gzip으로 압축
  • notifempty: 파일이 비어 있으면 로테이션 수행하지 않음
  • dateext: 날짜 기반 파일명 생성

logrotate 설정이 적용됐는지 수동으로 테스트하려면 logrotate -f /etc/logrotate.d/myapp 명령어를 사용할 수 있다.

5. 크론(cron)으로 자동 실행 설정

정리 스크립트를 자동화하려면 크론 작업에 등록한다.

크론 설정 예시

crontab -e에 아래 내용을 추가한다.

0 2 * * * /usr/local/bin/log_cleanup.sh

이 설정은 매일 새벽 2시에 로그 정리 스크립트를 실행한다. 시스템 로그를 관리한다면 /etc/cron.daily에 스크립트를 위치시키는 것도 방법이다.

6. 실무에서 자주 사용하는 팁

  1. 테스트 환경에서 먼저 실행 후 운영 서버에 적용
  2. 삭제 대신 S3, NAS 등 외부 저장소로 이전 설정 가능
  3. 애플리케이션 로그는 JSON 파싱 오류를 고려해 압축 우선
  4. 중요한 로그는 삭제 전 백업 또는 아카이브 정책 적용
  5. 디스크 사용량 모니터링 도구(df, du, ncdu 등)와 병행 사용

7. 자동화 스크립트 확장 예시: 이메일 알림 추가

로그 삭제나 압축 후 관리자에게 결과를 이메일로 전송할 수 있다.

#!/bin/bash

LOG_DIR="/var/log/myapp"
DAYS=7
EMAIL="admin@example.com"

REPORT=$(find $LOG_DIR -type f -name "*.log" -mtime +$DAYS)
echo "$REPORT" | mail -s "로그 정리 보고서" $EMAIL

마무리

로그 파일을 방치하면 서버 장애로 이어질 수 있으므로 주기적인 정리가 필수다. logrotate와 Bash 스크립트를 결합하면 자동화된 로그 관리 시스템을 쉽게 구축할 수 있다. 운영 환경에 맞게 기간, 용량, 백업 정책을 조정하면 안정적이고 효율적인 로그 관리가 가능해진다.