문제점

EB(Elastic Beanstalk) 이벤트 로그나 eb 명령을 통한 배포 요청에는 모두 배포됨으로 표시되고, 실제로 서버 동작에 이상이 없으나 새로운 버전 배포 시 해당 버전이 반영되지 않는 문제가 있었다.
EB의 애플리케이션 버전 파일을 다운로드 받아 확인해도 문제가 없었기에, 해당 EC2 인스턴스로 직접 접속하여 확인했더니 실제로는 배포가 되지 않았던 것이다.
EB의 모든 로그는 /var/log
에 모인다. 해당 디렉터리에서 우선 EB의 배포 및 관리를 담당하는 eb-engine.log
를 확인해보았더니…
2025/04/24 16:22:10.565661 [INFO] Download successfullbytes downloaded2025/04/24 16:22:10.565692 [ERROR] failed to populate deployment meta data with error failed to generate App version manifest file with error write /opt/elasticbeanstalk/deployment/app_version manifest. json: no space left on device
엥? no space left on device? 바로 df -h
를 통해 디스크 사용량을 확인했다.

10기가의 용량이 꽉 차있었다. 하지만 내가 배포한 것은 nest.js 기반 백엔드 서버라서, 앱 용량이 커봤자 2기가를 넘지 않는다.
해결
디렉터리 별 용량을 조회하는 법은 다음과 같다.
du -h --max-depth=1 (디렉터리) | sort -hr | head -n 10

설마 했지만 역시나… 로그가 문제였다. /var/log
로 가서 ls -l
을 통해 용량이 큰 파일을 확인하고 정리해줬다.
근본적인 해결
왜 이런 문제가 생기나, 그리고 eb가 왜 자동으로 관리를 안해주나에 대해 찾아보다 다음 serverfault 질문을 발견했다.
실제 앱 로그는 web.stdout.log
에서 쌓이는데, 이를 rsyslog 데몬이 /var/log/messages에 기록하는 역할을 한다고 한다.
/etc/rsyslog.d/web.conf
파일을 수정해서 stdout 로그 기록을 하지 않도록 설정할 수 있다고 한다.
if $programname == 'web' then { *.=warning;*.=err;*.=crit;*.=alert;*.=emerg /var/log/web.stderr.log *.=info;*.=notice /var/log/web.stdout.log stop}
나는 무슨 영향이 있을지 몰라서 일단은 급한 불만 끄고 두었다. eb에 어떤 영향을 줄지 모르니 완전히 끄는 것보단 로테이션을 설정 하는게 나을 것 같기도 하다.