웹사이트 검색

Linux에서 Logrotate를 사용하여 로그 회전을 설정하고 관리하는 방법


Linux 시스템에서 가장 흥미로운(아마도 가장 중요한) 디렉터리 중 하나는 /var/log입니다. 파일 시스템 계층 표준에 따르면 시스템에서 실행되는 대부분의 서비스 활동은 이 디렉터리 또는 해당 하위 디렉터리 중 하나에 있는 파일에 기록됩니다.

이러한 파일은 로그라고 하며 시스템이 어떻게 작동하는지(및 과거에 어떻게 작동했는지) 조사하는 데 핵심입니다. 로그는 관리자와 엔지니어가 문제를 해결하는 동안 찾는 첫 번째 정보 소스이기도 합니다.

CentOS/RHEL/FedoraDebian/Ubuntu(다양한 경우)에서 /var/log의 내용을 보면 다음 로그 파일 및 하위 디렉터리.

귀하의 시스템에서 실행 중인 서비스와 서비스가 실행된 시간에 따라 귀하의 경우 결과가 다소 다를 수 있다는 점에 유의하십시오.

RHEL/CentOS 및 Fedora에서

ls /var/log

데비안과 우분투에서

ls /var/log

두 경우 모두, 로그 이름 중 일부가 “log ”로 예상대로 끝나는 반면 다른 이름은 날짜를 사용하여 이름이 바뀌는 것을 볼 수 있습니다(예: maillog-20160822) CentOS의 경우) 또는 압축(Debian의 경우 auth.log.2.gzmysql.log.1.gz 고려) 강하다>).

이는 선택한 배포판에 따른 기본 동작은 아니지만 이 기사에서 볼 수 있듯이 구성 파일의 지시문을 사용하여 마음대로 변경할 수 있습니다.

로그가 영원히 보관된다면 결국 /var/log가 있는 파일 시스템을 채우게 될 것입니다. 이를 방지하기 위해 시스템 관리자는 logrotate라는 유용한 유틸리티를 사용하여 정기적으로 로그를 정리할 수 있습니다.

간단히 말해서 logrotate는 조건이 충족될 때 기본 로그의 이름을 바꾸거나 압축하여(자세한 내용은 잠시 후) 다음 이벤트가 빈 파일에 기록되도록 합니다.

또한 “오래된” 로그 파일을 제거하고 최신 로그 파일을 유지합니다. 물론 “old”의 의미와 logrotate가 로그를 정리하는 빈도를 결정하게 됩니다.

Linux에 Logrotate 설치

logrotate를 설치하려면 패키지 관리자를 사용하세요.

---------- On Debian and Ubuntu ---------- 
aptitude update && aptitude install logrotate 

---------- On CentOS, RHEL and Fedora ---------- 
yum update && yum install logrotate

구성 파일(/etc/logrotate.conf)은 내부의 개별 .conf 파일에 더 구체적인 다른 설정이 배치될 수 있음을 나타낼 수 있다는 점에 유의할 가치가 있습니다. /etc/logrotate.d.

다음 줄이 존재하고 주석 처리되지 않은 경우에만 해당됩니다.

include /etc/logrotate.d

우리는 이 접근 방식을 고수할 것입니다. 이것이 일을 정리하는 데 도움이 되며 다음 예에서는 Debian 상자를 사용합니다.

Linux에서 Logrotate 구성

매우 다재다능한 도구인 logrotate는 로그가 회전되는 시기와 방법, 그리고 바로 다음에 어떤 일이 발생해야 하는지 구성하는 데 도움이 되는 많은 지시문을 제공합니다.

/etc/logrotate.d/apache2.conf에 다음 내용을 삽입하고(해당 파일을 만들어야 할 가능성이 높음) 각 줄을 검사하여 목적을 나타냅니다.

