상세 컨텐츠

본문 제목

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

리눅스 정보실

by 고지존 2025. 8. 26. 12:34

본문

리눅스 서버에서는 로그가 빠르게 쌓이면 디스크 부족, 서비스 지연, 로그 확인 어려움 문제가 발생합니다. 이 글은 초보자가 **보고 바로 따라하며 실습**할 수 있도록, 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 연동, 심화 옵션까지 안전하게 실습할 수 있습니다. 명령어 의미까지 이해하고 테스트 환경에서 연습 → 실제 서버 적용 → 오류 대응까지 경험하며 **실무 감각과 서버 운영 능력**을 동시에 익힐 수 있습니다.

관련글 더보기