로그 데이터 통합 관리: ELK 스택 구축 및 Kibana 시각화로 로그 지옥 탈출하기

JavaScript AWS Database 로그 데이터 통합 관리: ELK 스택 구축 및 Kibana 시각화로 로그 지옥 탈출하기 ⏱️ 읽는 시간: 약 8분 | 📊 3,807자 📑 목차 1. 개발자의 악몽, 분산된 로그의 늪에서 우아하게 탈출하기 2. 1. ELK Stack: 왜 하필 이 조합인가? (아키텍처의 미학) 3. 2. 로그스태시(Logstash) 심층 분석: 비정형 로그를 정복하라 개발자의 악몽, 분산된 로그의 늪에서 우아하게 탈출하기 안녕하세요. 15년 차 백엔드 개발자이자, 여러분과 함께 밤새워 코드를 고민하는 멘토입니다. 오늘은 조금 무거운 주제일 수도 있지만, 실무에서 가장 중요한 '생존 기술' 중 하나인 로그 관리에 대해 깊이 있게 이야기해 보려 합니다. 혹시 이런 경험 없으신가요? 금요일 오후 5시, 퇴근을 준비하는데 고객센터에서 "결제가 안 돼요!"라는 긴급 클레임이 들어옵니다. 식은땀을 흘리며 서버에 접속합니다. 그런데 서버가 10대네요? 터미널 창을 10개 띄워놓고 tail -f catalina.out 을 치며 눈이 빠져라 에러 로그를 찾습니다. 텍스트가 폭포수처럼 흘러가고, "이 서버가 아닌가? 저 서버인가?" 하다가 결국 30분이 지나서야 겨우 로그 한 줄을 발견합니다. "NullPointerException". 허탈하죠. 원인을 찾았을 때는 이미 고객들의 불만이 폭주한 뒤입니다. 저는 주니어 시절, 이 '로그 찾아 삼만리' 때문에 여자친구와의 기념일 저녁 약속을 세 번이나 어겼던 뼈아픈 기억이 있습니다. ☕ 커피를 아무리 마셔도 해결되지 않는 피로감과 자괴감은 덤이었...

리눅스 서버 디스크 용량이 100% 찼을 때 du 명령어로 대용량 파일 경로를 식별하고 안전하게 공간을 확보하는 방법

리눅스 서버 디스크 용량이 100% 찼을 때 du 명령어로 대용량 파일 경로를 식별하고 안전하게 공간을 확보하는 방법

리눅스 서버를 운영하다 보면 누구나 한 번쯤 등골이 서늘해지는 경험을 하게 됩니다. 바로 "No space left on device"라는 에러 메시지와 함께 서비스가 중단되는 상황입니다. 디스크 용량이 100% 가득 차게 되면 데이터베이스가 멈추고, 새로운 로그를 기록할 수 없으며, 심지어 탭 완성(Tab completion) 같은 쉘의 기본 기능조차 작동하지 않게 됩니다. 이러한 상황은 예고 없이 찾아오지만, 대부분의 원인은 관리되지 않은 로그 파일, 임시 백업 파일, 혹은 좀비 프로세스가 잡고 있는 삭제된 파일들입니다. 오늘은 당황하지 않고 침착하게 리눅스 서버의 디스크 점유율을 분석하고, du 명령어를 활용해 범인을 찾아내며, 안전하게 공간을 확보하는 A to Z 가이드를 상세하게 다뤄보겠습니다.

1. 디스크 용량 부족 상황의 정확한 진단과 접근

문제를 해결하기 위해서는 먼저 현재 상황을 정확히 파악하는 것이 중요합니다. 서버가 느려졌다고 해서 무작정 재부팅을 하는 것은 문제의 원인을 덮어버리는 미봉책에 불과합니다. 우리는 터미널 환경에서 가장 강력하고 가벼운 도구들을 사용하여 디스크의 어느 파티션이 문제인지, 그리고 전체적인 파일 시스템의 구조가 어떻게 되어 있는지를 먼저 살펴보아야 합니다.

df 명령어로 전체적인 파일 시스템 개요 파악하기

가장 먼저 입력해야 할 명령어는 df -h입니다. 여기서 df는 'disk free'의 약자이며, -h 옵션은 사람이 읽기 쉬운 형태(Human-readable, 즉 GB, MB 단위)로 보여달라는 뜻입니다. 이 명령어를 실행하면 현재 마운트된 모든 파일 시스템의 전체 크기, 사용된 공간, 남은 공간, 그리고 사용률(%)이 표시됩니다. 여기서 우리가 주목해야 할 것은 'Use%' 항목이 100%이거나 그에 육박하는 파티션입니다.

