Ubuntu 16.04에서 Logrotate로 로그 파일을 관리하는 방법
소개
Logrotate는 로그 파일의 자동 회전 및 압축을 관리하는 시스템 유틸리티입니다. 로그 파일이 회전, 압축 및 정기적으로 정리되지 않으면 결국 시스템에서 사용 가능한 모든 디스크 공간을 소모할 수 있습니다.
Logrotate는 Ubuntu 16.04에 기본적으로 설치되며 기본 시스템 로그 프로세서인 rsyslog
를 포함하여 설치된 모든 패키지의 로그 회전 요구를 처리하도록 설정됩니다.
이 문서에서는 기본 Logrotate 구성을 탐색한 다음 가상의 사용자 지정 응용 프로그램에 대한 로그 회전을 구성합니다.
전제 조건
이 자습서에서는 Ubuntu 16.04의 초기 서버 설정에 설명된 대로 루트가 아닌 sudo 활성화 사용자가 있는 Ubuntu 16.04 서버가 있다고 가정합니다.
Logrotate는 다른 많은 Linux 배포판에서도 사용할 수 있지만 기본 구성은 상당히 다를 수 있습니다. 이 튜토리얼의 다른 섹션은 Logrotate 버전이 Ubuntu 16.04와 유사한 한 계속 적용됩니다. 1단계에 따라 Logrotate 버전을 확인하십시오.
시작하려면 sudo 사용 가능 사용자로 서버에 로그인하십시오.
Logrotate 버전 확인
비 Ubuntu 서버를 사용하는 경우 먼저 버전 정보를 요청하여 Logrotate가 설치되어 있는지 확인하십시오.
- logrotate --version
Outputlogrotate 3.8.7
Logrotate가 설치되어 있지 않으면 오류가 발생합니다. Linux 배포판의 패키지 관리자를 사용하여 소프트웨어를 설치하십시오.
Logrotate가 설치되어 있지만 버전 번호가 크게 다른 경우 이 자습서에서 설명하는 일부 구성에 문제가 있을 수 있습니다. 해당 man
페이지를 읽어 특정 Logrotate 버전에 대한 설명서를 참조하십시오.
- man logrotate
다음으로 Ubuntu에서 Logrotate의 기본 구성 구조를 살펴보겠습니다.
Logrotate 구성 탐색
Logrotate의 구성 정보는 일반적으로 Ubuntu의 두 위치에서 찾을 수 있습니다.
/etc/logrotate.conf
: 이 파일에는 일부 기본 설정이 포함되어 있으며 시스템 패키지가 소유하지 않은 일부 로그에 대한 회전을 설정합니다. 또한include
문을 사용하여/etc/logrotate.d
디렉터리의 모든 파일에서 구성을 가져옵니다./etc/logrotate.d/
: 로그 회전에 대한 도움이 필요한 설치 패키지가 Logrotate 구성을 배치하는 위치입니다. 표준 설치에서는apt
,dpkg
,rsyslog
등과 같은 기본 시스템 도구에 대한 파일이 이미 여기에 있어야 합니다.
기본적으로 logrotate.conf
는 루트 사용자와 syslog 그룹(su root syslog
이 소유한 로그 파일을 사용하여 매주 로그 회전(weekly
)을 구성합니다. code>), 4개의 로그 파일이 유지되고(rotate 4
) 현재 로그 파일이 회전된 후 새로운 빈 로그 파일이 생성됩니다(create
).
/etc/logrotate.d
에서 패키지의 Logrotate 구성 파일을 살펴보겠습니다. cat
apt
패키지 유틸리티용 파일:
- cat /etc/logrotate.d/apt
Output/var/log/apt/term.log {
rotate 12
monthly
compress
missingok
notifempty
}
/var/log/apt/history.log {
rotate 12
monthly
compress
missingok
notifempty
}
이 파일에는 /var/log/apt/
디렉토리에 있는 두 개의 서로 다른 로그 파일인 term.log
및 history.log
에 대한 구성 블록이 포함되어 있습니다. 둘 다 동일한 옵션이 있습니다. 이러한 구성 블록에 설정되지 않은 옵션은 기본값 또는 /etc/logrotate.conf
에 설정된 값을 상속합니다. apt
로그에 설정된 옵션은 다음과 같습니다.
rotate 12
: 12개의 이전 로그 파일을 유지합니다.매월
: 한 달에 한 번 순환합니다.compress
: 회전된 파일을 압축합니다. 이렇게 하면 기본적으로gzip
이 사용되며.gz
로 끝나는 파일이 생성됩니다. 압축 명령은compresscmd
옵션을 사용하여 변경할 수 있습니다.missingok
: 로그 파일이 누락된 경우 오류 메시지를 작성하지 않습니다.notifempty
: 로그 파일이 비어 있으면 회전하지 마십시오.
더 많은 구성 옵션을 사용할 수 있습니다. 명령줄에 man logrotate
를 입력하여 Logrotate의 매뉴얼 페이지를 불러오면 모든 내용을 읽을 수 있습니다.
다음으로 가상 서비스에 대한 로그를 처리하도록 구성 파일을 설정합니다.
예제 구성 설정
사전 패키지 및 사전 구성된 시스템 서비스 외부의 애플리케이션에 대한 로그 파일을 관리하기 위한 두 가지 옵션이 있습니다.
- 새 Logrotate 구성 파일을 만들고
/etc/logrotate.d/
에 배치합니다. 이것은 다른 모든 표준 Logrotate 작업과 함께 루트 사용자로 매일 실행됩니다. - 새 구성 파일을 만들고 Ubuntu의 기본 Logrotate 설정 외부에서 실행합니다. 이것은 루트가 아닌 사용자로 Logrotate를 실행해야 하거나 매일보다 더 자주 로그를 교체하려는 경우에만 실제로 필요합니다(
/etc/logrotate.d의
는 시스템의 Logrotate 설정이 하루에 한 번만 실행되기 때문에 효과가 없습니다.시간별
구성). /
몇 가지 예제 설정과 함께 이 두 가지 옵션을 살펴보겠습니다.
/etc/logrotate.d/에 구성 추가
access.log
및 error.log
를 /var/log/example-app/에 넣는 가상의 웹 서버에 대한 로그 회전을 구성하려고 합니다. 코드>.
www-data
사용자 및 그룹으로 실행됩니다.
/etc/logrotate.d/
에 일부 구성을 추가하려면 먼저 새 파일을 엽니다.
- sudo nano /etc/logrotate.d/example-app
다음은 이러한 로그를 처리할 수 있는 구성 파일의 예입니다.
/var/log/example-app/*.log {
daily
missingok
rotate 14
compress
notifempty
create 0640 www-data www-data
sharedscripts
postrotate
systemctl reload example-app
endscript
}
이 파일의 일부 새 구성 지시문은 다음과 같습니다.
create 0640 www-data www-data
: 지정된 권한(0640
), 소유자(www -data
) 및 그룹(또한www-data
).sharedscripts
: 이 플래그는 구성에 추가된 모든 스크립트가 각 파일이 순환되는 대신 실행당 한 번만 실행됨을 의미합니다. 이 구성은example-app
디렉토리에 있는 두 개의 로그 파일과 일치하므로postrotate
에 지정된 스크립트는 이 옵션 없이 두 번 실행됩니다.postrotate
에서endscript
로: 이 블록에는 로그 파일이 회전된 후 실행할 스크립트가 포함되어 있습니다. 이 경우 예제 앱을 다시 로드합니다. 이것은 때때로 애플리케이션이 새로 생성된 로그 파일로 전환되도록 하는 데 필요합니다.\npostrotate
는 로그가 압축되기 전에 실행됩니다. 압축에는 시간이 오래 걸릴 수 있으며 소프트웨어는 즉시 새 로그 파일로 전환해야 합니다. 로그가 압축된 후 실행해야 하는 작업의 경우lastaction
블록을 대신 사용하세요.
필요에 맞게 구성을 사용자 지정하고 /etc/logrotate.d
에 저장한 후 연습 실행을 수행하여 테스트할 수 있습니다.
- sudo logrotate /etc/logrotate.conf --debug
이것은 logrotate
를 호출하고 표준 구성 파일을 가리키며 디버그 모드를 켭니다.
Logrotate가 처리하는 로그 파일과 로그 파일에 대한 작업에 대한 정보가 인쇄됩니다. 모든 것이 잘 보이면 완료된 것입니다. 표준 Logrotate 작업은 하루에 한 번 실행되며 새 구성을 포함합니다.
다음으로 Ubuntu의 기본 구성을 전혀 사용하지 않는 설정을 시도합니다.
독립적인 Logrotate 구성 만들기
이 예에서는 사용자 sammy로 실행 중인 앱이 있으며 /home/sammy/logs/
에 저장된 로그를 생성합니다. 우리는 이러한 로그를 매시간 교체하려고 하므로 Ubuntu에서 제공하는 /etc/logrotate.d
구조 외부에서 이를 설정해야 합니다.
먼저 홈 디렉토리에 구성 파일을 만듭니다. 텍스트 편집기에서 엽니다.
- nano /home/sammy/logrotate.conf
그런 다음 다음 구성을 붙여넣습니다.
/home/sammy/logs/*.log {
hourly
missingok
rotate 24
compress
create
}
파일을 저장하고 닫습니다. 이전 단계에서 이러한 모든 옵션을 보았지만 요약하자면 이 구성은 파일을 매시간 회전하고 24개의 오래된 로그를 압축 및 유지하고 회전된 로그를 대체할 새 로그 파일을 생성합니다.
애플리케이션에 맞게 구성을 사용자 지정해야 하지만 좋은 시작입니다.
작동하는지 테스트하기 위해 로그 파일을 만들어 보겠습니다.
- cd ~
- mkdir logs
- touch logs/access.log
올바른 위치에 빈 로그 파일이 있으므로 logrotate
명령을 실행해 보겠습니다.
로그는 sammy가 소유하므로 sudo
를 사용할 필요가 없습니다. 그래도 상태 파일을 지정해야 합니다. 이 파일은 logrotate
가 마지막으로 실행했을 때 보고 수행한 내용을 기록하므로 다음에 실행할 때 수행할 작업을 알 수 있습니다. 이는 Ubuntu Logrotate 설정(/var/lib/logrotate/status
에서 찾을 수 있음)을 사용할 때 처리되지만 지금은 수동으로 수행해야 합니다.
이 예제에서는 Logrotate가 상태 파일을 홈 디렉토리에 바로 넣도록 할 것입니다. 접근 가능하고 편리한 곳이면 어디든 갈 수 있습니다.
logrotate /home/sammy/logrotate.conf --state /home/sammy/logrotate-state --verbose
Outputreading config file /home/sammy/logrotate.conf
Handling 1 logs
rotating pattern: /home/sammy/logs/*.log hourly (24 rotations)
empty log files are rotated, old logs are removed
considering log /home/sammy/logs/access.log
log does not need rotating
--verbose
는 Logrotate가 수행하는 작업에 대한 자세한 정보를 출력합니다. 이 경우 아무것도 회전하지 않은 것처럼 보입니다. Logrotate가 이 로그 파일을 보는 것은 이번이 처음이므로 알고 있는 한 파일은 0시간이 경과했으며 회전하면 안 됩니다.
상태 파일을 보면 Logrotate가 실행에 대한 몇 가지 정보를 기록했음을 알 수 있습니다.
- cat /home/sammy/logrotate-state
Outputlogrotate state -- version 2
"/home/sammy/logs/access.log" 2017-11-7-19:0:0
Logrotate는 본 로그와 마지막으로 회전을 고려한 시간을 기록했습니다. 한 시간 후에 동일한 명령을 실행하면 로그가 예상대로 회전됩니다.
Logrotate가 강제로 로그 파일을 회전시키려면 --force
플래그를 사용하십시오.
- logrotate /home/sammy/logrotate.conf --state /home/sammy/logrotate-state --verbose --force
이는 postrotate
및 기타 스크립트를 테스트할 때 유용합니다.
마지막으로 매시간 Logrotate를 실행하도록 cron 작업을 설정해야 합니다. 사용자의 crontab을 엽니다.
- crontab -e
그러면 텍스트 파일이 열립니다. 예상되는 기본 구문을 설명하는 일부 주석이 파일에 이미 있을 수 있습니다. 파일 끝에 있는 새 빈 줄로 커서를 이동하고 다음을 추가합니다.
crontab14 * * * * /usr/sbin/logrotate /home/sammy/logrotate.conf --state /home/sammy/logrotate-state
이 작업은 매일 매시 14분에 실행됩니다. logrotate
를 /usr/sbin/logrotate
의 전체 경로로 확장했지만 기본적으로 이전에 실행한 것과 동일한 logrotate
명령을 실행합니다. 안전한. 크론 작업을 작성할 때 가능한 한 명시적으로 작성하는 것이 좋습니다.
파일을 저장하고 종료합니다. 이렇게 하면 crontab이 설치되고 작업이 지정된 일정에 따라 실행됩니다.
약 1시간 후에 로그 디렉토리를 다시 방문하면 회전되고 압축된 로그 파일 access.log.1.gz
(또는 Logrotate를 실행한 경우 .2.gz
)를 찾아야 합니다. --force
플래그 사용).
결론
이 자습서에서는 Logrotate 버전을 확인하고 기본 Ubuntu Logrotate 구성을 탐색하고 두 가지 유형의 사용자 지정 구성을 설정했습니다. Logrotate에 사용할 수 있는 명령줄 및 구성 옵션에 대해 자세히 알아보려면 터미널에서 man logrotate
를 실행하여 해당 매뉴얼 페이지를 읽을 수 있습니다.