이 문서를 통해 아래 질문들에 답할 수 있게 됩니다.

  • 로그 파일 쓰기와 성능에서 붙잡아야 할 핵심 판단 기준은 무엇인가?
  • 로그도 운영 트래픽이다라는 기준은 어떤 JVM/OS 신호로 확인되는가?
  • Java/Spring 코드에서 로그 파일 쓰기와 성능 판단 기준은 어떤 장애 신호로 드러나는가?

개요

이 문서의 주제는 로그 파일 쓰기와 성능이다. 애플리케이션 로그가 CPU, disk, stdout 수집, rotation에 미치는 영향을 정리한다.

먼저 붙잡을 기준은 다음 문장이다. 로그도 운영 트래픽이다. 이 문서는 이 기준을 Java/Spring 실행 흐름, JVM/OS 관찰 지표, 장애 판단 순서로 연결한다.

핵심 모델

  • 판단 기준: 로그도 운영 트래픽이다.
  • 로그 한 줄은 formatting, encoder, appender, file/stdout write, collector 전송을 거친다.
  • 동기 로그는 요청 thread가 쓰기 비용을 직접 부담한다.
  • Async appender는 요청 thread 부담을 줄이지만 queue overflow와 drop/block 정책을 만든다.
  • 장애 중 로그 폭주는 증거를 늘리는 동시에 CPU와 disk 병목을 키울 수 있다.

문서별 핵심 구분

  • 로그는 disk, CPU, lock, 수집 agent를 통과하는 운영 트래픽이다.
  • 동기 로그와 큰 stack trace는 요청 latency에 영향을 줄 수 있다.
  • 로그 폭주는 장애 증거이면서 장애 원인이 될 수 있다.

원리

로그는 단순 문자열 출력이 아니라 formatting, parameter evaluation, lock/queue, encoder, file/stdout write, rotation, compression, collector 전송을 거치는 운영 트래픽이다.

동기 로그는 요청 thread가 로그 쓰기 비용을 직접 부담한다. async appender는 요청 thread 부담을 줄일 수 있지만 queue가 차면 drop, block, flush 지연 같은 정책 문제가 생긴다.

Stack trace와 debug 로그 폭주는 CPU와 disk를 동시에 압박한다. 장애가 발생하면 로그가 늘고, 늘어난 로그가 다시 I/O 병목을 키우는 feedback loop가 생길 수 있다.

로그 파일 쓰기와 성능 관점에서 중요한 점은 로그를 증거이면서 부하로 보는 것이다. 장애 중에는 로그량, appender queue, rotation, collector 지연, disk 사용량을 같은 시간축에 놓아야 한다.

Java/Spring 연결

  • Controller error log가 같은 stack trace를 반복하면 CPU와 disk를 동시에 압박한다.
  • Logback/Log4j async appender는 queue size, discard policy, flush 정책을 함께 봐야 한다.
  • stdout 기반 container에서는 log collector 지연이 애플리케이션 쓰기 지연으로 돌아올 수 있다.
  • Access log, GC log, application log가 같은 volume에 있으면 장애 중 서로 영향을 준다.
  • 로그량 지표를 endpoint, error rate, latency spike와 같은 시간축에 맞춘다.

코드와 설정 예시

for (Order order : orders) {
    log.info("export order={}", order); // 대량 반복 로그는 I/O와 CPU를 함께 압박한다.
}

예시는 로그 한 줄이 반복될 때 운영 트래픽으로 커지는 지점을 보여 준다. 객체 문자열화 비용, 로그 레벨, appender queue, disk write, collector 처리량을 함께 봐야 한다.

관찰 명령

