크로노 로그 vs 로그 로테이트


답변:


14

내 경험상 logrotate는 훌륭합니다. 매우 유연하며 대부분의 소프트웨어와 잘 작동합니다.

그러나 그것에는 몇 가지 문제가 있으며 cronolog는 주로 웹 로그 회전 기능이므로 logrotate + apache에 대한 경험을 적어 두었습니다.

logrotate를 할 때, logrotate가 access.log의 이름을 access.log.1로 바꾸더라도, 아파치가 inode에 쓸 때 access.log.1에 계속 쓰는 것처럼 아파치에게 로그가 회전하고 있음을 알려야합니다. 파일 이름을 바꾸더라도 inode 번호에는 영향을 미치지 않습니다.

데비안 에칭 (그리고 아마도 다른 많은 배포판)에서 logrotate는 아파치 로그를 회전시키는 데 사용됩니다. 이제 apache는 아파치 자식 프로세스가 기존 연결 서비스를 마치면 종료하고, 구성을 다시 읽은 다음 새 자식 프로세스를 생성하여 새 로그 파일에 쓰기 시작 하도록 조언 하는 정상적인 재시작 을 제공합니다. 회전).

이것은 훌륭한 솔루션처럼 들리지만, 우아한 재시작은 항상 특정 조건 (예 : 과부하)에서 작동하지는 않으므로 데비안 개발자는 아파치 logrotate 구성에서 정상적인 재시작 대신 아파치 재시작을 사용하기로 결정했습니다. 불행히도 이로 인해 모든 연결이 한 번에 끊어 지므로로드가 많은 사이트에는 매우 나쁩니다. 또한 아파치 재시작으로 인해 아파치 중지 및 시작과 같은 문제가 발생할 수 있습니다 (일부로드 상황에서도). 자세한 내용은 아래 버그 링크를 참조하십시오.

결론은 logrotate는 훌륭하지만 특정 프로그램의 특정 문제로 이어질 수 있다는 것입니다. 나는 cronolog에 대한 경험이 많지 않지만 파이프를 통해 로그를 작성하므로 로그 파일을 회전 할 때 아파치 다시로드가 필요하지 않으므로 기본적으로 위에서 설명한 모든 것을 해결합니다.

관련 logrotate / apache 데비안 버그 :

  1. 데비안 버그 # 301702
  2. 데비안 버그 # 400455

1
위의 해결책은 truncate를 사용하는 것입니다! 그것이하는 것은 access.log의 내용을 access.log.1에 복사 한 다음 access.log를 비우는 것입니다 (access_log의 inode 남아는 동일하게 유지됨). 일반적으로 몇 GB보다 큰 로그가 없으므로 (최악의 경우) 전체 프로세스에 오랜 시간이 걸리지 않습니다!
Nikolaidis Fotis

3

나는 cronolog를 선호하지만, 정말로 선호되는 것은 아닙니다.

cron이 시작한 위치를 logrotate하고 회전이 발생 해야하는 이유로 시스템이 다운되면 로그 파일이 회전하지 않습니다.

또한 로그 파일을 오랫동안 유지하기 때문에 로그 파일에 날짜 (% Y % m.combined.access.log)가있는 것이 좋습니다. 대부분의 시스템에서 기본적으로 apache logrotate는 파일 이름을 access.log, access.log.1 등으로 지정합니다. logrotate와 함께 로그 파일에서 날짜를 사용하는 것이 가능할 수도 있지만 마지막으로 보았던 방법을 알 수 없었습니다.


2
cron 시간이 지나면 logrotate가 작동하지 않는 문제는 "anacron"패키지를 설치하여 해결할 수 있습니다.
andrewd18 2016 년

또는 원하는 형식으로 로그를 저장할 수 있습니다. rsyslog의 템플릿 (% year %-% month %-% day % _lala.log)으로 로그를 저장할 수 있습니다. 이 경우 매일 이름이 변경되므로 로그를 회전 할 필요조차 없습니다!
Nikolaidis Fotis

2

logrotate 만 사용했습니다. 데비안이 기본적으로 사용하는 것이므로 불만이 없습니다.


2

나는 거의 독점적으로 cronolog이상을 사용 합니다 logrotate. logrotate데비안과 함께 제공되며 메일 서버 로그와 같은 시스템 서비스에서 계속 작동 할 수 있습니다. 그러나 Apache 및 lighttpd로그 파일의 경우 모두 cronolog입니다.

내가 사용하는 이유 중 하나는 cronolog모든 구성이 웹 서버 구성의 로그 파일 줄에서 발생하기 때문입니다.

예를 들어 lighttpd구성 파일에서 다음을 넣을 수 있습니다.

accesslog.filename = "|/usr/bin/cronolog --symlink=/var/log/webs/access.log /var/log/webs/%Y/%W-access.log"

그리고 다른 구성없이 매주 새로운 로그 파일을 얻습니다. 또는 창의력을 발휘하고 다음과 같은 작업을 수행 할 수 있습니다.

accesslog.filename = "|/usr/bin/cronolog --symlink=/var/log/webs/access.log /var/log/webs/%Y/%m/%a-access.log"

요일별로 트래픽을 보여주는 로그 파일을 얻습니다. 예를 들어 모든 일요일, 화요일마다.

더 좋은 점은 서버가 일정 시간 동안 다운 되어도 재시작시 올바른 로그 파일이 사용된다는 것입니다.


1
그것은 svlogd (runit 및 daemontools lineage)와 매우 비슷합니다.
Tobu
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.