Apache2 로그파일 rotatelogs 통해 날짜 및 시간 기준으로 분할 설정
Apache2 웹 서버의 로그 파일 이름에 날짜를 포함시키는 방법은 주로 로그 파일을 관리하는 스크립트를 수정하여 구현할 수 있습니다. 기본적으로 Apache는 매일 또는 매주 로그 파일을 새로 생성하지 않지만, logrotate
와 같은 도구를 사용해 이를 자동화할 수 있습니다.
다음은 로그파일 이름에 날짜를 포함시키기 위해 logrotate
설정 파일을 수정하는 방법입니다.
- logrotate 설정 파일 찾기: Apache2의 로그 파일 관리를 위해
/etc/logrotate.d/apache2
파일을 사용할 수 있습니다. - 날짜 확장 사용: 로그 파일의 이름에 날짜를 포함시키기 위해
dateext
옵션을 사용합니다. 또한,dateformat
옵션을 통해 날짜 형식을 지정할 수 있습니다. - 설정 파일 수정 예시
daily
: 매일 로그 파일을 회전합니다.rotate 14
: 로그 파일 14개를 보관합니다.dateext
: 로그 파일 이름에 날짜를 추가합니다.dateformat -%Y%m%d
: 로그 파일 이름에 연도, 월, 일을 추가합니다. (예: access.log-20230513)/var/log/apache2/*.log { daily missingok rotate 14 compress delaycompress notifempty create 640 root adm dateext dateformat -%Y%m%d sharedscripts postrotate if /etc/init.d/apache2 status > /dev/null ; then \ /etc/init.d/apache2 reload > /dev/null; \ fi; endscript }
- 변경 사항 적용: 수정한 설정을 저장하고, 필요에 따라
logrotate
를 수동으로 실행하여 설정이 제대로 적용되는지 확인합니다.sudo logrotate -f /etc/logrotate.d/apache2
이 방법을 사용하면 Apache2 웹 서버의 로그 파일 이름에 자동으로 날짜가 포함되어 로그 파일 관리가 훨씬 용이해질 것입니다.
Apache에서 rotatelogs
를 사용하여 로그 파일 이름에 날짜를 포함시키는 방법은 매우 유용합니다. rotatelogs
는 로그 파일을 주기적으로 자동으로 회전시켜 주며, 사용자가 설정한 시간 간격이나 파일 크기에 따라 로그 파일을 새로 생성합니다. 또한, strftime
을 사용하여 로그 파일 이름에 날짜와 시간을 포함시킬 수 있습니다.
다음은 Apache의 httpd.conf
파일에 rotatelogs
를 설정하는 예시입니다. 이 설정을 통해 매일 자정에 로그 파일을 새로 생성하고, 파일 이름에 날짜를 포함시킬 수 있습니다.
기본 설정 추가 예시
- 일일 로그 파일 회전:이 명령은 매일 자정(86400초 마다)에
access_log-YYYYMMDD
형식으로 새로운 로그 파일을 시작합니다.-l
옵션은 로컬 시간을 기준으로 로그를 회전합니다.TransferLog "|/usr/bin/rotatelogs -l /var/log/apache2/access_log-%Y%m%d 86400"
- 파일 크기에 따라 로그 파일 회전:이 설정은 로그 파일 크기가 5MB에 도달하면 새 파일을 시작합니다. 파일 이름은 날짜로 태그가 붙어 관리가 용이합니다.
TransferLog "|/usr/bin/rotatelogs -l /var/log/apache2/access_log-%Y%m%d 5M"
추가 옵션 설명
-v
: 작업 중 발생하는 메시지를 표준 오류(stderr)에 출력합니다.-L path
: 로그 파일의 하드 링크를 지정된 경로에 생성합니다.-p prog
: 새 로그 파일을 열 때 지정된 프로그램을 실행합니다. 이는 로그 파일이 회전한 후 특정 작업을 자동으로 수행하게 할 때 유용할 수 있습니다.-f
: 프로그램 시작 시 로그 파일을 강제로 엽니다.-D
: 로그 파일의 상위 디렉토리가 존재하지 않는 경우 생성합니다.-t
: 로그 파일을 회전하는 대신 잘라내어(truncate) 계속 사용합니다. 이는 로그 파일을 'tail'하는데 유리합니다.-e
: 로그를 stdout으로 출력하여 추가 처리를 가능하게 합니다.-c
: 로그 파일이 비어 있어도 생성합니다.-n num
: 로그 파일을 회전시킬 때 '.1', '.2' 등의 접미사를 추가하여 파일을 구분합니다.
이 설정들을 통해 Apache 서버의 로그 관리를 자동화하고, 보다 효율적으로 로그 파일을 관리할 수 있습니다. 로그 파일 이름에 날짜를 포함시키면 로그 파일을 찾고 분석하는 작업이 훨씬 쉬워집니다.
기존에 사용하던 CustomLog
설정이 있다면, 새로운 로그 회전 방식을 사용하기 위해 이전 설정을 비활성화(주석 처리)하는 것이 좋습니다. 이렇게 하면 설정이 중복되어 발생할 수 있는 문제를 방지하고, 서버 구성을 깔끔하게 유지할 수 있습니다.
기존 CustomLog
설정을 주석 처리하고 새로운 TransferLog
또는 수정된 CustomLog
설정을 사용하는 방법은 다음과 같습니다.
- Apache 설정 파일 열기: 설정 파일(
httpd.conf
,apache2.conf
, 또는 도메인 관련 사이트 설정 파일 등)을 엽니다. - 기존 CustomLog 설정 찾기: 파일 내에서
CustomLog
지시어를 찾습니다. - 주석 처리
- 기존의
CustomLog
줄을 찾아 앞에#
을 추가하여 주석 처리합니다.#CustomLog logs/access.log combined
- 기존의
- 새 로그 회전 설정 추가
rotatelogs
를 사용한 새로운 로그 설정을 추가합니다.CustomLog "|/usr/bin/rotatelogs /var/log/apache2/access_log-%Y%m%d 86400" combined
- 설정 저장 및 Apache 재시작
- 수정한 설정을 저장하고, Apache를 재시작하여 변경사항을 적용합니다.
sudo systemctl restart apache2
- 수정한 설정을 저장하고, Apache를 재시작하여 변경사항을 적용합니다.
이렇게 설정을 변경한 후, Apache가 새로운 방식으로 로그를 회전시키며, 이전 방식은 더 이상 사용되지 않습니다. 로그 파일을 관리하는 데 있어서 명확하고 효율적인 방법을 제공합니다.
Apache의 환경 변수 또는 파이프를 사용하여 외부 스크립트로 로그를 전달하고, 그 스크립트에서 동적으로 파일 이름을 생성하는 방법을 사용할 수 있습니다. 이러한 방법을 통해 로그 파일 이름에 날짜를 포함시킬 수 있습니다.
- 외부 스크립트 사용: Apache 로그 출력을 외부 스크립트로 파이프하고, 이 스크립트에서 로그 파일을 날짜별로 생성하게 할 수 있습니다.
- 스크립트 예제
- 스크립트 파일을 만듭니다.
/usr/local/bin/apache-log-rotator
- 이 스크립트는 로그 데이터를 받아 현재 날짜를 기준으로 파일 이름을 생성합니다.
#!/bin/bash # Apache 로그 데이터를 날짜가 포함된 파일에 저장하는 스크립트 LOG_DIR="/var/log/apache2" DATE=$(date "+%Y-%m-%d") LOG_FILE="$LOG_DIR/access_log-$DATE.log" while read line; do echo "$line" >> "$LOG_FILE" done
- 스크립트 파일을 만듭니다.
- 스크립트 실행 권한 부여
chmod +x /usr/local/bin/apache-log-rotator
- Apache 설정 수정
- Apache 설정 파일 (
apache2.conf
또는 사이트 설정 파일)에서CustomLog
지시어를 수정하여 스크립트로 로그를 파이프합니다.
CustomLog "|/usr/local/bin/apache-log-rotator" combined
- Apache 설정 파일 (
- Apache 재시작
sudo systemctl restart apache2
이 설정을 통해, Apache 로그가 외부 스크립트로 전달되고, 스크립트는 입력된 로그 데이터를 날짜가 포함된 새로운 로그 파일에 저장합니다. 이 방법은 다소 복잡할 수 있으나, Apache에서 직접적으로 로그 파일 이름에 변수를 사용할 수 없을 때 유용한 대안이 될 수 있습니다.