본문 바로가기
리눅스 정보실

리눅스 로그 관리 실습 가이드 nginx, Apache, 시스템 로그 회전, 자동 삭제, cron 연동

by 고지존 2025. 8. 26.

리눅스 서버에서는 로그가 빠르게 쌓이면 디스크 부족, 서비스 지연, 로그 확인 어려움 문제가 발생합니다. 이 글은 초보자가 **보고 바로 따라하며 실습**할 수 있도록, nginx, Apache, 시스템 로그 회전과 자동 삭제, cron 연동까지 단계별로 안내합니다.

1. 로그 관리 필요성

  • 웹 서버 로그 하루 수 GB 이상 → 디스크 부족 및 서비스 지연
  • 시스템 로그 누적 → 이벤트 추적 어려움
  • 단순 삭제 반복 → 분석 불가, 문제 재발 가능
  • 안정적 로그 관리 필수

2. 테스트 환경 구성 및 로그 파일 생성

실제 서버 로그를 건드리지 않고 안전하게 실습하려면 테스트용 로그 파일을 생성합니다.

2-1. 디렉토리 생성

mkdir -p ~/log_test/nginx ~/log_test/apache ~/log_test/system

설명:

  • `mkdir` → 새 디렉토리 생성
  • `-p` → 상위 디렉토리가 없으면 같이 생성
  • `~` → 현재 사용자의 홈 디렉토리, root 계정이면 `/root/`
  • `~/log_test/apache` → Apache 테스트 로그를 넣을 폴더

2-2. 테스트용 로그 파일 생성

# nginx 로그
echo "테스트용 nginx access 로그" > ~/log_test/nginx/access.log
echo "테스트용 nginx error 로그" > ~/log_test/nginx/error.log

# Apache 로그
echo "테스트용 Apache access 로그" > ~/log_test/apache/access_log
echo "이건 테스트용 Apache error 로그입니다." > ~/log_test/apache/error_log

# 시스템 로그
echo "테스트용 messages 로그" > ~/log_test/system/messages.log
echo "테스트용 syslog 로그" > ~/log_test/system/syslog.log

테스트 확인 값 입니다.

설명:

  • `echo "문자열" > 파일` → 문자열을 파일로 저장. 파일이 없으면 새로 생성
  • 터미널에는 아무것도 안 나오지만, 파일은 생성됨
  • 내용 확인: cat ~/log_test/apache/error_log
  • 이제 logrotate 실습용 준비 완료

3. logrotate 주요 옵션

  • daily/weekly/monthly: 회전 주기
  • rotate N: 최대 N개 보관
  • compress: 회전된 로그 gzip 압축
  • copytruncate: 서비스 중 로그 안전 회전
  • missingok: 없는 파일 있어도 에러 안남
  • notifempty: 빈 로그는 회전하지 않음
  • create MODE USER GROUP: 새 로그 파일 권한 및 소유자 지정
  • delaycompress: 최신 로그는 다음 회전 때 압축
  • postrotate/prerotate: 회전 전후 스크립트 실행

4. 로그 회전 흐름 예시

Day1  access_log
Day2  access_log.1 ← Day1 백업
       access_log 새로 생성
Day3  access_log.2 ← Day2 백업
       access_log.1 ← Day1 이동
       access_log 새로 생성
Day4  access_log.3 ← Day3 백업
       access_log.2 ← Day2 이동
       access_log.1 ← Day1 이동
       access_log 새로 생성

5. 테스트용 logrotate 설정

nginx 로그

~/log_test/nginx/*.log {
    daily
    rotate 3
    compress
    copytruncate
    missingok
    notifempty
    create 0644 $USER $USER
    delaycompress
    postrotate
        echo "nginx 로그 회전 완료: $(date)"
    endscript
}

Apache 로그

~/log_test/apache/*_log {
    daily
    rotate 3
    compress
    copytruncate
    missingok
    notifempty
    create 0640 apache apache
    delaycompress
    postrotate
        systemctl reload httpd
    endscript
}

시스템 로그

시스템 로그 회전은 `/etc/logrotate.d/system_logs` 파일 생성

sudo nano /etc/logrotate.d/system_logs

내용 예시:

/var/log/messages /var/log/syslog /var/log/secure /var/log/cron {
    weekly
    rotate 4
    compress
    copytruncate
    missingok
    notifempty
}

---

6. 시뮬레이션

logrotate -d ~/log_test/nginx/logrotate.conf
logrotate -d ~/log_test/apache/logrotate.conf
sudo logrotate -d /etc/logrotate.d/system_logs
  • 회전 순서, 압축 여부, 권한 확인
  • postrotate 메시지 확인

7. 실제 서버 적용

nginx 로그

/var/log/nginx/*.log {
    daily
    rotate 7
    compress
    copytruncate
    missingok
    notifempty
    create 0640 nginx adm
    delaycompress
    postrotate
        systemctl reload nginx
    endscript
}

Apache 로그

/var/log/httpd/access_log /var/log/httpd/error_log {
    daily
    rotate 7
    compress
    copytruncate
    missingok
    notifempty
    create 0640 apache apache
    delaycompress
    postrotate
        systemctl reload httpd
    endscript
}

시스템 로그

/etc/logrotate.d/system_logs 파일로 회전 관리

8. cron 연동

sudo crontab -e
0 2 * * * /usr/sbin/logrotate /etc/logrotate.conf

9. 오류 대응

  • 권한 문제 → chown apache:apache /var/log/httpd/*.log
  • 회전 실패 → copytruncate, 경로, 옵션 확인
  • cron 미동작 → 절대 경로 사용, 로그 확인
  • 압축 후 접근 불가 → gzip 권한 확인

10. 추가 팁

  • 트래픽 많은 서버 → daily, 적은 서버 → weekly
  • 보관 개수 → 디스크 용량과 로그 중요도 고려
  • delaycompress → 부하 높은 서버 추천
  • postrotate → nginx/apache reload, 알림 등 활용
  • 테스트 환경에서 반복 실습 후 실제 적용

 

이 글을 따라하면 초보자도 nginx, Apache, 시스템 로그 회전, 자동 삭제, cron 연동, 심화 옵션까지 안전하게 실습할 수 있습니다. 명령어 의미까지 이해하고 테스트 환경에서 연습 → 실제 서버 적용 → 오류 대응까지 경험하며 **실무 감각과 서버 운영 능력**을 동시에 익힐 수 있습니다.