웹사이트 검색

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가 설치되어 있는지 확인하십시오.

  1. logrotate --version
Output
logrotate 3.8.7

Logrotate가 설치되어 있지 않으면 오류가 발생합니다. Linux 배포판의 패키지 관리자를 사용하여 소프트웨어를 설치하십시오.

Logrotate가 설치되어 있지만 버전 번호가 크게 다른 경우 이 자습서에서 설명하는 일부 구성에 문제가 있을 수 있습니다. 해당 man 페이지를 읽어 특정 Logrotate 버전에 대한 설명서를 참조하십시오.

  1. 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)을 구성합니다.), 4개의 로그 파일이 유지되고(rotate 4) 현재 로그 파일이 회전된 후 새로운 빈 로그 파일이 생성됩니다(create).

/etc/logrotate.d에서 패키지의 Logrotate 구성 파일을 살펴보겠습니다. cat apt 패키지 유틸리티용 파일:

  1. 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.loghistory.log에 대한 구성 블록이 포함되어 있습니다. 둘 다 동일한 옵션이 있습니다. 이러한 구성 블록에 설정되지 않은 옵션은 기본값 또는 /etc/logrotate.conf에 설정된 값을 상속합니다. apt 로그에 설정된 옵션은 다음과 같습니다.

  • rotate 12: 12개의 이전 로그 파일을 유지합니다.
  • 매월: 한 달에 한 번 순환합니다.
  • compress: 회전된 파일을 압축합니다. 이렇게 하면 기본적으로 gzip이 사용되며 .gz로 끝나는 파일이 생성됩니다. 압축 명령은 compresscmd 옵션을 사용하여 변경할 수 있습니다.
  • missingok: 로그 파일이 누락된 경우 오류 메시지를 작성하지 않습니다.
  • notifempty: 로그 파일이 비어 있으면 회전하지 마십시오.

더 많은 구성 옵션을 사용할 수 있습니다. 명령줄에 man logrotate를 입력하여 Logrotate의 매뉴얼 페이지를 불러오면 모든 내용을 읽을 수 있습니다.

다음으로 가상 서비스에 대한 로그를 처리하도록 구성 파일을 설정합니다.

예제 구성 설정

사전 패키지 및 사전 구성된 시스템 서비스 외부의 애플리케이션에 대한 로그 파일을 관리하기 위한 두 가지 옵션이 있습니다.

  1. 새 Logrotate 구성 파일을 만들고 /etc/logrotate.d/에 배치합니다. 이것은 다른 모든 표준 Logrotate 작업과 함께 루트 사용자로 매일 실행됩니다.
  2. 새 구성 파일을 만들고 Ubuntu의 기본 Logrotate 설정 외부에서 실행합니다. 이것은 루트가 아닌 사용자로 Logrotate를 실행해야 하거나 매일보다 더 자주 로그를 교체하려는 경우에만 실제로 필요합니다(/etc/logrotate.d의 시간별 구성). /는 시스템의 Logrotate 설정이 하루에 한 번만 실행되기 때문에 효과가 없습니다.

몇 가지 예제 설정과 함께 이 두 가지 옵션을 살펴보겠습니다.

/etc/logrotate.d/에 구성 추가

access.logerror.log/var/log/example-app/. www-data 사용자 및 그룹으로 실행됩니다.

/etc/logrotate.d/에 일부 구성을 추가하려면 먼저 새 파일을 엽니다.

  1. 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에 저장한 후 연습 실행을 수행하여 테스트할 수 있습니다.

  1. sudo logrotate /etc/logrotate.conf --debug

이것은 logrotate를 호출하고 표준 구성 파일을 가리키며 디버그 모드를 켭니다.

Logrotate가 처리하는 로그 파일과 로그 파일에 대한 작업에 대한 정보가 인쇄됩니다. 모든 것이 잘 보이면 완료된 것입니다. 표준 Logrotate 작업은 하루에 한 번 실행되며 새 구성을 포함합니다.

다음으로 Ubuntu의 기본 구성을 전혀 사용하지 않는 설정을 시도합니다.

독립적인 Logrotate 구성 만들기

이 예에서는 사용자 sammy로 실행 중인 앱이 있으며 /home/sammy/logs/에 저장된 로그를 생성합니다. 우리는 이러한 로그를 매시간 교체하려고 하므로 Ubuntu에서 제공하는 /etc/logrotate.d 구조 외부에서 이를 설정해야 합니다.

먼저 홈 디렉토리에 구성 파일을 만듭니다. 텍스트 편집기에서 엽니다.

  1. nano /home/sammy/logrotate.conf

그런 다음 다음 구성을 붙여넣습니다.

/home/sammy/logs/*.log {
	hourly
	missingok
	rotate 24
	compress
	create
}

파일을 저장하고 닫습니다. 이전 단계에서 이러한 모든 옵션을 보았지만 요약하자면 이 구성은 파일을 매시간 회전하고 24개의 오래된 로그를 압축 및 유지하고 회전된 로그를 대체할 새 로그 파일을 생성합니다.

애플리케이션에 맞게 구성을 사용자 지정해야 하지만 좋은 시작입니다.

작동하는지 테스트하기 위해 로그 파일을 만들어 보겠습니다.

  1. cd ~
  2. mkdir logs
  3. 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
Output
reading 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가 실행에 대한 몇 가지 정보를 기록했음을 알 수 있습니다.

  1. cat /home/sammy/logrotate-state
Output
logrotate state -- version 2 "/home/sammy/logs/access.log" 2017-11-7-19:0:0

Logrotate는 본 로그와 마지막으로 회전을 고려한 시간을 기록했습니다. 한 시간 후에 동일한 명령을 실행하면 로그가 예상대로 회전됩니다.

Logrotate가 강제로 로그 파일을 회전시키려면 --force 플래그를 사용하십시오.

  1. logrotate /home/sammy/logrotate.conf --state /home/sammy/logrotate-state --verbose --force

이는 postrotate 및 기타 스크립트를 테스트할 때 유용합니다.

마지막으로 매시간 Logrotate를 실행하도록 cron 작업을 설정해야 합니다. 사용자의 crontab을 엽니다.

  1. crontab -e

그러면 텍스트 파일이 열립니다. 예상되는 기본 구문을 설명하는 일부 주석이 파일에 이미 있을 수 있습니다. 파일 끝에 있는 새 빈 줄로 커서를 이동하고 다음을 추가합니다.

crontab
14 * * * * /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를 실행하여 해당 매뉴얼 페이지를 읽을 수 있습니다.