[MongoDB] logrotate

DataBase 2022. 7. 15. 16:24

 

 

우선 MongoDB 설정에 아래 내용이 적용되어 있어야 함.

systemLog:
    logAppend: true
    logRotate: reopen

 

pid, log 파일의 위치는 /var/log/mongodb 아래에 있다고 가정함.

 

/etc/logrotate.d/mongodb 라는 파일을 만들어 1일 단위로 일주일치 로그를 보관하도록 세팅.

/var/log/mongodb/*.log {
    # 매일
    daily
    # 일주일치
    rotate 7
    # 로그파일이 없어도 에러내지 않음
    missingok
    # rotate된 파일명 뒤에 -YYYYmmdd 붙임
    dateext
    # 여러 로그 파일이라도 스크립트는 1회만 실행
    sharedscripts
    # logrotate 실행 후 실행할 스크립트 지정
    postrotate
    	# SIGUSR1 시그널을 보내는 MongoDB 자체 log rotate 실행
        kill -s USR1 `cat /var/log/mongodb/*.pid`
    # 스크립트 종료
    endscript
}

 

이렇게 하면 rotate 될때마다 *.log-YYYYmmdd 파일이 생성됨.

 

퍼포먼스에 영향을 미칠 수 있는 copytruncate를 이용하지 않고 kill -SIGUSR1 을 사용하여 MongoDB 자체 log rotate 이용.

 

커맨드라인에선 잘 실행되던 kill -SIGUSR1 명령어가,

logrotate 내부 스크립트로 지정하면 kill이 시그널을 못알아먹고 SIGUSR1: invalid signal specification FAIL 에러가 발생해서 찾아보니,

SIGUSR1 같이 앞에 SIG가 붙는 형식은 POSIX 표준이 아님.

kill -s USR1 <pid> 혹은 kill -USR1 <pid> 형식으로 실행해야 shell을 가리지 않고 정상작동 함. 

 

 

 

 

Posted by bloodguy
,