소개
Logrotate는 로그 파일의 자동 회전과 압축을 관리하는 시스템 유틸리티입니다. 로그 파일이 회전되고 압축되지 않고 주기적으로 가지치기되지 않으면 결국 시스템의 모든 사용 가능한 디스크 공간을 소비할 수 있습니다.
Logrotate는 Ubuntu 22.04에 기본으로 설치되어 있으며 rsyslog
와 같은 기본 시스템 로그 프로세서를 포함한 모든 설치된 패키지의 로그 회전 요구를 처리하도록 설정되어 있습니다.
본 문서에서는 기본 Logrotate 구성을 탐색한 다음 가상의 사용자 정의 응용 프로그램을 위해 로그 회전을 구성할 것입니다.
전제 조건
이 튜토리얼은 Ubuntu 22.04 서버에 비루트 sudo 활성화된 사용자가 있다고 가정합니다. 이 사용자는 Ubuntu 22.04에서 초기 서버 설정에서 설명한 것처럼 설정되어 있습니다.
Logrotate는 다른 많은 리눅스 배포판에서도 사용할 수 있지만 기본 구성은 상당히 다를 수 있습니다. Logrotate 버전이 Ubuntu 22.04와 유사하면이 튜토리얼의 다른 섹션은 여전히 적용됩니다. Logrotate 버전을 확인하려면 단계 1을 따르세요.
시작하려면 sudo가 활성화된 사용자로 서버에 로그인하십시오.
단계 1 — Logrotate 버전 확인
Logrotate는 기본적으로 Ubuntu에 설치되어 있습니다. 그러나 설치해야 하는 경우 패키지 목록을 업데이트하고 패키지를 가져오기 위해 다음 명령을 실행합니다:
Ubuntu 서버를 사용하는 경우 Logrotate가 설치되어 있는지 확인하려면 다음 명령을 사용하여 버전 정보를 요청하십시오:
Outputlogrotate 3.19.0
Default mail command: /usr/bin/mail
Default compress command: /bin/gzip
Default uncompress command: /bin/gunzip
Default compress extension: .gz
Default state file path: /var/lib/logrotate/status
ACL support: yes
SELinux support: yes
Logrotate가 설치되어 있지만 버전 번호가 크게 다른 경우, 이 튜토리얼에서 탐색되는 일부 구성 옵션에 문제가 있을 수 있습니다. Logrotate의 특정 버전에 대한 문서를 참조하여 해당하는 설정을 확인하십시오. 이를 위해 Logrotate의 매뉴얼 페이지 (man
)를 읽어야 합니다:
온라인 버전의 Logrotate 문서를 참고할 수도 있습니다. 다음으로 Ubuntu에서 Logrotate의 기본 구성 구조를 살펴보겠습니다.
단계 2 — Logrotate 구성 탐색
일반적으로 Ubuntu에서 Logrotate의 구성 정보는 두 군데에서 찾을 수 있습니다:
/etc/logrotate.conf
: 이 파일에는 몇 가지 기본 설정이 포함되어 있으며 시스템 패키지가 소유하지 않은 몇 가지 로그에 대한 회전을 설정합니다. 또한/etc/logrotate.d
디렉토리의 모든 파일에서 구성을 가져 오기위한include
문을 사용합니다./etc/logrotate.d/
: 로그 회전을 도와야하는 설치된 패키지가 배치하는 위치입니다. 표준 설치에서는apt
,dpkg
,rsyslog
등과 같은 핵심 시스템 도구에 대한 파일이 이미 여기에 있어야합니다.
logrotate.conf
는 기본적으로 주간 로그 회전을 구성하며, root 사용자와 syslog 그룹이 소유한 로그 파일이며, 한 번에 네 개의 로그 파일이 유지되고(rotate 4
), 현재 파일이 회전된 후에 새로운 빈 로그 파일이 생성됩니다(create
).
/etc/logrotate.d
에서 패키지의 Logrotate 구성 파일을 살펴 봅시다. apt
패키지 유틸리티를위한 파일을 cat
합니다:
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
에 설정된 값이 상속됩니다. logrotate 파일에서 설정된 설정은 /etc/logrotate.conf
에 구성된 logrotate의 기본값을 재정의합니다. apt
로그에 설정된 옵션은:
rotate 12
: 이전 로그 파일을 12개 유지합니다. 이것은 기본적으로rotate 4
를 덮어씁니다.monthly
: 한 달에 한 번 로테이트합니다. 이것은 기본적으로weekly
를 덮어씁니다.compress
: 로테이트된 파일을 압축합니다. 이것은 기본적으로gzip
을 사용하며 파일 확장자는.gz
입니다. 압축 명령은compresscmd
옵션을 사용하여 변경할 수 있습니다.missingok
: 로그 파일이 없으면 오류 메시지를 작성하지 않습니다.notifempty
: 로그 파일이 비어 있으면 로테이트하지 않습니다.
이러한 구성 파일은 기본적으로 새로운 로그를 생성하도록 Logrotate에 지시하는 기본 create
동작을 상속받습니다. 이는 nocreate
로 재정의될 수 있으나, 이렇게 하면 대부분의 다른 기능이 비활성화됩니다.
더 많은 구성 옵션이 있습니다. 모든 옵션에 대해 알아보려면 명령 줄에서 man logrotate
를 입력하여 Logrotate의 매뉴얼 페이지를 열어보세요.
다음으로, 가상의 서비스인 your-app
의 로그를 처리하기 위한 구성 파일을 설정하겠습니다.
단계 3 — 예제 구성 설정하기
미리 패키지화되어 사전 구성된 시스템 서비스 외의 응용 프로그램에 대한 로그 파일을 logrotate를 사용하여 관리하는 경우 두 가지 옵션이 있습니다:
/etc/logrotate.d/
에 새 Logrotate 구성 파일을 만들어서 저장하세요. 이 파일은 매일 root 사용자로 실행되며 다른 표준 Logrotate 작업과 함께 실행됩니다.- Ubuntu의 기본 Logrotate 설정 밖에서 새 구성 파일을 만들고 실행하세요. 이것은 Logrotate를 root 사용자가 아닌 사용자로 실행해야 할 때 또는 로그를 매일 이상 자주 회전시키려는 경우에만 실제로 필요합니다 (
/etc/logrotate.d/
에hourly
구성을 추가해도 시스템의 Logrotate 설정이 하루에 한 번만 실행되기 때문에 효과가 없습니다).
이 두 가지 옵션을 예제 설정과 함께 살펴보겠습니다.
/etc/logrotate.d/
에 구성 추가
우리는 가상의 웹 서버를 구성하여 /var/log/your-app/
에 access.log
와 error.log
를 생성합니다. 이는 www-data
사용자와 그룹으로 실행됩니다.
/etc/logrotate.d/
에 your-app
로그 파일에 대한 구성을 추가하려면 먼저 nano
나 기호에 따라 선호하는 편집기에서 /etc/logrotate.d
디렉토리에 새 파일을 엽니다:
새 구성 파일에 다음 줄을 추가하세요:
/var/log/your-app/*.log {
daily
missingok
rotate 14
compress
notifempty
create 0640 www-data www-data
sharedscripts
postrotate
systemctl reload your-app
endscript
}
이 파일의 일부 새로운 구성 지시문은:
create 0640 www-data www-data
: 이 명령은 지정된 권한(0640
), 소유자(www-data
), 그리고 그룹(또한www-data
)으로 로테이션 후에 새로운 빈 로그 파일을 생성합니다.sharedscripts
: 이 플래그는 설정에 추가된 모든 스크립트가 각 파일의 로테이션마다 실행되는 대신 한 번만 실행됨을 의미합니다. 경로/var/log/your-app/*.log
에 와일드카드*
가 포함되어 있기 때문에 이 구성은your-app
디렉토리에 있는 여러 개의 로그 파일과 일치합니다.sharedscripts
옵션이 없으면postrotate
에 지정된 스크립트는 이 옵션이 없는 로그 파일을 처리할 때마다 실행됩니다.postrotate
에서endscript
까지: 이 블록에는 로그 파일이 로테이션된 후에 실행할 스크립트가 포함됩니다. 이 경우 우리는 예제 앱을 다시 로드하고 있습니다. 이것은 때로는 응용 프로그램을 새로 생성된 로그 파일로 전환하기 위해 필요합니다.
postrotate
가 로그가 압축되기 전에 실행됨을 유의하십시오. 압축은 오랜 시간이 걸릴 수 있으며 소프트웨어는 즉시 새로운 로그 파일로 전환해야 합니다. 로그가 압축된 후에 실행해야 하는 작업에 대해서는 대신lastaction
블록을 사용하십시오.
nano
에서 저장 및 종료하려면 Ctrl+X
를 누르고, 프롬프트가 나타나면 Y
를 입력한 후 Enter
를 누르십시오. 구성 파일을 테스트하려면 다음과 같이 드라이런을 실행할 수 있습니다:
이 명령은 logrotate
를 호출하고, 표준 구성 파일을 가리키며, 디버그 모드를 켜는 것입니다.
로그회전이 처리하는 로그 파일 및 로그회전이 수행하는 작업에 대한 정보가 인쇄됩니다. 모든 것이 잘 보인다면 완료됩니다. 표준 로그회전 작업은 하루에 한 번 실행되며 새 구성이 포함됩니다.
다음으로, 우분투의 기본 구성을 전혀 사용하지 않는 설정을 시도해 보겠습니다.
단계 4 — 독립 로그회전 구성 작성
이 예제에서는 사용자 sammy
로 실행되는 앱이 있으며 /home/sammy/logs/
에 저장된 로그를 생성합니다. 이러한 로그를 매 시간 회전시키고 싶으므로 우분투에서 제공하는 /etc/logrotate.d
구조 외부에 이를 설정해야 합니다.
먼저 홈 디렉터리에 구성 파일을 만듭니다. 텍스트 편집기에서 엽니다:
다음으로 다음 구성을 붙여넣습니다:
/home/sammy/logs/*.log {
hourly
missingok
rotate 24
compress
create
}
파일을 저장하고 닫습니다. 이전 단계에서 이러한 옵션들을 모두 만났지만, 간략히 요약하면 이 구성은 파일을 매 시간 회전시키고, 이전 로그를 압축하여 보존하고, 회전된 파일을 대체하는 새 로그 파일을 생성합니다.
응용 프로그램에 맞게 구성을 사용자 정의해야 하지만, 이것은 좋은 시작점입니다.
구성이 작동하는지 테스트하려면 로그 파일을 만들어 봅시다. 먼저 cd ~
명령을 사용하여 사용자의 홈 디렉터리로 이동합니다. 그런 다음 mkdir
명령을 사용하여 로그를위한 디렉토리를 만듭니다. 마지막으로 touch
명령을 사용하여 logs
디렉토리에 빈 파일을 만듭니다. 이러한 단계를 완료하려면 다음 명령을 실행하십시오:
이제 올바른 위치에 빈 로그 파일이 있으므로 logrotate
명령을 실행해 봅시다.
sammy
가 소유한 로그이기 때문에 sudo
를 사용할 필요가 없습니다. 그러나 logrotate
가 실행된 마지막 시간에 찾은 내용과 취한 조치를 기록하는 상태 파일을 지정해야 합니다. 이 상태 추적은 기본 /etc/logrotate.conf
구성을 사용할 때 자동으로 처리됩니다. 상태 파일은 /var/lib/logrotate/status
에 저장됩니다. 기본 구성을 사용하지 않으므로 상태 파일 위치를 수동으로 구성해야 합니다.
이 예제에서는 Logrotate가 상태 파일을 직접 홈 디렉토리에 넣도록 합니다. 접근 가능하고 편리한 곳이라면 어디든지 상관 없습니다. 다음 명령을 실행하여 만든 /home/sammy/logrotate.conf
를 사용하고 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시간이 지났으므로 회전되지 않아야 합니다.
상태 파일을 cat
유틸리티를 사용하여 검토하면 Logrotate가 실행에 대한 일부 정보를 기록했다는 것을 알 수 있습니다.
Outputlogrotate state -- version 2
"/home/sammy/logs/access.log" 2022-07-2-19:0:0
Logrotate는 보았던 로그 및 마지막으로 회전을 고려한 시간에 대한 정보를 기록했습니다. 이와 같은 명령을 한 시간 뒤에 다시 실행하면 로그가 예상대로 회전됩니다.
그렇지 않을 때 로그 파일을 회전시키려면 --force
플래그를 사용하십시오:
이는 postrotate
및 기타 스크립트를 테스트할 때 유용합니다.
마지막으로, Logrotate를 매 시간 실행할 크론 작업을 설정해야 합니다. 사용자의 크론탭을 엽니다:
이것은 텍스트 파일을 엽니다. 크론을 사용하는 것이 처음이라면 기본 텍스트 편집기를 선택하라는 메시지가 표시될 수 있습니다. 기본값이 없는 경우 새 사용자를 위해 nano
를 권장합니다. 파일에는 이미 크론 구문을 설명하는 주석이 있을 수 있습니다. 파일의 끝에 새로운 빈 줄로 커서를 이동하고 다음을 추가하십시오:
crontab14 * * * * /usr/sbin/logrotate /home/sammy/logrotate.conf --state /home/sammy/logrotate-state
이 작업은 매 시간 14분에 매일 실행됩니다. 이전에 실행한 것과 거의 동일한 logrotate
명령을 실행하지만 logrotate
를 안전하게 전체 경로인 /usr/sbin/logrotate
로 확장했습니다. 크론 작업을 작성할 때 전체 경로를 사용하는 것이 좋은 실천입니다. 크론에 대해 자세히 알아보려면 다른 튜토리얼을 검토할 수 있습니다.
파일을 저장하고 나가십시오. 이렇게 하면 크론탭이 설치되고 지정된 일정에 따라 작업이 실행됩니다.
만약 1시간 후에 로그 디렉토리를 다시 방문하면 로테이션되고 압축된 로그 파일 access.log.1.gz
(또는 --force
플래그와 함께 Logrotate를 실행했다면 .2.gz
입니다).
결론
이 튜토리얼에서는 Logrotate 버전을 확인하고 기본 Ubuntu Logrotate 구성을 탐색하며 두 가지 다른 유형의 사용자 정의 구성을 설정했습니다. Logrotate에 대한 명령 줄 및 구성 옵션에 대해 자세히 알아보려면 터미널에서 man logrotate
를 실행하거나 온라인 문서를 방문하십시오.