박주니 개발 정리

logrotate 활용해서 log 백업 본문

라라벨

logrotate 활용해서 log 백업

박주니 2023. 9. 25. 20:14
728x90
반응형

설명 이유)

모든 기록들이 로그로 쌓이게 되는데 프로젝트를 작게 시작할 때는 괜찮지만 스케일이 커지고 스케줄러 및 대량 데이터를 관리하다보면 로그 데이터 사이즈가 커지면서 여러 문제를 야기하는 것을 보게 되었습니다. 그래서 현재 필요하지 않는 로그에 대해서 압축 및 초기화를 진행해서 최대한 데이터사이즈를 줄여서 중간에 실행이 중단되지 않기 위해 적용하게 되었습니다. 

 

1. logrotate 설치합니다. 

sudo apt-get install logrotate

추가 설명) 저는 vagrant 환경에서 진행했기 때문에 접속한 후 logrotate를 설치 진행했습니다. 

2. 현재 프로젝트 로그 파일 위치를 확인합니다. 

추가 설명) laravel에서 storage에 logs폴더 안에 log가 존재합니다. 이제 이 파일 위치를 파악한 후 적용해야합니다. 

 

3. /etc/logrotate.d/laravel.logs 에 해당 내용을 작성합니다. 

/path-to-your-project/storage/logs/*.log {
    su vagrant vagrant #사용자 
    daily             # 매일 로그 회전
    rotate 7          # 7개의 로그 파일을 유지 (예: laravel.log, laravel.log.1, ...)
    compress          # 로그 회전 후 오래된 로그 파일을 압축 (gzip)
    missingok         # 로그 파일이 없어도 에러를 반환하지 않음
    notifempty        # 로그 파일이 비어있으면 회전하지 않음
    create 0644 www-data www-data  # 새 로그 파일을 생성할 때의 권한과 소유자
    delaycompress     # 바로 직전 로그 파일만 압축하지 않고 나머지는 압축 (즉, laravel.log.1은 압축하지 않음)
}

추가 설명) 만약 저와 같은 vagrant 환경이시라면 접속했을 때 /etc/logrotate.d까지는 폴더가 존재합니다. 

존재하지 않을경우 laravel셋팅부터 logrotate 설치까지 제대로 되지 않은 것이니 다시 한번 검토하시길 바랍니다. 

  • logrotate.d 폴더까지 들어가셨다면 laravel-logs 파일을 생성합니다. 
sudo nano /etc/logrotate.d/laravel-logs

그 이후에는 상단에 코드를 넣는데 /path-to-your-project는 현재 프로젝트 명을 적으시면 됩니다. 그리고 만약에 제 laravel 셋팅을 따라서하셨다면 이 위치로 설정하시고 여기서 폴더 구조를 확인하고 조금 수정하시면 됩니다. 폴더 위치를 제대로 설정안하면 제대로 로그를 찾지 못하니 꼭 루트를 잘 찾아서 입력해야합니다. 

/home/vagrant/code/project 이름

tip) su vagrant vagrant 되어있는 부분이 있는데 이건 현재 로컬환경에서는 laravel log가 vagrant 환경이여서 이렇게 작성한 것이고 예를 들어서 ec2 실서버 적용이 되었다면 ubuntu로 되어있기 때문에 su ubuntu ubuntu 로 하셔야합니다. 그런데 먼저 입력하시기전에

ls -l /프로젝트 명/storage/logs/

현재 어떤 사용자로 설정되어야하는 지 찾고 진행하시길 바랍니다. 잘모르시겠다면 해당 코드를 작성했을 때 나오는 결과값을 chatgpt에 물어보면 어떤 사용자인지 알려줄 것입니다. 

 

4. logrotate를 실행합니다. 

sudo logrotate /etc/logrotate.conf

5. 권한을 설정합니다. 

sudo chmod 755 /home/vagrant/code/프로젝트 명/storage/logs/

추가 설명)

'755'는 다음과 같은 권한으로 부여합니다. 

  • 소유자: rwx(읽기, 쓰기, 실행)
  • 그룹: r-x(읽기, 실행)
  • 다른 사용자: r-x(읽기, 실행)

추가 설명) 제가 기본적으로 권한 설정안했을 때 발생되는 이슈에 맞춰서 해결한 것임으로 사용자마다 다른 이슈가 있을 수 있습니다. 그부분을 주의해서 이 코드를 적용하기 전에 한번도 권한 이슈가 어떻게 발생되는 지 확인하시길 바랍니다.

6. logrotate 재실행 합니다. 

sudo logrotate -v /etc/logrotate.d/laravel-logs

추가 설명) 정상적으로 실행이 된다면 로그가 압축되어 사이즈가 정리되는 것을 보실 수 있습니다. 

만약에 정상적으로 실행이 되었지만 사이즈 압축이 안되었거나 log.1등 다른 변화들이 없다면 제대로 처리가 안된 것이니 다시 한번 재실행을 하시길 바랍니다. 

sudo logrotate -f /etc/logrotate.d/laravel-logs

이건 수동 로테이션 테스트 코드인데 코드에 문제가 있다면 이 코드를 실행했을 때 어디가 문제임을 알 수 있습니다. 

그래도 전 과정까지 잘되셨다면 충분히 여기서 나오는 에러는 chatgpt에 물어보고 차근차근 맞춰서 하시면 잘해결될 것입니다.  

728x90
반응형
Comments