/var/log/apache2/* {
    weekly
    rotate 3
    size 10M
    compress
    delaycompress
}

첫 번째 줄은 블록 내부의 지시문이 /var/log/apache2 내부의 모든 로그에 적용됨을 나타냅니다.

  • 주간은 도구가 매주 로그 순환을 시도한다는 의미입니다. 다른 가능한 값은 일일 및 월간입니다.
  • rotate 3은 3개의 회전된 로그만 보관해야 함을 나타냅니다. 따라서 네 번째 후속 실행에서는 가장 오래된 파일이 제거됩니다.
  • size=10M은 회전이 수행되는 최소 크기를 10M로 설정합니다. 즉, 각 로그는 10MB에 도달할 때까지 순환되지 않습니다.
  • compressdelaycompress는 가장 최근 로그를 제외하고 순환된 모든 로그를 압축해야 함을 알리는 데 사용됩니다.

logrotate가 지금 실제로 실행된다면 어떤 일이 일어날지 알아보기 위해 연습 실행을 실행해 보겠습니다. 구성 파일 뒤에 -d 옵션을 사용하십시오(실제로 이 옵션을 생략하여 logrotate를 실행할 수 있습니다).

logrotate -d /etc/logrotate.d/apache2.conf

결과는 아래와 같습니다:

로그를 압축하는 대신 로그가 순환된 날짜를 따라 이름을 바꿀 수 있습니다. 이를 위해 dateext 지시문을 사용합니다. 날짜 형식이 기본 yyyymmdd가 아닌 경우 dateformat을 사용하여 지정할 수 있습니다.

notifempty를 사용하면 로그가 비어 있으면 회전이 발생하지 않도록 방지할 수도 있습니다. 또한, 교체된 로그를 시스템 관리자(이 경우 [email )에게 참조용으로 메일로 보내도록 logrotate에 지시합니다(이렇게 하려면 메일 서버를 설정해야 합니다. 이 기사의 범위를 벗어납니다.)

logrotate에 대한 이메일을 받으려면 다음과 같이 Postfix 메일 서버를 설정할 수 있습니다. Postfix 메일 서버 설치

이번에는 /etc/logrotate.d/squid.conf를 사용하여 /var/log/squid/access.log만 회전합니다.

/var/log/squid/access.log {
    monthly
    create 0644 root root
    rotate 5
    size=1M
    dateext
    dateformat -%d%m%Y
    notifempty
    mail [email 
}

아래 이미지에서 볼 수 있듯이 이 로그는 회전할 필요가 없습니다. 그러나 크기 조건이 (size=1M) 충족되면 순환된 로그의 이름이 access.log-25082020으로 변경됩니다(로그가 8월에 순환된 경우). 2020년 9월 25일) 및 기본 로그(access.log)가 액세스 권한이 0644로 설정되고 root로 다시 생성됩니다. Strong>을 소유자 및 그룹 소유자로 지정합니다.

마지막으로 로그 수가 6에 도달하면 가장 오래된 로그가 [email 로 전송됩니다.

이제 회전이 발생할 때 사용자 정의 명령을 실행한다고 가정해 보겠습니다. 그렇게 하려면 postrotate 지시문과 endscript 지시문 사이에 해당 명령이 포함된 줄을 배치하세요.

예를 들어, /var/log/myservice 내의 로그 중 하나가 교체될 때 루트로 이메일을 보내고 싶다고 가정해 보겠습니다. /etc/logrotate.d/squid.conf에 빨간색 줄을 추가해 보겠습니다.

/var/log/myservice/* {
	monthly
	create 0644 root root
	rotate 5
	size=1M
    	postrotate
   		echo "A rotation just took place." | mail root
    	endscript
}

마지막으로, 충돌이 발생할 경우 /etc/logrotate.d/*.conf에 있는 옵션이 기본 구성 파일의 옵션보다 우선한다는 점에 유의하는 것이 중요합니다.

로그로테이트와 크론

기본적으로 logrotate를 설치하면 /etc/cron.daily 내에 logrotate라는 이름의 crontab 파일이 생성됩니다. 이 디렉토리에 있는 다른 crontab 파일의 경우와 마찬가지로 anacron이 설치되지 않은 경우 오전 6시 25분부터 매일 실행됩니다.

그렇지 않으면 오전 7시 35분쯤에 실행이 시작됩니다. 확인하려면 /etc/crontab 또는 /etc/anacrontab에서 cron.daily가 포함된 줄을 살펴보세요.

요약

여러 로그를 생성하는 시스템에서는 logrotate를 사용하여 이러한 파일의 관리를 크게 단순화할 수 있습니다. 이 문서에서 설명했듯이 정기적으로 또는 파일이 지정된 크기에 도달하면 로그를 자동으로 회전, 압축, 제거 및 메일로 보냅니다.

cron 작업으로 실행되도록 설정되어 있는지 확인하면 logrotate가 작업을 훨씬 쉽게 만들어줍니다. 자세한 내용은 매뉴얼 페이지를 참조하세요.

이 기사에 대해 질문이나 제안 사항이 있습니까? 아래의 의견 양식을 사용하여 자유롭게 알려주십시오.