진단 팁: 보통 리눅스 시스템에서 문제가 되는 파티션은 루트 파티션(/)인 경우가 많습니다. 하지만 데이터베이스를 별도의 파티션(/var/lib/mysql 등)이나 백업용 스토리지(/mnt/backup)에 분리해 둔 경우라면 해당 마운트 포인트의 용량을 확인해야 합니다. 만약 루트 파티션이 100%라면, 시스템 로그나 애플리케이션 로그, 혹은 패키지 캐시가 원인일 확률이 매우 높습니다.

이 단계에서 중요한 것은 '어느 디렉토리(마운트 포인트)'가 꽉 찼는지를 식별하는 것입니다. 예를 들어, /dev/sda1이 / (루트)에 마운트되어 있고 사용률이 100%라면, 우리는 루트 디렉토리 하위의 어딘가에 대용량 파일이 숨어 있다는 사실을 알 수 있습니다. 이제 본격적으로 범인을 색출하기 위해 du 명령어를 사용할 차례입니다.

du 명령어의 핵심 옵션 이해와 전략적 사용

du(Disk Usage) 명령어는 특정 디렉토리나 파일이 디스크에서 얼마나 많은 공간을 차지하고 있는지를 보여주는 강력한 도구입니다. 하지만 옵션 없이 단순히 du를 입력하면, 현재 디렉토리 하위의 모든 파일 목록이 출력되면서 스크롤이 끝없이 내려가는 상황을 겪게 됩니다. 따라서 우리는 필요한 정보만 요약해서 볼 수 있는 옵션 조합을 사용해야 합니다.

  • -h (human-readable): 용량을 K, M, G 단위로 표시하여 직관적으로 이해할 수 있게 합니다.
  • -s (summarize): 하위 디렉토리의 내용을 모두 보여주는 대신, 해당 디렉토리의 총합계 용량만 보여줍니다.
  • --max-depth=1: 현재 디렉토리에서 딱 한 단계 아래의 디렉토리까지만 용량을 보여줍니다. 이 옵션은 범위를 좁혀나갈 때 매우 유용합니다.

가장 효율적인 탐색 방법은 최상위 경로인 루트(/)에서 시작하여 점차 용량이 큰 하위 디렉토리로 파고드는 방식입니다. 이를 드릴 다운(Drill-down) 방식이라고 합니다. 예를 들어, 루트 디렉토리에서 du -h --max-depth=1 / 명령어를 실행하면 /var, /usr, /home, /opt 등 각 최상위 디렉토리의 용량이 출력됩니다. 만약 /var 디렉토리가 유독 크다면, 다음 단계에서는 /var 내부를 조사하는 식으로 범위를 좁혀 나갑니다.

2. 대용량 파일 식별 및 추적 프로세스

어느 디렉토리가 문제인지 대략적인 위치를 파악했다면, 이제 구체적으로 어떤 파일이 디스크를 점유하고 있는지 찾아내야 합니다. 단순히 디렉토리 용량만 아는 것으로는 부족합니다. 수만 개의 작은 파일들이 모여서 용량을 차지하는 것인지, 아니면 단 하나의 거대한 로그 파일이 문제인지에 따라 해결 방법이 완전히 달라지기 때문입니다.

sort 명령

🔎 관련 상품 추천

아래 링크를 통해 구매 시 운영자에게 일정 수수료가 발생할 수 있습니다.

리눅스 서버 디스크 용량이 100% 찼을 때 du 명령어로 대용량 파일 경로를 식별하고 안전하게 공간을 확보하는 방법

'리눅스 서버 디스크 용량이 100% 찼을 때 du 명령어로 대용량 파일 경로를 식별하고 안전하게 공간을 확보하는 방법' 관련 상품을 쿠팡에서 확인해 보세요.

상품 보러가기 →

댓글

이 블로그의 인기 게시물

VS Code에 GitHub Copilot 연동해서 코딩 생산성 높이는 설정 가이드 완벽 정복

Kubernetes란 무엇인가?

해외여행 이심 데이터 안 터질 때 데이터 로밍 차단과 APN 설정 점검으로 네트워크 연결 완벽 해결