본문 바로가기
OS/Linux

리눅스 Log관리는 필수! Logrotate

by BTC_Crong 2023. 5. 19.

베하~! 안녕하세요! 1Tier팀 입니다~!

이번에는 리눅스를 운영하다 보면 로그를 통해 서버의 상태나 장애를 확안하게 되는데, 이때 쌓이는 로그들을 효율적이고 편리하게 관리할 수 있도록 해주는 Logrotate에 대해 알아보고자 합니다!!

 

Logrotate

로그들이 쌓이면서 크기가 커지게 되는데 로그가 너무 커지기 전에 관리되도록 설정하는 기능.

OS 설치 시 가본적으로 설치 되어있으며 기본적으로 cron 데몬을 이용하여 실행합니다.

설치 확인방법은 다음과 같습니다.

<Debian 계열>
root@localhost:~# dpkg -l | grep logrotate

<Redhat 계열>
[root@localhost ~]# rpm -qa | grep logrotate

Logrotate 파일 구조

데몬 프로그램 : /usr/sbin/logrotate
Logrotate 데몬 설정파일 : /etc/logrotate.conf
Logrotate를 프로세스 설정파일 : /etc/logrotate.d/
Logrotate 작업내역 로그 : /etc/cron.daily/logrotate

Logrotate 실행 순서

logrotate.conf 

Logrotate의 설정 파일이며 해당 파일에서 로그의 회전 주기, 개수, 새 로그 파일의 생성 주기와 파일명, 압축 등 다양한 옵션을 통해 사용자의 편의에 맞춰 설정할 수 있습니다.

logrotate.conf 설정 방법

- daily : 매일 실행

- weekly : 매주 실행

- monthly : 매달 실행

- yearly : 매년 실행

- rotate [갯수] : 갯수만큼만 보관

- compress : 해당되는 로그파일을 gzip형태로 압축

- compressext [압축형태] : 압축된 백업 로그파일에 지정할 확장자 설정 ex) .bz2

- nocompress : 해당되는 로그파일은 압축하지 않음(Default)

- compresscmd [압축실행파일 경로] : gzip 이외의 형태로 저장시 지정 ex) /bin/bzip2

- uncompresscmd [압축해제실행파일 경로] : 압축해제 명령 지정 (Default : gunzip)

- compressoptions [옵션] : 압축 옵션 설정 (-9 : 최대 압축률)

- dateext : 로그파일명에 확장자 추가(Default : YYYYMMDD)

- dateformat [date형식 지정] : YYYYMMDD 형식이 아닌 다른 형식으로 사용시 지정 (Default : -%Y%m%d)

- errors [메일주소] : 에러 발생시 해당 메일주소로 메일 발송

- mail [메일주소] : 실행시 이전 로그파일을 해당 메일주소로 발송

- extention [확장자명] : 해당 확장자로 생성

- missingok : 로그파일이 없을경우에도 에러 처리하지 않음

- ifempty : 로그파일이 비어있는 경우에도 실행(기본값)

- notifempty : 로그파일이 비어있는 경우 실행하지 않음

- prerotate / endscript : 실행 전 스크립트 파일 실행

- postrotate / endscript : 실행 후 스트립트 파일 실행

- sharedscripts : 로그파일이 여러개 있어도 스크립트를 공유하여 prerotate, postrotate 스크립트를 한번만 실행

- nosharedscripts : 로그파일이 여러개일 경우 prerotate, postrotate 스크립트를 각각 실행(Default)

- copytruncate : 현재 로그파일 복사 후 원본 로그파일 크기 0으로 생성

- maxage [숫자] : 해당 숫자가 지난 백업 파일 삭제   ex) maxage 80 --> 80일이 지난경우 삭제

- size [사이즈] : 파일사이즈가 지정한 사이즈를 넘지않도록 설정
(Default : Byte, kilobytes인 경우 숫자k, Megabytes인 경우 숫자M, Gigabytes인 경우 숫자G)

logrotate.conf 예시

[root@server ~]# cat /etc/logrotate.d/apache 
/server/apache2/logs/*log {
    daily
    rotate 5
    notifempty
    missingok
    compress
    sharedscripts
    postrotate
        /server/apache2/bin/apachectl graceful
    endscript
}
daily : 일단위로 실행합니다
rotate 5 : 회전 주기를 설정합니다
notifempty : 로그파일의 내용이 없을경우 rotate 하지 않습니다
missingok : 로그파일이 없을경우 에러메시지를 출력하고 다음으로 실행합니다
compress : 로그파일을 압축합니다
sharedscripts : 여러개의 로그파일을 스크립트로 공유하여 실행합니다
postrotate : 실행 후 스크립트 파일 실행합니다 /server/apache2/bin/apachectl graceful
endscript : 실행 후 스크립트 파일 실행합니다

정상적으로 rotate 되는지 확인 하는 방법

Dry run (debugging)

-vd 옵션으로 디버깅을 해주면 된다.

-v : 결과출력 옵션
-d : 디버깅 옵션

/usr/sbin/logrotate -vd /etc/logrotate.conf

 

개인 실습이나 프로젝트에서는 로그 관리가 비교적 중요하지 않지만 실무에서, 큰 프로젝트나 협업 등 규모가 커지면 커질 수록 로그의 중요성도 올라가고 그에 따른 로그 관리도 디스크 효율과 장애 대응을 위해 반드시 해야하는 작업입니다. 

기본적인것 부터 철저하게 관리하는 습관을 갖고 앞으로도 철두철미하게 업무에 임해야겠습니다.

다음에도 중요하고 좋은 정보로 돌아오겠습니다! 베빠~! 

'OS > Linux' 카테고리의 다른 글

Mod_proxy_ajp를 통한 web-was 연동  (0) 2023.05.31
[Linux]inode 이해하기  (0) 2023.05.29
[Linux] 셸 스크립트(5)  (0) 2023.02.15
[Linux] 셸 스크립트(4)  (0) 2023.02.03
[Linux] 셸 스크립트(3)  (0) 2023.01.26

댓글