리눅스 로그 분할

로그는 시스템에서 발생하는 다양한 이벤트 및 동작의 기록을 보여주는 중요한 도구입니다. 로그는 문제 해결 및 보안 감사 등 다양한 목적으로 사용되며, 일반적으로 리눅스 시스템에서 생성됩니다. 그러나 로그 데이터가 계속적으로 쌓이면 디스크 공간을 차지하고, 로그 파일 관리가 어려워질 수 있습니다.

이 문제를 해결하기 위해 로그를 분할하는 방법을 알아보겠습니다. Bash 쉘 스크립트를 사용하여 로그 파일을 일정 크기나 일정 기간에 따라 자동으로 분할할 수 있습니다. 이렇게 하면 로그 데이터가 관리 가능한 크기로 유지되며, 오래된 로그 데이터를 삭제하거나 아카이빙할 수 있습니다.

코드 예시

아래는 Bash 스크립트를 사용하여 로그를 분할하는 간단한 예시입니다.

#!/bin/bash

log_file="/var/log/application.log"
max_size=100 # 로그 파일의 최대 크기 (MB)

# 로그 파일이 설정한 크기를 초과할 경우 분할
if [ $(du -m "$log_file" | cut -f1) -gt $max_size ]; then
    mv "$log_file" "$log_file-$(date +%Y%m%d-%H%M%S)"
    touch "$log_file"
fi

이 스크립트는 log_file 변수에 지정된 로그 파일의 크기를 확인하고, 설정한 최대 크기인 max_size 변수와 비교하여 크기를 초과할 경우 분할합니다. 로그 파일은 현재 날짜와 시간을 파일 이름에 추가하여 이전 로그 파일과 구분됩니다. 그리고 새로운 로그 파일을 생성합니다.

이 스크립트는 크기 기준으로 로그 파일을 분할하지만, 기간을 기준으로 분할하는 방법도 가능합니다. 예를 들어, date 명령어를 사용하여 로그 파일의 최근 수정 일자를 확인하고, 설정한 기간 이상이 지났을 경우 분할하는 로직을 추가할 수 있습니다.

로그 분할 스케줄링

위의 예시 스크립트는 로그 파일 크기를 기준으로 분할하지만, 이 스크립트를 주기적으로 실행하여 로그를 분할하는 스케줄링이 필요합니다. 이를 위해 cron 서비스를 사용할 수 있습니다. cron은 리눅스에서 주기적인 작업을 예약할 수 있는 시스템 서비스입니다.

아래는 cron을 사용하여 스크립트를 매일 자정에 실행하는 예시입니다.

# cron 작업 추가
crontab -e

에디터가 열리면 아래와 같은 내용을 추가합니다.

0 0 * * * /path/to/log-split.sh

위의 예시에서는 매일 자정(0시 0분)에 /path/to/log-split.sh 스크립트를 실행합니다. 해당 스크립트는 로그 파일의 크기를 확인하고 분할 여부를 결정합니다.

결론

Bash 스크립트를 사용하여 리눅스 로그를 분할하는 방법을 알아보았습니다. 로그를 분할하면 로그 파일이 지나치게 커지는 것을 방지하고, 로그 데이터를 관리하기 쉽게됩니다. 이를 통해 시스템 성능 개선과 보안 감사 등에 도움이 될 수 있습니다. 이와 함께 cron을 사용하여 로그 분할 스케줄링을 설정하면 자동적으로 로그 파일이 분할되어 관리됩니다.