Logrotate로 로그 정리하기

2019. 9. 29. 22:33·DevOps/etc

Logrotate를 사용해서 로깅이 좀 더 효율적으로 서버공간을 차지하도록 만들자

개발하고 있는 서비스의 로그 삭제 기준이 정해지지 않아 서버 disk 용량을 많이 차지했다.
최대한 가볍게 사용하려면 로그관리를 주기적으로 해줘야 함.


하지만 매번 수작업으로 한땀한땀 지울 수도 없으니까! Logroate를 사용하자!

어떤 프로그램들이 로그를 찍는가

개발하고 있는 서비스에서 로그를 찍는 프로그램:

  • Redis
  • Nginx
  • Web Application
    • logback
    • tomcat 로그

Logrotate

Web Application 은 logback 자체 설정과 톰캣의 log rotate 설정으로 인해 서버에서 특별하게 설정해 주어야 할 것은 없다.
반면에 Redis, Nginx에서는 해당 기능이 없기 때문에 자체적으로 rotate을 적용해주어야함. -> logrotate

logrotate는 시스템로그를 자동으로 rotate, 압축, 이메일 전송을 가능하게 한다. 설정에 따라 매일, 매주, 매달 주기적으로 로그 관리가 가능함.
설정파일에서 로그 주기를 설정하면 알맞는 cron job 디렉토리에 있는 logrotate 실행파일이 실행된다.

/etc/cron.hourly            // 1시간마다
/etc/cron.daily             // 매일 
/etc/cron.weekly            // 매주 
/etc/cron.monthly            // 매달

Logrotate 설정

sudo 권한이 있는 계정으로 아래의 작업을 진행한다.

설정값:

  • daily
    • 매일 해당 설정을 실행 (/etc/cron.daily 의 logrotate 가 실행됨).
  • missingok
    • 설정한 로그가 없는 경우에 에러 메세지를 출력하지 않는 설정.
  • copytruncate
  • rotate N: 지정한 숫자대로 로그를 N번 rotate.
  • dateext
    • 예전 버전의 로그파일명에 숫자를 (디폴트 설정) 붙이는 것 대신 날짜를 붙이는 설정.
    • ex) nginx.log-YYYYMMDD
  • notifempty
    • 로그가 비어있으면 rotate 하지 않는 설정.
  • sharedscripts
    • prerotate, postrotate 설정의 스크립트들이 한번만 실행하게 해주는 설정.
  • postrotate, endscript:
    • 파일 rotate 가 완료된 후 실행되는 스크립트. bin/sh 로 실행.

적용

  1. 로그를 관리하기 원하는 프로그램의 이름으로 파일을 생성합니다.
    sudo vim /etc/logrotate.d/[파일명]
  2. 아래와 같은 설정을 추가합니다. (nginx 설정 기준)
    [로그가 위치하는 경로]/*.log {
     daily
     missingok
     copytruncate
     rotate 30
     dateext
     notifempty
     sharedscripts
     postrotate
         [ ! -f [로그위치경로]/nginx.pid ] || kill -USR1 `cat [로그위치경로]nginx.pid`
     endscript
    }
  • 30일 기준으로 rotate
  • 매일 한개의 파일이 생성
  • 날짜가 append 된 형식으로 로그 파일 생성
  • 경로 설정 시 로그파일명을 명확하게 기입해도 됨
  • 경로 설정 시 전체 디렉토리에 적용시 ** 사용 가능
    • ex) [로그위치경로]/**/nginx.log
  1. 변경된 값을 적용합니다.
    • -f 옵션은 해당 설정을 cron job 주기보다 (daily, monthly 등) 먼저 당장 적용해야 할 때, logrotate 자체에서 rotate 할 로그가 없다고 판단하여도 rotate 를 강제로 실행할 수 있는 옵션입니다.
sudo logrotate -f /etc/logrotate.d/[file_name]

//위 command가 'command not found' 라는 에러가 출력될 때 
sudo /usr/sbin/logrotate -f /etc/logrotate.d/[file_name]  

결과 (nginx 로그)

결과

로그 정리 전


삭제 후


서버 디스크 사용량 변화

참고

  • https://unix.stackexchange.com/questions/259091/nginx-log-rotation-doesnt-seem-to-be-working-correctly
  • https://support.rackspace.com/how-to/understanding-logrotate-utility/
반응형
저작자표시 비영리 변경금지 (새창열림)

'DevOps > etc' 카테고리의 다른 글

놀고있는 노트북으로 homelab을 꾸려보자-2  (0) 2025.02.01
놀고있는 노트북으로 homelab을 꾸려보자-1  (0) 2025.02.01
[TIL] pip install 시 "Consider using the `--user` option or check the permissions" 에러  (0) 2021.01.30
crontab 을 사용해보자  (0) 2020.11.04
[curl] (60) SSL certificate problem: certificate has expired  (0) 2020.10.12
'DevOps/etc' 카테고리의 다른 글
  • 놀고있는 노트북으로 homelab을 꾸려보자-1
  • [TIL] pip install 시 "Consider using the `--user` option or check the permissions" 에러
  • crontab 을 사용해보자
  • [curl] (60) SSL certificate problem: certificate has expired
bandal-gom
bandal-gom
Devops & Backend Developer | tech blog
  • bandal-gom
    yayz's devlog
    bandal-gom
  • 전체
    오늘
    어제
    • 분류 전체보기 (68)
      • DevOps (22)
        • devops (4)
        • cicd (2)
        • docker (2)
        • monitoring (2)
        • nginx (4)
        • cache (1)
        • aws (1)
        • etc (6)
      • BE (21)
        • BE (3)
        • design pattern (1)
        • data structure (0)
        • spring (1)
        • algorithm (12)
      • devlog (24)
        • TIL (17)
        • programming language (2)
        • conference (2)
        • etc (3)
      • IT Review (1)
  • 블로그 메뉴

    • about.
    • 개발👩‍💻
    • etc.
  • 링크

    • Github
  • 공지사항

  • 인기 글

  • 태그

    항해99
    문제풀이
    개발자취업
    모각코
    젠킨스
    프로그래머스
    알고리즘
    hash
    99클럽
    코딩테스트준비
    티스토리챌린지
    java
    Kotlin
    알고리즘문제풀이
    til
    키보드케이블
    array
    homelab
    릿코드
    leetcode 347
    LeetCode
    jenkins
    Programmers
    time complexity
    키캡
    NGINX
    오블완
    Python
    algorithm
    노트북하기좋은카페
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
bandal-gom
Logrotate로 로그 정리하기
상단으로

티스토리툴바