Mongodb-로그를 회전시키는 올바른 방법


13

몽고 문서 는 내가 할 수 있다고 말합니다.

  1. -SIGUSR1 신호를 사용하고 이전 로그의 이름을 바꾸고 전류를 전환하십시오.
  2. OS에서 logrotate 사용

OS의 logrotate 기능으로 오래된 파일을 압축하고 가장 오래된 파일을 제거하지만 SIGUSR1을 보내는 것 이외의 현재 로그를 전환하도록 mongod 프로세스에 지시하는 방법을 보지 못합니다.

그래서 나는 썼다

/var/log/mongodb/*.log {
    daily
    rotate 5
    compress
    dateext
    missingok
    notifempty
    sharedscripts
    postrotate
        /usr/bin/killall -SIGUSR1 mongod
        /usr/bin/killall -SIGUSR1 mongos
    endscript
}

/etc/logrotate.d/mongo로

그리고 이제 mongodb.log.2013-09-18T23-49-44SIGUSR1 전환의 흔적 과 같이 로그 회전 및 빈 로그 파일에서 이름이 지정된 로그 파일을 얻습니다 . 후자를 제거하는 방법?

답변:


11

copytruncate는 로그 회전에 매우 효과적입니다.

이와 비슷한 구성이 당신을 위해 일해야합니다.

/var/log/mongodb/*.log {
  daily
  missingok
  rotate 5
  compress
  dateext
  delaycompress
  copytruncate
  notifempty
}

1
이것은 RedHat 6.5에서 작동하지 않았습니다. 로그는 회전되었지만 원본 .log 파일은 계속 커지지 않았습니다.
Thomas Bratt

@ThomasBratt 이것은 mongo 프로세스를 다시 시작하지 않고 파일 핸들러가 열린 상태로 유지되기 때문에 정확합니다. fwics이 방법은 잘 작동하지 않습니다.
Mxx

@ThomasBratt이 답변을 살펴보십시오 stackoverflow.com/a/8396266/949859
Mxx

1
@Mxx 니스의 발견은 - copytruncate 같은 외모는 로그 파일 잘라내는 몽고에 대한 신호는 A postrotate 단계로 작동합니다
토마스 브랫

15

logrotate를 사용하여 로그 파일을 이동 한 후 SIGUSR1을 mongod로 보내면 서버가 충돌했습니다.

다음 구성은 우분투 12.04에서 2.6.6으로 테스트 한 버전에 안전합니다. 이전 예제는 서버와 충돌했습니다. 이것을 /etc/logrotate.d/mongod에 넣으십시오.

/var/log/mongodb/mongodb.log {
    weekly
    missingok
    rotate 4
    compress
    notifempty
    create
    postrotate
        /usr/bin/pkill -USR1 mongod
        rm /var/log/mongodb/mongodb.log.????-??-??T??-??-??
    endscript
}

자세한 내용과 위에서 사용한 Akshay Kumar의 제안에 대해서는 https://jira.mongodb.org/browse/SERVER-11087 을 참조하십시오 (로그 파일에 nocreate 및 cp / dev / null 대신 create 사용).

이후 릴리스에는 파일 이름을 바꾸지 않고 파일을 다시 여는 데 사용할 수있는 logRotate 옵션이 있어야합니다. 이름 바꾸기 문제를 해결할 수 있지만 내 버전에서는 작동하지 않습니다 (지원되지 않음).

참조 : https://github.com/mongodb/mongo/commit/616461d294bd9f5054ca38b302b6fc5d70fde20c

나는 이것을 테스트했다.

logrotate -v -f /etc/logrotate.d/mongod

CentOS 7의 Mongo 2.6.11에서 훌륭하게 작동합니다.
Tim

mongodb.log를 mongod.log로 바꿔야했고 작동합니다
cwhisperer

경우에 확인 할 수 systemLog.logRotate: reopen있는 mongod.conf의도 것도 만들어지지로 이름이 바뀐 로그 파일에는 삭제가 필요하지 않습니다으로, 다음 pkill에가 작동합니다.
Julian H. Lam

15

mongodb 3.0부터 logRotate 매개 변수를 사용하여 mongodb의 동작을 변경할 수 있습니다. /etc/mongod.conf에서 변경하십시오.

systemLog:
  logAppend: true
  logRotate: reopen

Mongo 매뉴얼 도 참조하십시오 .

그런 다음이 logrotate 구성을 사용할 수 있습니다.

/var/log/mongodb/*.log {
    daily
    rotate 30
    size 50M
    compress
    dateext
    missingok
    notifempty
    sharedscripts
    postrotate
        /bin/kill -SIGUSR1 `cat /var/lib/mongodb/mongod.lock 2> /dev/null` 2> /dev/null || true
    endscript
}

구성 파일에서 생성 된 PID 파일을 사용해야합니다 .... processManagement.pidFilePath구성 또는 SystemD 장치 파일의 PIDFile 설정 ( /var/run/mongodb/mongod.pid나를 위해) 참조
Gert van den Berg

0

다음은 나를 위해 일했습니다.

/var/log/mongo/mongod.log {
    missingok
    rotate 3
    size 100M
    nodateext
    postrotate
            /usr/bin/kill -USR1 $(cat /var/run/mongod.pid)
            rm -f /var/log/mongo/mongod.log.[0-9][0-9][0-9][0-9]-*
    endscript
}

노트:

  • RedHat 6.5에서 테스트
  • 작동하는 솔루션을 얻을 수있는 유일한 방법은 몽고가 생산하는 빈 로그 파일을 삭제하는 것이 었습니다
  • 잠금 파일의 위치는 MongoDB 설치 방법에 따라 다릅니다.
  • killBash 내장이지만 logrotate는 아래에서 실행됩니다 -RedHat 6.5 /bin/sh에서는 인식되지 않습니다SIGUSR1
  • 나는 테스트하지 compress않았지만 단호하게 추가해야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.