journalctl -u my-app --since '10 min ago' | wc -l
du -sh /var/log/* 2>/dev/null | sort -h | tail
lsof -p <pid> | grep log | head

로그 파일 쓰기와 성능 관찰 명령은 결론이 아니라 가설 확인 도구다. 운영 중에는 반복 간격, 대상 PID, 수집 시각을 함께 남기고 출력이 큰 명령은 범위를 제한한다.

지표 해석

신호먼저 의심할 것다음 확인
open files가 limit에 근접FD leak 또는 connection 폭주lsof, /proc/<pid>/fd
iowait 증가와 latency 상승disk 병목, flush 지연iostat, vmstat
로그량 급증 후 API 지연동기 로그 또는 log collector 지연log rate, appender queue
tmp 사용량 증가upload/export/temp cleanup 실패tmp directory, lsof deleted

로그 파일 쓰기와 성능에서는 핵심 신호와 보조 지표를 같은 시간축에서 맞춘다. 먼저 변한 신호와 뒤따라 포화된 신호를 분리해야 원인과 결과를 구분할 수 있다.

장애 상황에서 보는 순서

  1. 장애 시점 전후 로그 line rate와 error rate를 비교한다.
  2. appender queue, drop/block 정책, collector 지연을 확인한다.
  3. log file size, rotation, compression 작업이 겹쳤는지 본다.
  4. 반복 stack trace와 debug log 폭주 경로를 찾는다.
  5. sampling, rate limit, log level 조정, 임시 기능 차단을 검토한다.

이 순서는 로그를 증거이자 부하로 동시에 다루기 위한 루틴이다.

실전 팁

  • endpoint별 로그량과 error 로그량을 latency spike와 함께 본다.
  • async appender를 쓰면 queue size, discard policy, flush 정책을 확인한다.
  • stack trace 반복 로그는 sampling, rate limit, error grouping을 검토한다.
  • stdout 기반 환경에서는 log collector 지연이 애플리케이션 쓰기 지연으로 돌아올 수 있다.
  • rotation과 압축이 업무 피크와 겹치지 않는지 확인한다.

주니어 팁

  • 로그 파일 쓰기와 성능 주제는 용어 정의보다 장애 때 어떤 증거로 확인할지까지 연결해 익힌다.
  • 정상 상태에서 이 문서의 관찰 명령을 실행해 로그 파일 쓰기와 성능 기준선을 남긴다.
  • 장애 시에는 로그 파일 쓰기와 성능 신호가 평소 기준선에서 벗어난 시각과 방향을 먼저 본다.

시니어 팁

  • 로그 파일 쓰기와 성능 주제의 영향이 pool, queue, retry, timeout으로 번지는 경로를 설계 리뷰에 포함한다.
  • 로그 파일 쓰기와 성능 runbook에는 실행 명령, 정상 범위, 해석 기준, 금지할 대응을 같이 둔다.
  • 로그 파일 쓰기와 성능 판단이 container, LB, 다중 인스턴스 환경에서도 같은 의미인지 확인한다.

Guru급 팁

  • 로그 파일 쓰기와 성능 주제는 단일 snapshot보다 변화 방향이 중요하다. 같은 명령을 간격을 두고 실행해 상태가 증가, 유지, 회복 중 어디인지 본다.
  • 고급 도구는 로그 파일 쓰기와 성능 가설을 좁힐 때만 사용하고 기본 지표와 모순되는지 먼저 확인한다.
  • 로그 파일 쓰기와 성능 조치 후에는 CPU, memory, socket, disk, pool 중 다음 포화 지점이 어디로 이동했는지 확인한다.

위험 신호!

  • 장애 때 같은 stack trace를 초당 수천 번 남긴다.
  • debug 로그가 운영에서 켜져 있는데 로그량 baseline이 없다.
  • async appender queue가 꽉 찼을 때 block/drop 정책을 모른다.
  • log rotation 압축이 CPU와 disk를 동시에 압박한다.
  • 로그 수집기가 느린데 애플리케이션 disk만 확인한다.

확인 질문

확인 질문

  • 로그 파일 쓰기와 성능 주제를 장애 중 확인할 때 Application 로그만으로 부족한 이유는 무엇인가?
    • 로그는 코드 경로를 보여 주지만 로그 파일 쓰기와 성능의 JVM/OS 자원 상태, 대기 위치, 포화 방향은 별도 지표로 확인해야 하기 때문이다.
  • 로그 파일 쓰기와 성능 관련 설정이나 pool 크기를 바꾸기 전에 확인할 것은 무엇인가?
    • 먼저 변한 신호, 하위 자원 capacity, 변경이 완화인지 증폭인지 판단할 기준을 로그 파일 쓰기와 성능 지표로 확인해야 한다.
  • 로그 파일 쓰기와 성능 재발을 막기 위해 장애 기록에 무엇을 남겨야 하는가?
    • 발생 시간, 영향 범위, 사용한 명령, 로그 파일 쓰기와 성능 핵심 지표, 원인 판단, 완화 조치, 근본 수정, 남은 리스크를 남긴다.

참고 문서