LogRotate의 로그 파일 순환 기본 방법 변경

LogRotate의 로그 파일 순환 기본 방법 변경

내가 관찰한 logrotation은 로그 파일, 즉 logrotate 프로세스를 다음 순서로 회전한다는 것입니다.

  1. 문제의 로그 파일(file1.log라고 함)을 새 이름으로 복사합니다(기존 이름에 타임스탬프나 숫자를 추가하여 file1.log-20140513이 됨).
  2. 기존 파일(file1.log)을 삭제하고 원래 이름(file1.log)으로 새 빈 로그 파일을 생성합니다.
  3. 압축 옵션이 설정된 경우 회전된 파일(file1.log-20140513)을 압축하여 새로운 압축 파일(file1.log-20140513.gz)을 생성합니다.
  4. 회전된 파일(file1.log-20140513)을 삭제하고 마지막으로
  5. 위의 4단계를 동일하게 수행하려면 다음 파일로 이동하세요.

이 프로세스에서 다음과 같은 문제가 있습니다.

  1. 내 로그 파일은 크기가 엄청나며(각각 10GB 이상) 이러한 로그 파일이 약 42개 있습니다.
  2. 이러한 파일에 쓰는 프로세스는 동기화되어 작동합니다.
  3. 서버의 DiskIO는 좋지만 그래도 복사하는 데 시간이 걸리고 압축에도 시간이 걸리고 압축에도 CPU가 소모됩니다.
  4. 새로 생성된 모든 로그 파일에 동일한 시간부터 로그가 시작되도록 하고 싶습니다.

이를 위해 logrotate가 이동하도록 하고 싶습니다. mv 명령이 수행하는 작업은 파일을 복사하는 대신 파일 이름을 바꾸는 것입니다. 압축의 경우 이를 비활성화하고 cron을 통해 예약된 다른 스크립트를 통해 압축을 트리거할 수 있습니다. 하지만 파일을 복사하는 대신 파일을 이동하려면 logrotate를 사용하고 싶습니다.

이제 logrotate 작성자도 디스크 IO와 전체 logrotate 작업을 완료하는 데 걸리는 시간을 확실히 절약할 수 있다고 생각했을 것입니다. 따라서 파일이 이동되거나 이름이 바뀌는 대신 복사되는 이유와 방법을 알고 싶습니다. logrotate를 통해 이것을 달성합니까?

참고: 수동으로 시도했습니다. 즉, 실행 중인 프로세스가 쓰고 있는 파일을 이동하고 동일한 이름과 동일한 권한(프로세스가 사용하는 권한이기도 한 루트인 루트)을 사용하여 새 빈 파일을 생성했습니다. 로 실행)을 실행했지만 새 파일을 이동하고 생성한 후 프로세스가 아무 것도 쓰지 않는 것을 확인하여 해당 파일에 쓰도록 프로세스를 다시 시작해야 했습니다. logrotate가 프로세스를 동일한 파일에 쓰도록 관리하지만 간단한 단계를 사용할 수 없는 이유에 대해 이 동작을 설명할 수 있는 사람이 있습니까?

답변1

설명하는 동작은 logrotate가 지시문을 통해 명시적으로 지시한 경우에만 발생합니다 copytruncate. 문서에서는 이 동작으로 인해 일부 로그 데이터가 손실될 가능성에 대해 경고합니다. 해당 지시문은 최후의 수단으로만 사용해야 합니다.

로그 파일을 교체하는 표준 방법은 이름을 바꾼 다음 프로세스에 신호를 보내 새 로그 파일을 열도록 하는 것입니다. 이는 더 빠르며 로그 일부가 손실될 위험이 없습니다. 그러나 새 로그 파일로 전환하려면 쓰기 프로세스가 필요합니다.

압축을 끄거나 다음 회전까지 연기할 수 있습니다. 지시문을 사용 하면 compress이전 로그 파일이 압축됩니다. 해당 지시문을 사용하지 않으면 압축되지 않습니다.

compress와 를 모두 delaycompress사용하면 다음 회전까지 압축이 지연됩니다. 이렇게 하면 각 회전 후에 두 개의 최신 로그 파일이 아직 압축되지 않습니다.

답변2

새 파일을 이동하고 생성한 후 프로세스에서 아무 것도 쓰지 않는 것을 확인하여 해당 파일에 쓰도록 프로세스를 다시 시작해야 했습니다.

프로세스가 동일한 파일에 쓰고 있으므로 이동 대신 로그 속도 복사가 수행됩니다. 로그를 삭제해도 프로세스는 여전히 로그에 기록하며 파일 시스템 사용량이 증가하는 것을 볼 수 있지만 파일은 없습니다. 프로세스를 다시 시작하면 디스크 공간이 확보됩니다.

고려하다

관련 정보