홈 › 리눅스 운영 › 06 / 13

로그·디스크 운영 (logrotate·cron)

섹션 7진행 0 / 13

4. 응용 변형 예제

4.1 응급 처치 순서

디스크 100% 알림을 받았을 때 5분 안에 하는 순서입니다.

bash
df -h                                          # 1. 어느 파티션
du -xh --max-depth=2 / 2>/dev/null | sort -rh | head -n 10   # 2. 어느 폴더
lsof +L1 | grep -c deleted                     # 3. 지웠는데 열린 파일
: > /opt/tomcat/logs/catalina.out              # 4. 가장 큰 열린 로그 비우기
find /opt/myapp/logs -name '*.hprof' -mtime +1 -delete   # 5. 옛 힙 덤프

네 번째까지 하면 대개 수 GB 가 돌아옵니다. 원인을 고치지 않으면 다시 차므로 이후 logrotate 와 cron 을 넣습니다.

4.2 logback 자체 정리 설정

앱 쪽에서 먼저 정리하면 cron 은 보조가 됩니다.

xml
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
    <fileNamePattern>logs/app.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
    <maxFileSize>100MB</maxFileSize>
    <maxHistory>30</maxHistory>
    <totalSizeCap>3GB</totalSizeCap>
</rollingPolicy>

.gz 로 끝나는 패턴이면 logback 이 압축까지 합니다. totalSizeCap 은 날짜와 무관하게 총량 상한입니다.

4.3 journald 크기 제한

03 레슨의 systemd 로그도 디스크를 씁니다. /etc/systemd/journald.conf 에서 상한을 둡니다.

bash
journalctl --disk-usage                 # 현재 크기
sudo journalctl --vacuum-size=1G        # 1GB 까지 줄이기
sudo sed -i 's/^#SystemMaxUse=.*/SystemMaxUse=1G/' /etc/systemd/journald.conf
sudo systemctl restart systemd-journald

StandardOutput=append: 로 파일에 쓰게 했으면 저널에는 안 쌓이지만, 기본 설정이면 앱 stdout 이 전부 저널로 갑니다.

4.4 백업 후 삭제

바로 지우기 불안한 로그는 다른 파티션이나 NAS 로 옮긴 뒤 지웁니다.

bash
tar czf /backup/logs-$(date +%F).tgz -C /opt/myapp logs --remove-files
find /backup -name 'logs-*.tgz' -mtime +90 -delete

--remove-files 는 묶은 뒤 원본을 지웁니다. 01 레슨의 tar 옵션 위에 하나 더 붙은 것입니다.

4.5 cron 실행 여부 확인

예약이 실제로 돌았는지는 cron 로그로 확인합니다.

bash
sudo grep myapp-cleanup /var/log/cron | tail -n 3
journalctl -u crond --since today | grep find
tail -n 5 /opt/myapp/logs/cleanup.log

/var/log/cron 에 CMD (find ...) 줄이 있으면 실행은 된 것입니다. 결과는 명령이 직접 남긴 로그 파일에서 봅니다.