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


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

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

CentOS/RHEL/Fedora 및 Debian/Ubuntu (다양한 경우)에서 /var/log 의 내용을 보면 다음과 같은 로그 파일과 하위 디렉터리를 볼 수 있습니다.

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

# ls /var/log
# ls /var/log

두 경우 모두 로그 이름 중 일부는 \"log\"에서 예상대로 끝나는 반면 다른 로그 이름은 날짜 (예 : CentOS의 maillog-20160822) 또는 압축 (auth.log.2.gz 고려)을 사용하여 이름이 바뀌는 것을 볼 수 있습니다. "데비안에서는 mysql.log.1.gz).

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

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

간단히 말해서, logrotate는 조건이 충족 될 때 (1 분 안에 더 자세히) 메인 로그의 이름을 바꾸거나 압축하여 다음 이벤트가 빈 파일에 기록되도록합니다.

또한 \"이전\"로그 파일을 제거하고 가장 최근의 로그 파일을 유지합니다. 물론 \"오래된\"의 의미와 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

우리는이 접근 방식을 고수 할 것인데, 이는 우리가 일을 정리하는 데 도움이 될 것이며 다음 예제에 데비안 상자를 사용하는 데 도움이 될 것입니다.

Linux에서 Logrotate 구성

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

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

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

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

  • weekly means that the tool will attempt to rotate the logs on a weekly basis. Other possible values are daily and monthly.
  • rotate 3 indicates that only 3 rotated logs should be kept. Thus, the oldest file will be removed on the fourth subsequent run.
  • size=10M sets the minimum size for the rotation to take place to 10M. In other words, each log will not be rotated until it reaches 10MB.
  • compress and delaycompress are used to tell that all rotated logs, with the exception of the most recent one, should be compressed.

지금 실제로 실행 되었다면 logrotate가 어떤 역할을하는지 알아보기 위해 드라 이런을 실행 해 보겠습니다. -d 옵션 다음에 구성 파일을 사용합니다 (실제로이 옵션을 생략하여 logrotate를 실행할 수 있음).

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

결과는 다음과 같습니다.

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

notifempty로 로그가 비어있는 경우 회전이 발생하지 않도록 방지 할 수도 있습니다. 또한 logrotate에게 참조를 위해 순환 된 로그를 시스템 관리자 (이 경우 [email protected])에게 메일로 보내도록 지시합니다 (이 경우 메일 서버를 설정해야하며 이는이 문서의 범위를 벗어납니다). ").

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 protected]
}

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

마지막으로 로그 수가 마침내 6 개에 도달하면 가장 오래된 로그가 [email protected]로 발송됩니다.

이제 회전이 발생할 때 사용자 지정 명령을 실행한다고 가정 해 보겠습니다. 이렇게하려면 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 및 Cron

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

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

요약

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

크론 작업으로 실행되도록 설정되어 있는지 확인하고 logrotate를 사용하면 작업이 훨씬 쉬워집니다. 자세한 내용은 man 페이지를 참조하십시오.

이 기사에 대한 질문이나 제안이 있습니까? 아래 의견 양식을 사용하여 언제든지 알려주십시오.