AWS EC2에 배포된 Spring Boot 서버에서는 사용자의 행동, API 요청 흐름, 에러 발생 지점 등을 모두 로그(Log) 로 기록한다.
이 로그는 단순한 문자열이 아니라, 서비스 운영에서
문제 파악 → 원인 분석 → 병목 추적 → 장애 대응 → 성능 개선까지 모든 과정에 필수적인 핵심 데이터다.
문제는, 이렇게 발생하는 로그가 시간이 지날수록 서버 내부에서만 누적되고, 파일로만 남아있으면:
- 특정 사용자 요청 흐름을 찾기 어렵고
- 동일한 traceId를 기준으로 묶어서 보기 힘들고
- 에러 발생 전후의 로그를 빠르게 조회하기 어렵고
- 서버가 늘어나면 로그를 서버마다 직접 들어가서 확인해야 하고
- 장애가 발생해도 빠르게 원인을 찾기 힘들다
이런 문제를 해결하기 위해 AWS에서 생성되는 Spring Boot 로그를 라즈베리파이에 설치한 Elasticsearch + Kibana(ELK) 로 수집하여 실시간으로 분석하고 시각화하는 로그 파이프라인을 구축하려 한다.
Loki 또한 로그 수집 도구이지만, Grafana와 함께 사용할 때 시계열 조회는 가능해도 복잡한 JSON 조회, 분석, Dashboard 구성은 제한적이기 때문에 ELK stack(Elastic + Kibana) 을 선택했다.
Elasticsearch 역할 (EL)
- 로그/데이터를 저장하고 검색하는 DB + 검색엔진
- 로그 파이프라인(수집 → 가공 → 저장) 역할
Kibana 역할 (K)
Elasticsearch에 저장된 로그·데이터를 사람이 보기 좋게 시각화하는 “웹 대시보드”
- 대시보드 제공 (차트, 그래프, 로그 테이블 등)
- 검색 필터링 (쿼리로 로그 검색)
- Elastic Stack 설정 관리
- 알람 설정 가능
- Dev Tools 콘솔에서 직접 Elasticsearch 쿼리 실행
전체적인 로그 시스템 파이프라인 흐름 (Architecture)
Client 요청
↓
AWS Spring Boot 서버
(Logback JSON 로그 생성 + TraceId 포함)
↓
로그 파일 생성 (/app/logs/info, warn, error)
↓
AWS에서 Filebeat를 사용해 Raspberry Pi로 로그 전송
↓
- Raspberry Pi -
Elasticsearch + Kibana
(로그 저장 / 검색 인덱스 생성) (로그 시각화 / 분석 / Dashboard 구성)
설치
1. Elasticsearch와 Kibana가 동일한 가상 네트워크 안에서 통신할 수 있도록 Docker 네트워크 생성
( 네트워크를 만들어두면, 컨테이너끼리 http://elasticsearch:9200처럼 서비스 이름으로 직접 접근할 수 있다.)
docker network create elk
2. Elasticsearch 설치
docker run -d \
--name elasticsearch \
--net elk \
-p 9200:9200 \
-e "discovery.type=single-node" \
-e "xpack.security.enabled=false" \
-e "ES_JAVA_OPTS=-Xms1g -Xmx1g" \
-v esdata:/usr/share/elasticsearch/data \
docker.elastic.co/elasticsearch/elasticsearch:8.13.4
3. Kibana 설치
docker run -d \
--name kibana \
--net elk \
-p 5601:5601 \
-e "ELASTICSEARCH_HOSTS=http://elasticsearch:9200" \
docker.elastic.co/kibana/kibana:8.13.4
마지막으로 라즈베리파이 ip와 kibana 포트 5601을 붙여 접속하면 Kibana에 접속 가능하다. ( xxx.xxx.xxx.xx:5601 )

'Infra > LogBack' 카테고리의 다른 글
| 라즈베리파이에 Loki + Grafana로 로그 수집 시스템 구축하기 (0) | 2025.12.22 |
|---|---|
| Spring Boot + Logback 구조적 JSON 로그 만들기 (Logging - 2) (0) | 2025.11.29 |
| FileBeat를 활용해 로그 전송 (Loggin - 3) (0) | 2025.11.22 |