반응형

1. 도입 및 배경 (Why?)
서버를 운영하다 보면 분명 어제까진 멀쩡하던 서비스가 갑자기 죽는 경우가 있음. 원인을 파악하려 로그를 보려 해도 No space left on device 에러만 출력되며 터미널조차 제대로 작동하지 않음.
범인은 대개 **'로그 파일'**임. 서비스가 내뿜는 로그가 무한정 쌓여 디스크 전체를 점령해버린 것임. 이때 필요한 것이 바로 Logrotate임. 오래된 로그는 압축하고, 더 오래된 로그는 삭제하여 서버의 '숨통'을 틔워주는 필수 관리 도구임.
2. 시스템 작동 구조 (What?)
Logrotate는 백그라운드에서 주기적으로 실행되며 아래와 같은 워크플로우를 가짐.
Plaintext
[Active Log: app.log] --(기준 충족: 크기/날짜)--> [Rotate: app.log.1]
|
[Delete: app.log.5] <--(Limit 도달)-- [Compress: app.log.2.gz]
3. 사전 준비 및 확인
대부분의 리눅스 배포판(Ubuntu, CentOS 등)에는 기본 설치되어 있음.
Bash
# logrotate 설치 여부 확인
logrotate --version
# 기본 설정 파일 위치 확인
ls -l /etc/logrotate.conf # 전역 설정
ls -l /etc/logrotate.d/ # 개별 서비스 설정 보관함
4. 핵심 작업 단계 (Step-by-Step)
우리가 만든 Blogger 에이전트나 Nginx의 로그를 관리하기 위한 개별 설정 파일을 생성함.
Bash
# 1. 에이전트 전용 로그 로테이트 설정 생성
sudo nano /etc/logrotate.d/blogger-agent
# 2. 아래 내용 작성 (예시)
/var/log/blogger-agent/*.log {
daily # 매일 실행
missingok # 로그 파일이 없어도 에러 내지 않음
rotate 7 # 최대 7개까지만 보관 (일주일치)
compress # 용량 절약을 위해 gzip 압축
delaycompress # 현재 로그 바로 다음 로그는 압축 지연 (분석 편의)
notifempty # 로그 내용이 비어있으면 로테이트 안 함
create 0640 root root # 새 로그 파일 생성 시 권한 설정
sharedscripts # 와일드카드 사용 시 스크립트 한 번만 실행
postrotate # 로테이트 후 서비스 재시작(필요 시)
/usr/bin/docker restart blogger_bot
endscript
}
5. 실제 적용 및 디버깅 (Advanced)
설정이 끝났다면 제대로 돌아가는지 **드라이 런(Dry-run)**으로 테스트해야 함. 실제 파일은 건드리지 않고 시뮬레이션만 수행함.
Bash
# 설정 파일 문법 및 실행 시뮬레이션
sudo logrotate -d /etc/logrotate.d/blogger-agent
# 강제로 로테이트 실행 (테스트용)
sudo logrotate -f /etc/logrotate.d/blogger-agent
6. 트러블슈팅 및 삽질 기록 (Troubleshooting Log) ★
■ 에러: 권한 문제로 로테이트 실패
- 상황: 로그 파일의 소유권이 root가 아닌 특정 유저일 때 발생함.
- 해결: 설정 파일 안에 su root root (혹은 해당 유저명) 옵션을 추가하여 명시적으로 권한을 지정해줘야 함.
■ 에러: postrotate 스크립트 실행 실패
- 상황: Docker 컨테이너 이름을 찾지 못하거나 경로가 절대경로가 아닐 때 발생.
- 해결: 반드시 /usr/bin/docker처럼 전체 경로(Full Path)를 사용하고, 실행 권한을 다시 확인할 것.
7. 관련 기록 및 내부 링크
- [Ubuntu Server - Docker-Compose 인프라 구축]: 로그가 발생하는 서비스 컨테이너 관리법.
- [Prometheus & Grafana 모니터링]: 디스크 사용량 임계치 알람 설정하기.
반응형
'Server Story....' 카테고리의 다른 글
| Windows Server 2022: MSSQL 외부 접속 설정 및 필수 보안 강화 (0) | 2026.04.02 |
|---|---|
| 리눅스 서버 용량 확장: NFS 연결과 /etc/fstab 자동 마운트 완벽 가이드 (0) | 2026.04.01 |
| 리눅스 모니터링 심화: Prometheus & Grafana 컨테이너 구축 (0) | 2026.04.01 |
| 리눅스 보안 심화: Fail2Ban으로 무차별 대입 공격(Brute Force) 차단하기 (0) | 2026.04.01 |
| Docker-Compose: 복잡한 서버 설정을 코드 한 줄로 관리하기 (0) | 2026.04.01 |