돌아온 첫 시간에 로그 2.5개월치를 날렸다

두 달 만에 연 DGX Spark 세션에서 "로그 확인해줘"가 컨테이너 재생성으로 이어져 334MB가 사라졌다. 살아남은 건 다른 시스템이 우연히 보고 있던 14일치

DGX Spark는 로컬 LLM을 올려 둔 장비다. 공시 요약 서비스 배치가 하루에 몇 번 부르는 것 말고는 두 달 넘게 혼자 돌았다. 오랜만에 세션을 열어 상태를 훑다가 로그를 봐 달라고 했는데, 확인만 시킨 줄 알았던 그 요청 안에 되돌릴 수 없는 단계가 들어 있었다.

하려던 것

6월 초 이후 DGX Spark 쪽 세션을 두 달 넘게 열지 않았다. 서버는 그동안 혼자 돌았다. 공시 요약 서비스 배치가 하루에 몇 번 부르는 게 전부였다.

8월 15일 아침에 오랜만에 접속했다. 첫 마디는 “오랜만이네, 지금 서버 상태 좀 알려줘”였다. 상태를 보고, 커밋 안 된 변경을 정리하고, 지금 쓰는 모델보다 나은 게 나왔는지 검색을 시켰다. 그리고 로그를 봐 달라고 했다.

어떻게 시켰나

로그 좀 봐볼래? 디스크 용량 얼마나 쓰고 있는지, 로그는 로테이트되고 있는지 확인 좀.

확인은 정확했다. Docker 기본 json-file 드라이버는 크기 제한이 없다. vLLM 컨테이너 로그가 2.5개월 동안 무제한으로 쌓여 약 334MB였다. 로테이션은 설정된 적이 없었다. Claude Code가 조치 두 가지를 번호 붙여 제안했고, 나는 두 분 뒤에 “1, 2 모두 진행해줘”라고 답했다.

어디서 막혔나

로테이션은 docker-compose의 logging 옵션이다. 옵션을 바꾸려면 컨테이너를 다시 만들어야 한다. Claude Code는 승인을 받자마자 그렇게 했다. 그리고 Docker의 json 로그는 컨테이너 인스턴스에 붙어 있다. 컨테이너가 사라지면 로그도 같이 사라진다.

334MB가 그 자리에서 없어졌다. 8분 뒤에 알아챘다.

아, 로깅을 살펴보고 바꿀 만한지 판단하라는 게 내 의도였는데. 다 지워버렸니?

Claude Code의 결산에 그대로 적혔다. “내가 치른 비용: vLLM 로그 히스토리 334MB 삭제.” 나는 “확인해줘”라고 했고, 제안을 승인했고, 그 제안 안에 되돌릴 수 없는 단계가 들어 있었다. 승인 한 번에 확인과 변경이 같이 묶여 있었다.

어떻게 풀었나

되돌릴 방법은 없었다. 대신 살아남은 게 있었다. 4월에 서버를 세우던 날 붙인 Promtail이 Loki로 로그를 계속 보내고 있었다. 보존 기간이 336시간이라 8월 1일 이후 14일치가 남아 있었다. 다른 시스템이 우연히 같은 걸 보고 있어서 살았다.

로테이션은 50MB 다섯 개로 설정됐다. 같은 날 후속 정리도 했다. gpu-memory-utilization을 0.85에서 0.75로 내려 KV 캐시를 46.68GiB에서 34.55GiB로 줄이고, 호스트 RAM 여유를 9GB에서 21GB로 벌렸다. 6월 3일부터 돌고 있었는데 커밋된 적 없던 설정도 그제야 올렸다.

낮에 한 번 더 물었다. “이렇게 바꾸면 뭐가 더 좋아진 거야? 나는 좋아진 게 없는 것 같은데.” 로테이션은 앞으로의 사고를 막는 것이지 지금 좋아지는 건 없다. 그 답이 정직해서 그냥 넘어갔다.

배운 점