2025-03-13
Flix 프로젝트: 개발 기록 - 3
1. 오늘의 진행 상황 & 구현 내용
Filebeat 로그 수집
Docker 환경에서 Spring Boot 애플리케이션 로그를 수집하기 위해 Filebeat 컨테이너를 추가했습니다. 처음에는 JSON 형식의 로그를 시도했으나, 현재 로그가 라인별로 기록되고 있어 단일 라인 텍스트 이벤트 수집 방식으로 전환했습니다.
Kafka 연동
수집된 로그를 Kafka 토픽으로 전송하도록 Filebeat를 설정했습니다. 현재는 로컬 테스트를 위해 Filebeat와 Kafka가 docker-compose 환경에서 함께 실행되지만, 향후 Filebeat는 세션, 인증, 스트리밍 서버와 함께 배포하고 Kafka는 별도 인프라에서 운영할 계획입니다. ELK 스택도 별도 서버로 분리할 예정입니다.
Docker 네트워크 설정
Filebeat와 Kafka가 동일한 네트워크에서 hostname(kafka)과 port(9092)를 조정하여 사용하도록 설정했습니다. 현재 로그는 단일 라인으로 수집되며, Kibana 모니터링은 아직 구축하지 않았습니다.
Docker 볼륨 & 권한 이슈
Windows 환경에서 filebeat.yml 파일 권한 문제가 발생하여, Dockerfile 수정이나 직접 chmod 적용이 필요했습니다.
2. 문제 있었던 점 & 해결 과정
UnknownHostException: kafka
애플리케이션이 초기에 kafka hostname을 인식하지 못하는 문제가 발생했습니다. 해결 방법:
- docker-compose 네트워크 통합
- KAFKA_ADVERTISED_LISTENERS 설정 수정
- localhost:9092(로컬 실행)와 kafka:9092(컨테이너 실행) 구분
이후 Spring Boot가 직접 Kafka를 처리하지 않도록 아키텍처를 재구성하여 향후 연결 문제를 제거했습니다.
추가 이슈
멀티라인 로그 설정이 아직 구현되지 않았습니다. 로그가 지속적으로 기록되지 않을 때 Filebeat가 이벤트를 전송하지 않는 이슈가 있어, 프로덕션 환경에서 추후 테스트할 예정입니다.
3. 정리 & 앞으로의 계획
현재 상태: Filebeat + Kafka 연동만 검증된 상태이며, Kibana 모니터링 설정은 미완료입니다.
향후 작업:
- ELK 서버를 별도 배포하고 Filebeat가 여러 서버에서 로그를 수집하도록 구성
- 로그 시각화 및 서비스/오류 모니터링을 위한 Kibana 대시보드 구축
- 여러 줄에 걸친 스택 트레이스를 위한 멀티라인 설정 재구성
- 레지스트리 및 로그 파일 구조 분석을 통한 이벤트 전송 이슈 해결