단일 logrotate 인스턴스가 따라잡을 수 없는 경우 대량의 파일을 위한 고급 logrotate

단일 logrotate 인스턴스가 따라잡을 수 없는 경우 대량의 파일을 위한 고급 logrotate

저는 많은 수의 파일에 대한 원격 로그 저장소 역할을 하는 서버를 관리하고 있습니다. 현재 단일 logrotate인스턴스로는 이 로그 양을 따라잡을 수 없습니다. 로그 회전 속도를 높이는 가장 좋은 방법은 무엇입니까(여러 인스턴스를 병렬로 실행 가능)?

다음은 명확한 부록입니다.

  • 디스크 I/O는 문제가 되지 않습니다. 로그나 항목이 손실되지 않습니다.
  • 시스템은 이 작업에 비하면 괴물이며(전력이 풍부한 쿼드 코어 Xeon입니다) 병목 현상은 압축입니다. 하나의 코어가 1.00 로드에 도달했지만 압축 대기열을 완료할 수 없습니다.
  • 로그 파일은 복사되지 않습니다. 일일 백업을 다른 디스크에 저장하면 되지만 병목 현상도 발생하지 않습니다.
  • 패턴별로 로그 파일을 그룹화할 수 있습니다. 파일은 크지 않고 단지 많습니다. 로그 회전을 병렬화하는 방법을 모르고 아이디어가 있지만 리소스를 찾을 수 없습니다. 실제로 질문의 핵심은 logrotate가 구성 파일 또는 구성 파일의 각 스텁에 대해 하위 프로세스를 생성합니까?입니다.

답변1

logrotate의 여러 인스턴스를 실행할 수 있습니다. 서로 다른 파일 집합을 처리하고 서로 다른 상태 파일을 사용해야 합니다.

bzip 대신 gzip(표준 압축)을 사용해야 합니다. 내가 아는 한, gzip에 몇 가지 추가 옵션을 전달할 수 있으므로 더 빠른 압축을 사용하도록 지시할 수 있습니다.

답변2

귀하의 요구 사항에 대해 자세히 알려주십시오. 귀하의 서버를 제한하는 요인이 무엇인지 추측하기는 어렵습니다.

  • 디스크 I/O? 이러한 로그 파일을 디스크/파일 시스템 전체에 배포할 수 있습니다.
  • CPU - 이러한 로그를 회전할 때 압축됩니까? 내부 압축이나 하드웨어 가속 기능이 있는 파일 시스템을 사용할 수도 있습니다.
  • 디렉토리 캐시? Chris Card의 답변을 참조하세요. 파일을 여러 디렉터리에 분산시키고, 마찬가지로 중요한 것은 이러한 파일 이름의 초기 문자를 다르게 만드는 것입니다. 그렇지 않으면 해당 파일에 적용된 디렉터리 캐싱의 이점을 볼 수 없으므로 조회 속도가 크게 느려집니다.
  • 서버가 한도에 도달한 경우 로그 회전에 해당합니까, 아니면 로그 항목이 손실되었습니까?
  • 이러한 로그 파일을 복사하고 있습니까, 아니면 이동하고 있습니까(동일한 파일 시스템 내에서)?
  • ...

로그 파일의 구조를 설계하면 파일을 병렬로 회전시키는 데 아무런 문제가 없습니다.

추가된 요청에 응답하려면 편집하세요

내가 아는 한, logrotate 자체는 병렬화되지 않습니다. 명확한 구조가 확립되면 이를 수동으로 병렬화하는 몇 가지 방법(또는 적어도 문제가 되는 부분)을 탐색할 수 있습니다.

  • 압축 명령 자체: 래퍼 스크립트를 사용하여 압축을 수행할 수 있습니다. 스크립트가 즉시 반환되면 결과 gzip이 백그라운드에서 실행될 수 있습니다. 따라서 logrotate가 다음 로그 파일로 이동하는 동안 압축 작업이 계속 실행됩니다. 두 가지 참고사항:
    1. delaycompress프로세스가 SIGHUP되거나 새 로그를 시작하는 경우(프로세스에 따라) 로그 파일을 조작하는 것을 피하기 위해 안전하고 개방적인 것이 좋습니다 .
    2. 또한 CPU 시간을 두고 경쟁하는 많은 병렬 압축 작업을 피하기 위해 압축 작업이 "좋은" 상태가 되기를 바랍니다.
  • 복잡하다고 느끼는 경우(또는 로그 호스트를 제한하는 많은 수의 병렬 gzip 작업으로 끝나는 경우) 나중에 "compress 명령으로 생성된 목록에서 파일을 압축하는 작업자 프로세스 세트 작성으로 전환할 수 있습니다. " logrotate의 스크립트 구성에 설명되어 있습니다.
  • 몇 가지 계획을 통해 logrotate의 독립형 인스턴스를 실행할 수 있습니다.
    • 각 인스턴스에는 자체 구성 파일이 필요합니다.
    • 각 인스턴스에는 로그 파일을 모니터링하기 위한 자체 디렉터리 집합이 필요합니다. 이에 대해 별도의 crontab 항목을 설정할 수 있습니다(아마도 설정해야 합니다).
    • 각 인스턴스에는 자체 statefile(구성 가능) 가 필요합니다.

답변3

도움이 될 수 있는 한 가지는 모든 로그를 동일한 디렉터리에 저장하지 않는 것입니다. 동일한 디렉터리에 많은 파일을 저장하면 성능이 심각하게 저하될 수 있습니다.

답변4

호스트에 CPU 코어가 많지만 기본 압축 유틸리티가 단일 스레드이고 단일 코어에서 병목 현상이 발생하는 경우 다른 코어에서 더 많은 압축 처리량을 활용하여 압축 작업을 더 빠르게 완료할 수 있습니다. 예를 들어 gzip 대신 pigz, bzip2 대신 pbzip2를 사용합니다.

관련 정보