리눅스 정보실
리눅스 로그 관리 실습 가이드 nginx, Apache, 시스템 로그 회전, 자동 삭제, cron 연동
고지존
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 연동, 심화 옵션까지 안전하게 실습할 수 있습니다. 명령어 의미까지 이해하고 테스트 환경에서 연습 → 실제 서버 적용 → 오류 대응까지 경험하며 **실무 감각과 서버 운영 능력**을 동시에 익힐 수 있습니다.