스프링 부트에서 Kafka 로그 관리하기: 불필요한 로그 숨기고 중요한 로그만 남기는 방법(feat. AppInfoParser)
개요
Apache Kafka를 스프링 부트 애플리케이션에서 사용할 때, 클라이언트 초기화나 Kafka 서버와의 통신 과정에서 많은 정보성 로그가 출력됩니다. 예를 들어, Kafka 버전 정보나 시작 시각 같은 로그가 대표적입니다. 이런 로그가 많아지면 실제로 중요한 로그를 찾기 어려워질 수 있습니다.
이 글에서는 Kafka의 불필요한 로그를 숨기고 중요한 로그만 남기기 위한 방법을 알아보겠습니다. 이를 위해 로그 레벨의 우선순위를 이해하고, 설정을 통해 로그 출력을 효율적으로 관리하는 방법을 설명합니다.
AppInfoParser가 많이 나와 해당 부분에 대한 처리를 진행하려고 설정 파일을 수정해보았습니다.
AppInfoParser의 INFO 로그
Kafka는 애플리케이션이 실행될 때 클라이언트 초기화 과정에서 여러 가지 정보를 출력합니다. 일반적으로 아래와 같은 로그가 나타납니다:
이 정보는 Kafka의 버전, 커밋 ID, 시작 시간 등과 같은 정보성 로그입니다. 운영 환경에서는 이런 로그가 과도하게 출력되면 로그 파일이 커지거나, 실제 문제를 디버깅할 때 중요한 로그를 찾기 어려워질 수 있습니다.
로그 레벨의 우선순위 이해하기
로그를 관리하기 위해 먼저 로그 레벨의 개념을 이해하는 것이 중요합니다. 스프링 부트와 Kafka는 다양한 로그 레벨을 지원하며, 각 로그 레벨은 우선순위를 가지고 있어 상위 레벨일수록 더 중요한 정보를 기록합니다.
로그 레벨의 우선순위는 다음과 같습니다:
- ERROR: 애플리케이션에서 치명적인 오류가 발생했을 때만 로그를 남깁니다. 이 레벨은 시스템에 문제가 발생하여 즉각적인 조치가 필요한 경우를 나타냅니다.
- WARN: 오류는 아니지만 주의가 필요한 상황에 대한 로그를 남깁니다. 예를 들어, Kafka 브로커와의 연결이 일시적으로 끊겼을 때 또는 성능에 영향을 줄 수 있는 잠재적인 문제가 있을 때 경고를 남깁니다.
- INFO: 시스템의 정상 동작에 대한 정보를 기록합니다. Kafka 클라이언트 초기화, 브로커와의 연결 성공 등 정상적으로 작동하고 있는지 알 수 있는 정보가 포함됩니다. 기본적으로 Kafka는 많은 INFO 로그를 남깁니다.
- DEBUG: 세부적인 디버깅 정보를 기록합니다. 주로 개발 단계에서 사용되며, 코드가 어떻게 실행되는지, 내부에서 어떤 일이 일어나는지를 보여줍니다.
- TRACE: DEBUG보다 더 자세한 디버깅 정보를 남깁니다. 매우 세밀한 정보를 추적할 수 있지만, 보통 일반적인 애플리케이션에서는 잘 사용되지 않습니다.
로그 레벨의 설정에 따라 출력되는 로그의 양과 내용이 달라지며, 상위 레벨을 설정하면 하위 레벨의 로그는 표시되지 않습니다. 예를 들어, WARN으로 설정하면 INFO나 DEBUG 수준의 로그는 출력되지 않고, WARN과 ERROR 로그만 출력됩니다.
Kafka 로그를 줄이는 방법
application.properties 또는 application.yml에서 설정
스프링 부트에서는 설정 파일을 통해 특정 패키지의 로그 레벨을 쉽게 조정할 수 있습니다. application.properties 또는 application.yml 파일에서 Kafka 관련 패키지의 로그 레벨을 설정하면 됩니다.
- application.properties 파일에서:
logging.level.org.apache.kafka=WARN
- application.yml 파일에서
logging:
level:
org.apache.kafka: WARN
이렇게 설정하면 INFO 이하의 로그는 출력되지 않고, 경고(WARN)와 오류(ERROR) 로그만 표시됩니다.
3.2 logback.xml 설정
만약 logback.xml을 사용 중이라면, 로그 설정 파일에서 Kafka의 로그 레벨을 직접 조정할 수 있습니다. 아래 예시처럼 Kafka 패키지의 로그 레벨을 WARN으로 설정할 수 있습니다:
<configuration>
<logger name="org.apache.kafka" level="WARN" />
</configuration>
이렇게 설정하면 불필요한 정보성 로그는 출력되지 않고, 중요 경고 및 오류 로그만 확인할 수 있습니다.
로그 레벨을 ERROR로 설정하면 안 될까?
Kafka 로그를 최소화하기 위해 ERROR로 설정하면, 실제로 애플리케이션에서 오류가 발생했을 때만 로그를 남깁니다. 하지만 이 경우, 경고(WARN) 로그를 놓칠 수 있습니다. 경고 로그는 심각한 문제는 아니지만, 문제의 징후나 성능 저하, Kafka 브로커와의 일시적인 연결 문제 등을 알려줄 수 있습니다.
- WARN 로그를 놓칠 경우: 예를 들어, 브로커와의 연결이 일시적으로 끊겼거나, 메시지 처리 성능에 영향을 줄 수 있는 상황이 경고로 기록될 수 있습니다. 이러한 로그를 통해 문제를 미리 감지하고 예방 조치를 할 수 있습니다.
따라서, 중요한 경고를 놓치지 않기 위해 Kafka의 로그 레벨을 WARN으로 설정하는 것을 권장합니다. 이는 불필요한 정보성 로그는 차단하면서, 문제를 미리 감지할 수 있는 중요한 경고와 오류 로그는 여전히 볼 수 있게 해줍니다.
결론
스프링 부트에서 Kafka 로그를 효율적으로 관리하려면 로그 레벨의 우선순위를 이해하고, 이를 적절히 설정하는 것이 중요합니다. Kafka의 정보성 로그를 모두 보이지 않게 하면서도 중요한 경고와 오류를 놓치지 않으려면, WARN 레벨을 사용하는 것이 가장 효과적입니다.
요약
- 불필요한 로그를 숨기려면: WARN 레벨로 설정.
- 오직 치명적인 오류만 보고 싶다면: ERROR 레벨로 설정.
- 로그 레벨 우선순위는: ERROR > WARN > INFO > DEBUG > TRACE
적절한 로그 레벨 설정을 통해 애플리케이션의 로그 관리를 간소화하고, 운영 환경에서 발생할 수 있는 문제를 미리 파악하는 데 도움이 될 것입니다.
추가 자료
Kafka 로그 레벨 설정에 대한 더 자세한 정보는 아래 공식 문서에서 확인할 수 있습니다: